fbpixel
Etiquetas:
5
(3)

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

  • Ordenador
  • Arduino UNO
  • Cable USB A Macho/B Macho
  • Teclado analógico4x4
  • cable Dupont F/M x3

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

  • Crear una interfaz con varios botones
  • Creación de una cerradura con teclado
  • Desarrollar una alarma que se pueda activar o desactivar con una contraseña
  • Desarrollo de una interfaz MIDI

Fuentes

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

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 5 / 5. Recuento de votos: 3

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?