Hoy nos toca el teclado, y su utilizacion, es para un arduino Mega, habria que cambiar los pines para el UNO.
El teclado es un componente vital para poder trabajar con el arduino y sobre todo para la simulacion del alba-ocaso, asi como para configurar los canales y sus horarios.
El teclado que tengo montado esta basado en , 2 botones para arriba-abajo, 2 botones para aumentar-disminuir los valores, 1 para el OK-menu y 1 para salir de los 2-3 menús. Este codigo es para una pantala LCD128x64.
Lo que el codigo hace es poner HIGH (5v) el pin que este conectado el botón pulsado y lo usaremos para saber si esta activo un pulsador, que es la función digitalRead(PIN).
Empecemos definiendo los pines de nuestro teclado.
#define PIN_D_KEY_OK 39
#define PIN_D_KEY_DER 41
#define PIN_D_KEY_SALIR 43
#define PIN_D_KEY_IZQ 45
#define PIN_D_KEY_MAS 47
#define PIN_D_KEY_MENOS 49
En el void setup() definámoslo como pines de entrada.
pinMode( PIN_D_KEY_OK, INPUT );
pinMode( PIN_D_KEY_DER, INPUT );
pinMode( PIN_D_KEY_SALIR, INPUT );
pinMode( PIN_D_KEY_IZQ, INPUT );
pinMode( PIN_D_KEY_MAS, INPUT );
pinMode( PIN_D_KEY_MENOS, INPUT );
Tenemos que crear un menú con varias opciones de configuración, primero crearemos una función que muestre este menu.
void PrintPantConfig()
{
Lcd.Cls();
Lcd.Rectangulo(0, 0, 127, 63);
Lcd.WriteXY("CONFIGURACION", 25, 61);
Lcd.Linea( 0, 53, 127, 53, 1 );
Lcd.WriteXY("FECHA Y HORA", 14, 49); // Ancho, Alto, Modo
Lcd.WriteXY("HORARIO DE LUCES", 14, 19);
}
Y ahora la función que controlara el teclado, si pulsamos el botón OK, escribira en la pantalla el menú con varias opciones y nos moveremos por el, al pulsar Salir, saldremos de este menú y volveremos a la pantalla principal.
void Teclado()
{
int Index;
boolean Salir = false;
if (digitalRead(PIN_D_KEY_OK)) //Si pulsado el botón OK entramos.
{
PrintPantConfig(); // Escribe la pantalla del menú
Index = 1;
Lcd.WriteXY( ">", 4, 59-(10*Index)); // Marca la posición del menú donde estamosestamos
delay(1000); // espera para pulsar algun boton.
while((!digitalRead(PIN_D_KEY_SALIR)) && (!Salir))
{
if (digitalRead(PIN_D_KEY_DER)) // Nos movemos para abajo
{
Lcd.WriteXY( " ", 4, 59-(10*Index));
if (Index == 5) Index = 1; else ++Index;
Lcd.WriteXY( ">", 4, 59-(10*Index));
delay(500);
}
if (digitalRead(PIN_D_KEY_IZQ)) //Nos movemos para arriba.
{
Lcd.WriteXY( " ", 4, 59-(10*Index));
if (Index == 1) Index = 5; else --Index;
Lcd.WriteXY( ">", 4, 59-(10*Index));
delay(500);
}
if (digitalRead(PIN_D_KEY_OK)) //Ejecutamos la opción del menu seleccionada.
{
switch (Index)
{
case 1:
//PrintConfReloj(); //Función para configurar el reloj
PrintPantConfig();
Lcd.WriteXY( ">", 4, 59-(10*Index));
break;
case 2:
//PrintConfLuces(); //Función para configurar las luces
PrintPantConfig();
Lcd.WriteXY( ">", 4, 59-(10*Index));
break;
}
}
}
PrintPantMain();
}
}
en void loop() pondremos una reseña a la función teclado() para que compruebe que esta activo.
void loop()
{
Lcd.WriteXY( Reloj.DateTime(), 10, 61);
Teclado();
}
**************************
Proximo dia la configuracion del teclado para las luces y el reloj...............