Icono del sitio AranaCorp

Gestión de un teclado analógico 4×4 con Arduino

Tanto si se trata de una calculadora como de un teclado de edificio, solemos utilizar teclados numéricos. El teclado 4×4 es una matriz de 16 botones cuyos estados pueden ser detectados por un microcontrolador. Este módulo sólo requiere una entrada analógica del microcontrolador, a diferencia del teclado digital 4×4.

Material

Principio de funcionamiento

El teclado digital con salida analógica es un conjunto de 16 botones que se montan en una matriz con resistencias pullup de diferentes valores. Cuando se pulse un botón el circuito se cerrará con la resistencia y el valor de la tensión en la salida analógica será diferente para cada botón. La ventaja de este tipo de circuito es que puedes manejar 16 botones con sólo 1 entrada analógica del microcontrolador. Sin embargo, no es posible pulsar dos botones al mismo tiempo.

Esquema

El teclado digital utiliza una entrada analógica del Arduino. Así que conectamos la salida del teclado al pin A0 del microcontrolador. El teclado puede ser alimentado por la salida de 5V del Arduino.

Código

Para gestionar el teclado numérico, el principio es leer el valor de la entrada analógica que corresponde a un botón. Para ello compararemos el valor del pin analógico con el valor dado a cada botón.

Es importante tener en cuenta que si pulsamos dos botones, sólo se retendrá el botón con el valor más alto.

//Constants
#define nbABtn 16

//Parameters
const int abtnPin = A0;
const int valThresh[nbABtn] = {1000, 900, 820, 750, 660, 620, 585, 540, 500, 475, 455, 425, 370, 300, 260, 200};

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
}

void loop() {
  readAbtn();
}

void readAbtn() { /* function readAbtn */
  //// Read button states from keypad
  int btnId = getABtn();
  if (btnId) {
    Serial.print("Button pressed : "); Serial.println(btnId);
    delay(200);
  }
}

int getABtn() { /* function getABtn */
  //// Read button states from keypad
  int val = analogRead(abtnPin);
  if (val <= 200) {
    return 0;
  } else {
    for (int i = 0; i < 16; i++) {
      if (val > valThresh[i]) return i + 1;
    }
  }
}

Resultado

Cuando se pulsa una tecla del teclado, observamos que el valor asociado se muestra correctamente en el monitor serie.

Aplicaciones

Fuentes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Salir de la versión móvil