Descripción
Este teclado matricial de 16 teclas (4×4) está pensado para interfaces usuario-máquina sencillas, por ejemplo una aplicación de contraseña con pocos dígitos. Las teclas de este pulsador son los típicos pulsadores «pushbutton«, lo que le da un aire DIY muy atractivo. Además, es fácil imprimir en 3D un frontal personalizado para el teclado.
El uso del teclado es muy sencillo: conecta la masa, activa los pull-ups de las entradas de Arduino y haz que tu código compruebe de manera continua el estado de las otras conexiones (o usa una interrupción). Cuando una de esas entradas marque un ‘0’, se detectará la pulsación de esa tecla. En este teclado es posible también detectar varias pulsaciones simultáneas.
- Tipo: matricial.
- Conector: paso 2.54mm sobre PCB.
Código de ejemplo:
/* EJEMPLO Teclado 4x4 * Código proporcionado bajo licencia CC-BY * Puedes distribuir, mezclar, adapatar y hacer tuyo este código. * Sólo te pedimos que hagas referencia a nosotros como fuente original de la información. * * Si tienes dudas sobre el uso de este ejemplo no dudes en contactarnos, estamos para echarte una mano. * ---------------------------------- * www.electronperdido.com * contacto@electronperdido.com * ---------------------------------- */ // Indicamos en qué pines hemos conectado las "filas" y "columnas" del teclado // Esta manera de introducir valores se llama "vector" const byte filas[4] = { 11, 10, 9, 8 }; const byte columnas[4] = { 5, 4, 3, 2 }; // Creamos una "matriz" que es un mapa de nuestras teclas char teclas[4][4] = { { '1','2','3', 'A' }, { '4','5','6', 'B' }, { '7','8','9', 'C' }, { '*','0','#', 'D' } }; // El código dentro de SETUP se ejecuta una única vez, al inicio del programa void setup (){ Serial.begin(9600); // Inicializa el puerto serie a 9600bps (para comunicar con el PC) // Para que el tecldo funcione correctamente es necesario configurar las entradas como "alta impedancia" // Lo hacemos con un bucle "for" para inicializar todas las entradas de manera compacta for (byte i = 0; i < 4; i++) { pinMode(columnas[i], INPUT); digitalWrite(columnas[i], HIGH); } // Las filas deben configurarse como entrada con "pull-up", en este caso activamos el pull-up interno for (byte i = 0; i < 4; i++) { pinMode(filas[i], INPUT_PULLUP); } } // El código dentro de LOOP se ejecuta de manera repetida hasta el fin de los tiempos... void loop () { int pulsada = 0, fila, columna; //Variables de pulsación detectada for (byte i = 0; i < 4; i++) //Barrido de columnas { // Poner columna a '0' (configurándola momentáneamente como salida) pinMode(columnas[i],OUTPUT); digitalWrite(columnas[i], LOW); // Revisar todas las filas comprobando teclas pulsadas for (byte j = 0; j < 4; j++) { if (digitalRead(filas[j]) == LOW) { // Tecla pulsada en fila 'i' y columna 'j' fila = j; columna = i; pulsada = 1; } } // Volver a alta impedancia digitalWrite(columnas[i], HIGH); pinMode(columnas[i], INPUT); } if (pulsada){ //Muestra por pantalla la tecla pulsada Serial.println(teclas[fila][columna]);//Busca 'fila' y 'columna' en la matriz y lo envía a través del puerto serie pulsada = 0; // Resetea el 'flag' de pulsación detectada delay(400); // Espera, para no mostrar muchas veces la misma tecla pulsada } }
Valoraciones
No hay valoraciones aún.