Guardar pulsador en una variable.

Buenas:

Teniendo una variable genérica que solo guarda puladores cuando llegue la instrucción adecuada. Por ejemplo, si quiero guardar una variable genérica llamado "pulsador" si pulso algunos de estos que tengo configurado, A1 al A5.


Si pulso por ejemplo el pulsador llamado A2 que se llama Abajo. En el programa de Arduino tiene un if que lo detecta y ejecuta la sentencia.

¿Algún ejemplo de cómo se hace?

Saludos.
 

Adjuntos

  • Arduino LCD.JPG
    Arduino LCD.JPG
    62.8 KB · Visitas: 10
Pulsador = digitalRead(pinx);
¿Qué guarda dentro?

¿HIGH o LOW?

Mira la función que incluye if else y lso Switch. Parece que funciona así.

C++:
if (digitalRead(A2) == HIGH)
    {
      opcion++;
    }

Función completa pero parece que tiene rebotes los pulsadores.

C++:
void Menu_Principal()
{
  // Contador de teclas y navegador.
  int opcion = 0;
  bool salir = false;
  const int seleccionMenu = 8;

  // Limpiar pantalla.
  lcd.clear();

  do
  {
    //******************************************************************
    // Dibujo el menú principal.
    String MENSAJES[] =
    {
      "** MENU PRINCIPAL **", // Posición 0.
      "  ESTADO PRINCIPAL  ", // 1
      "  NOMBRE RELES      ", // 2
      "  NOMBRE SENSORES   ", // 3
      "  ENTRADA ANALÓGICA ", // 4
      "  CONFIGURACION     ", // 5
      "  ACERCA DE...      ", // 6
      "  AYUDA             ", // 7
      "  EXTRA             ", // 8
      "  INICIO            ", // 9
      "                    ", // 10
      ">"                     // 11
    };

    switch (opcion)
    {
      case 0:
        lcd.setCursor(0, 0);     // Línea 1 del LCD.
        lcd.print(MENSAJES[0]);  // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[1]);  // > ESTADO PRINCIPAL
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[11]); // >
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[2]);  //   NOMBRE RELÉS
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[3]);  //   NOMBRE SENSORES
        break;

      case 1:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[1]);         //   ESTADO PRINCIPAL
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[2]);         // > NOMBRE RELÉS
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[11]);        // >
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[3]);         //   NOMBRE SENSORES
        break;

      case 2:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[1]);         //   ESTADO PRINCIPAL
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[2]);         //   NOMBRE RELÉS
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[3]);         // > NOMBRE SENSORES
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[11]);        // >
        break;

      case 3:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[4]);         // > ENTRADA ANALÓGICA
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[11]);        // >
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[5]);         //   CONFIGURACIÓN
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[6]);         //   ACERCA DE...
        break;

      case 4:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[4]);         //   ENTRADA ANALÓGICA
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[5]);         // > CONFIGURACIÓN
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[11]);        // >
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[6]);         //   ACERCA DE...
        break;

      case 5:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[4]);         //   ENTRADA ANALÓGICA
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[5]);         //   CONFIGURACIÓN
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[6]);         // > ACERCA DE...
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[11]);        // >
        break;

      case 6:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[7]);         // > AYUDA
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[11]);        // >
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[8]);         //   EXTRA
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[9]);         //   INICIO
        break;

      case 7:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[7]);         //   AYUDA
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[8]);         // > EXTRA
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[11]);        // >
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[9]);         //   INICIO
        break;

      case 8:
        lcd.setCursor(0, 0);
        lcd.print(MENSAJES[0]);         // ** MENÚ PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[7]);         //   AYUDA
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[8]);         //   EXTRA
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[9]);         // > INICIO
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[11]);        // >
        break;

      default:
        Serial.print(F("Fuera de rango"));
        break;
    }
    // Fin de pintar el menú principal.
    //******************************************************************

    // Leer pulsador ingresada por el usuario.

    // Validar el tipo de pulsador.
    if (digitalRead(A5) == HIGH)
    {
      switch (opcion)
      {
        case 0:
          //
          break;
        case 1:
          //
          break;
        case 2:
          //OpcionC();
          break;
        case 3:
          //
          break;
        case 4:
          //
          break;
        case 5:
          //
          break;
        case 6:
          //
          break;
        case 7:
          //
          break;
        case 8:
          salir = true;
          break;
        default:
          lcd.print(F("Fuera de rango.     "));
          break;
      }
    }

    // Entonces si pulsas pulsador Abajo.
    //tecla = digitalRead(A2);
    else if (digitalRead(A2) == HIGH)
    {
      opcion++;
    }

    // Entonces si pulsas pulsador Arriba.
    //tecla = digitalRead(A1);
    else if (digitalRead(A1) == HIGH)
    {
      opcion--;
    }

    // Si está en la última opción, salta a la primera.
    if (opcion > seleccionMenu)
    {
      opcion = 0;
    }

    // Si está en la primera posición, salta a la última.
    if (opcion < 0)
    {
      opcion = seleccionMenu;
    }

    // Uso la tecla escape como salida.
  } while (salir == false);
}
 
Última edición:
¿Qué guarda dentro?

¿HIGH o LOW?
Guarda lo que hay en el pin, que es lo que preguntabas. Si hay low, low y si hay high high.
El 99,9999% de las veces lo hago activo por cero así que al contrario de lo que propones mas adelante guardaría el low y no acumularía indefinidamente

Mira la función que incluye if else y lso Switch. Parece que funciona así.:
Tengo claro/cristalino/diáfano que y como tengo que manejar las entradas digitales, cuando almacenarlas y cuando no. Yo solo te he contestado a lo que has preguntado. No siempre se hace lo mismo, depende de que quieras hacer y en que programa.

if (digitalRead(A2) == HIGH)
{
opcion++;
}
¿Y cuando deja de crecer? no me parece buena idea, yo usaría solo el flanco de subida para incrementar y en algún momento borraría la variable. Ahí lo mimso te incrementa un montón de golpe y desborda con lo que el número disminuye, se hace negativo o a saber que pasa según esté declarado "opcion".
 
Arriba