Campamento de Programación – Parte 4: Leer el Estado de 12 Botones en ODROID-GO

En este artículo, aprenderemos cómo leer el estado de los botones con Arduino. En la LCD aparecerá un simple resultado. Antes de empezar, asegúrate de haber seguido estas guías:

Consulta los documentos oficiales de Arduino. Estos proporcionan funciones habituales muy útiles y excelentes instrucciones detalladas. También puedes consultar la guía de programación oficial de ESP32. La mayoría de las funciones específicas de ESP32 están incluidas en esta guía.

Obtener el estado de los botones

El ODROID-GO tiene 10 botones disponibles:

  • 4 para el pad de dirección
  • 2 para una acción
  • 4 botones funcionales

Gracias a la librería GO, podemos obtener fácilmente el estado de cada botón. Primero, inicia la pantalla LCD con la función “GO.begin ()”. Fija el tamaño del texto en 2 ya que el tamaño de texto por defecto es demasiado pequeño para poder leerlo.

#include

$ void setup() {
// put your setup code here, to run once:
GO.begin();
GO.lcd.setTextSize(2);
}

$ void loop() {
// put your main code here, to run repeatedly:
}
Agrega una función independiente para mostrar el estado, y asígnale el nombre “displayButtons ()”. Esta función tiene dos pasos:

  • “GO.lcd.clear()” para borrar cualquier contenido de la LCD que haya sido mostrado previamente.
  • “GO.lcd.setCursor()” para fijar el punto de inicio e imprimir una cadena. Los dos parámetros (0, 0) significa arriba, izquierda.

#include

$ void setup() {
// put your setup code here, to run once:
GO.begin();
GO.lcd.setTextSize(2);
}

$ void displayButtons() {
GO.lcd.clear();
GO.lcd.setCursor(0, 0);
}

$ void loop() {
// put your main code here, to run repeatedly:
}
Completa “displayButtons ()” con el siguiente código. Esto mostrará si son o no presionados los botones. Cuando se presione un botón, aparecerá la cadena de caracteres “Pressed” junto al elemento que corresponde al botón.

Todos los botones existentes para ODROID-GO están disponibles como instancias de la clase Button. La clase Button tiene algunas funciones muy útiles para hacernos saber el estado del botón. Por lo tanto, utilizaremos las funciones “isAxisPressed ()” y “isPressed ()” para saber si un botón está actualmente presionado o no.

Si se presiona el botón, esta función no devuelve 0.

  • La función “isAxisPressed ()” es solo para el pad de direcciones. Si se presiona el botón, devuelve 1 o 2 para distinguir la dirección.
  • La función “isPressed ()” es para el resto de botones. Si se presiona el botón, devuelve 1.

Por último, tenemos que completar la función “loop ()” para mostrar el estado en la pantalla LCD. Hay tres funciones para añadir:

  • “GO.update()” que actualiza los estados de los botones para que las funciones “isPressed ()” funcionen bien.
  • “displayButtons()” que añade cadenas de resultados a la pantalla LCD.
  • “delay(1000)” que evita que la pantalla LCD parpadee demasiado rápido cuando actúa la función “GO.lcd.clean ()”.

#include

$ void setup() {
// put your setup code here, to run once:
GO.begin();
GO.lcd.setTextSize(2);
}

$ void displayButtons() {
GO.lcd.clear();
GO.lcd.setCursor(0, 0);

GO.lcd.println("/* Direction pad */");
GO.lcd.printf("Joy-Y-Up: %s \n", (GO.JOY_Y.isAxisPressed() == 2) ? "Pressed" : " ");
GO.lcd.printf("Joy-Y-Down: %s \n", (GO.JOY_Y.isAxisPressed() == 1) ? "Pressed" : " ");
GO.lcd.printf("Joy-X-Left: %s \n", (GO.JOY_X.isAxisPressed() == 2) ? "Pressed" : " ");
GO.lcd.printf("Joy-X-Right: %s \n", (GO.JOY_X.isAxisPressed() == 1) ? "Pressed" : " ");
GO.lcd.println("");
GO.lcd.println("/* Function key */");
GO.lcd.printf("Menu: %s \n", (GO.BtnMenu.isPressed() == 1) ? "Pressed" : " ");
GO.lcd.printf("Volume: %s \n", (GO.BtnVolume.isPressed() == 1) ? "Pressed" : " ");
GO.lcd.printf("Select: %s \n", (GO.BtnSelect.isPressed() == 1) ? "Pressed" : " ");
GO.lcd.printf("Start: %s \n", (GO.BtnStart.isPressed() == 1) ? "Pressed" : " ");
GO.lcd.println("");
GO.lcd.println("/* Actions */");
GO.lcd.printf("B: %s \n", (GO.BtnB.isPressed() == 1) ? "Pressed" : " ");
GO.lcd.printf("A: %s \n", (GO.BtnA.isPressed() == 1) ? "Pressed" : " ");
}

$ void loop() {
// put your main code here, to run repeatedly:
GO.update();
displayButtons();
delay(1000);
}
Presione CTRL-U para compilar y cargar el esquema. Luego, presiona cualquier botón para mostrar la cadena “Pressed” además de ese botón. Como habrás notado, deberás dejarlo presionarlo hasta que se actualice la pantalla LCD debido a la función “delay (1000)”.

Un ejemplo completo

El ejemplo completo está disponible haciendo clic en el menú Files → Examples → ODROID-GO → Buttons para importar y presiona CTRL-U para compilar/cargar.

Figure 1 - A completed example
Figura 1 – Un ejemplo completo

Be the first to comment

Leave a Reply