martes, 27 de agosto de 2013

LCD Keypad Shield


Existe en el mercado la placa LCD Keypad Shield.

Es bastante cómoda de programar con pocas lineas tenemos
  • LCD 16x2
  • 7 pulsadores. Uno de ellos Reset.
Utiliza las lineas:
  • D4, D5, D6, D7, D8, D9
  • RST
  • VCC y GND.
Problemas.
De las dos placas que he probado,
  • Una de ella tenia mal el potenciómetro de contraste.
  • A las dos le faltabas la resistencia R1 de 1K y el led PWR.
  • Las resistencias para los pulsadores no son de muy buena calidad y he tenido que medir la tensión que entregaban para poder determinar el valor que debía de medir el conversor.
En código siguiente muestra el tiempo que lleva funcionando el arduino y la tecla que pulsamos.

#include <LiquidCrystal.h>
#include <Wire.h>
/*******************************************************

Este programa se utiliza para controlar el LCD Shield

********************************************************/

// seleccionar los pines usados por el lcd
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define los valores utilizados por el panel y los botones.
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// leer los botones
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // leer el valor leido en el puerto A0

 if (adc_key_in > 1000) return btnNONE; //valor cuando no esta pulsado ningun boton
 // For V1.1 us this threshold
 if (adc_key_in < 50)   return btnRIGHT;
 if (adc_key_in < 250)  return btnUP;
 if (adc_key_in < 450)  return btnDOWN;
 if (adc_key_in < 600)  return btnLEFT;
 if (adc_key_in < 850)  return btnSELECT;




 return btnNONE;  // cuando falla, ira a ninguno.
}

void setup()
{
  Serial.begin(9600);
 lcd.begin(16, 2);              // Definir el lcd
 lcd.setCursor(0,0);
 lcd.print("Pulsa un boton");
}
 
void loop()
{
 lcd.setCursor(9,1);            // posiciona el cursor para indicar el tiempo
 lcd.print(millis()/1000);      // Muestra los segundos desde el comienzo


 lcd.setCursor(0,1);            // posiciona el cursor en la segunda linea.
 lcd_key = read_LCD_buttons();  // lee los botones

 switch (lcd_key)               // dependiendo del boton pulsado hara una accion
 {
   case btnRIGHT:
     {
     lcd.print("RIGHT ");
     Serial.println("RIGHT");
     delay(300);
     break;
     }
   case btnLEFT:
     {
     lcd.print("LEFT   ");
     Serial.println("LEFT   ");
     delay(300);
     break;
     }
   case btnUP:
     {
     lcd.print("UP    ");
     Serial.println("UP    ");
     delay(300);
     break;
     }
   case btnDOWN:
     {
     lcd.print("DOWN  ");
     Serial.println("DOWN  ");
     delay(300);
     break;
     }
   case btnSELECT:
     {
     lcd.print("SELECT");
     Serial.println("SELECT");
     delay(300);
     break;
     }
     case btnNONE:
     {
     lcd.print("NONE  ");
    delay(300);
     break;
     }
 }
}

No hay comentarios:

Publicar un comentario