Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
____________________________
49BB.- Teclado 4x4, bus I2C. Pantalla LCD.
- Tenemos un teclado 4x4, al pulsar sobre las teclas se escribirán en una pantalla LCD.
- Si pulsamos el carácter '#', se borrará la pantalla.
- También se puede ver en el Monitor Serie.
- En el tutorial: 31.- Pantalla LCD. Bus I2C, vimos cómo utilizar una pantalla LCD con módulo I2C.
- En el tutorial: 49.- Teclado táctil matrix 4x4, vimos cómo utilizar un teclado 4x4.-
-
En el tutorial: 49B.- Teclado táctil adaptado a I2C. Adaptador de 8 conexiones a Bus I2C con PCF8574, vimos cómo utilizar un teclado 4x4 con módulo I2C.
- En este ejemplo vamos a utilizar un teclado 4x4 con módulo I2C, pero si no tienes este módulo, puedes conectar el teclado directamente como vimos en el tutorial 49B.
______________________________________________________
- Conexionado.
______________________________________________________
- Código para el Arduino.
- Fíjate que he puesto la dirección I2C de mi módulo para la pantalla LCD: 0x27
- Fíjate que he puesto la dirección I2C de mi tarjeta para el teclado: 0x38
- El código utiliza dos librerías de teclado la Keypad_I2C y la Keypad
- Las dos las puedes bajar de este enlace: Keypad-KeypadI2C.zip
- Además también están las librerías Wire y LiquidCrystal que puedes encontrar en el tutorial de 31.- Pantalla LCD.
- Esas librerías las debes copiar en la carpetar libraries de donde tengas instalado el IDE del Arduino.
- Una vez que carges el código en el Arduino, abre el Serial Monitor y pulsa teclas.
jTeclado_LCD.ino |
// Juan A. Villalpando.
// Abril 2018. KIO4.COM
#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
const byte ROWS = 4;
const byte COLS = 4;
String todo = "";
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {0,1,2,3};
byte colPins[COLS] = {4,5,6,7};
int i2caddress = 0x38; // Direccion I2C teclado.
Keypad_I2C kpd = Keypad_I2C( makeKeymap(keys), rowPins, colPins, ROWS, COLS, i2caddress );
void setup(){
Serial.begin(9600);
kpd.begin();
lcd.begin(16,2);// Columnas y filas de LCD
}
void loop(){
char key = kpd.getKey();
if (key){
if (key == '#'){ // Compara char con String.
todo = "";
key = ' '; // Observa el espacio y comilla simple.
}
Serial.println(todo);
todo = todo + key;
lcd.clear(); // Borra pantalla.
lcd.setCursor(0,0); // Posicion inicial del cursor.
lcd.print(todo);
delay (50);
}
}
|
______________________________________________________
- Comentarios.
- Al pulsar una tecla, se obtendrá el carácter key (char key)
- Se irán acumulando las teclas key pulsadas en el String todo.
- Si se pulsa el caracter '#', se borrará la pantalla.
- Fíjate que con los char se utiliza comilla simple y con el String comilla doble:
if (key == '#'){ // Compara char con String.
todo = "";
key = ' '; // Observa el espacio y comilla simple.
}
______________________________________________________
______________________________________________________
______________________________________________________
______________________________________________________
2.- Cuando escribimos cualquier número y luego #, se enciende y apaga el LED13.
- Vamos a modificar el código anterior. Ponemos un LED en el terminal 13, o bien puedes ver el proceso con el LED13 de la placa de Arduino.
- Cuando escribimos un número y pulsamos '#', se encenderá 2 segundos y luego se apagará el LED13.
- Observa que el encendido/apagado del LED13 se realiza en una función aparte llamada led13()
jTeclado_LCD_led13.ino |
// Juan A. Villalpando.
// Abril 2018. KIO4.COM
#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define LED13 13
const byte ROWS = 4;
const byte COLS = 4;
String todo = "";
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {0,1,2,3};
byte colPins[COLS] = {4,5,6,7};
int i2caddress = 0x38; // Direccion I2C teclado.
Keypad_I2C kpd = Keypad_I2C( makeKeymap(keys), rowPins, colPins, ROWS, COLS, i2caddress );
void setup(){
Serial.begin(9600);
kpd.begin();
lcd.begin(16,2);// Columnas y filas de LCD
pinMode(LED13, OUTPUT);
}
void loop(){
char key = kpd.getKey();
if (key){
if (key == '#'){ // Compara char con String.
todo = "";
key = ' '; // Observa el espacio y comilla simple.
led13(); // Enciende y apaga LED13
}
Serial.println(todo);
todo = todo + key;
lcd.clear(); // Borra pantalla.
lcd.setCursor(0,0); // Posicion inicial del cursor.
lcd.print(todo);
delay (50);
}
}
// Funcion que enciende y apaga el LED13
void led13() {
digitalWrite(LED13, HIGH);
delay(2000);
digitalWrite(LED13, LOW);
}
|
______________________________________________________
______________________________________________________
______________________________________________________
______________________________________________________
3.- Cuando escribimos la clave 4567 y luego #, se enciende y apaga el LED13.
- Cuando la variable todo es "4567#", se enciende el LED13 durante 2 segundos.
jTeclado_LCD_led13_clave.ino |
// Juan A. Villalpando.
// Abril 2018. KIO4.COM
#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define LED13 13
const byte ROWS = 4;
const byte COLS = 4;
String todo = "";
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {0,1,2,3};
byte colPins[COLS] = {4,5,6,7};
int i2caddress = 0x38; // Direccion I2C teclado.
Keypad_I2C kpd = Keypad_I2C( makeKeymap(keys), rowPins, colPins, ROWS, COLS, i2caddress );
void setup(){
Serial.begin(9600);
kpd.begin();
lcd.begin(16,2);// Columnas y filas de LCD
pinMode(LED13, OUTPUT);
}
void loop(){
char key = kpd.getKey();
if (key){
Serial.println(todo);
todo = todo + key;
if (key == '#'){ // Compara char con String.
if (todo == "4567#") {
led13(); // Enciende y apaga LED13
}
todo = "";
key = ' '; // Observa el espacio y comilla simple.
}
lcd.clear(); // Borra pantalla.
lcd.setCursor(0,0); // Posicion inicial del cursor.
lcd.print(todo);
delay (50);
}
}
// Funcion que enciende y apaga el LED13
void led13() {
digitalWrite(LED13, HIGH);
delay(2000);
digitalWrite(LED13, LOW);
}
|
________________________________
|