Download LCD Shield DFrobot HD44780U

Document related concepts
no text concepts found
Transcript
LCD Shield DFrobot HD44780U
http://saber.patagoniatec.com/lcd-shieldarduino-argentina-ptec-dfrobot/
He usado como referencia esta página.
HD44780U es el chip controlador en el que esta basado el shield. Algo importante para
remarcar, es que los botones no están conectados a pines digitales. En cambio los pines
están conectados mediante resistencias en serie a un pin analógico A0. Notar que el shield,
no nos da acceso al pin A0 si quisiéramos soldarle pines macho. Realmente no es difícil de
hacerlo funcionar, simplemente hay que leer el puerto A0. Ahora bien, que valores de
tensión tiene cada boton? Esto se resuelve de dos formas. La primera y autónoma es
simplemente darle tensión al modulo, apretar cada botón y medir la tensión. La segunda y
mas ingenieril es ir a ver la hoja de datos o pagina del fabricante. Existen dos versiones de
este shield, por favor mirar en la placa la version correcta, solo cambia el array de
resistencias.
Este lcd es muy practico ya que la única
conexion que necesita es la del arduino a la
pc. Utiliza los pines arriba mostrados y viene
con una botonera analogica incluida. Se
puede utilizar con la libreria que ya esta
incluida en el programa compilador como el
programa de mas abajo, o se puede
descargar otra.
1
Los Pines resaltados no se pueden usar, si se
programa el Shield con los botones.
Pero si no usamos los botones, podemos usar el PIN
A0. Sería para el caso de que solo usemos el Shield
para ver valores sin usar la salida Serial de la PC.
Sería el caso de experimentar alimentando con
batería en lugar del cable USB
Por el lado digital, nos da acceso a los pines 0 1 2 3
11 12 y 13 (De color grisado).
Programa para usar LCD y botonera
Es genérico y bajado de Internet.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);// select the pins used on the LCD panel
// define some values used by the panel and buttons
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
int read_LCD_buttons(){
adc_key_in = analogRead(0);
// read the buttons
// read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
// We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in > 1000) return btnNONE;
// 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 < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
// For V1.0 comment the other threshold and use the one below:
2
/*
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
*/
return btnNONE;
// when all others fail, return this.
}
void setup(){
lcd.begin(16, 2);
// start the library
lcd.setCursor(0,0);
// set the LCD cursor position
lcd.print("Push the buttons"); // print a simple message on the LCD
}
void loop(){
lcd.setCursor(9,1);
// move cursor to second line "1" and 9 spaces over
lcd.print(millis()/1000);
// display seconds elapsed since power-up
lcd.setCursor(0,1);
// move to the begining of the second line
lcd_key = read_LCD_buttons(); // read the buttons
switch (lcd_key){
// depending on which button was pushed, we perform an action
case btnRIGHT:{
// push button "RIGHT" and show the word on the screen
lcd.print("RIGHT ");
break;
}
case btnLEFT:{
lcd.print("LEFT "); // push button "LEFT" and show the word on the screen
break;
}
case btnUP:{
lcd.print("UP
"); // push button "UP" and show the word on the screen
break;
}
case btnDOWN:{
lcd.print("DOWN "); // push button "DOWN" and show the word on the screen
break;
}
case btnSELECT:{
lcd.print("SELECT"); // push button "SELECT" and show the word on the screen
break;
}
case btnNONE:{
lcd.print("NONE "); // No action will show "None" on the screen
break;
}
3
}
}
Programa para usar LCD sin botonera
Este programa está hecho para probar si funcionan las salidas 11, 12 y 13, necesarias para
establecer conexión mediante Radiofrecuencia de 2.4 mHz, entre dos Arduinos. Se pueden
poner LEDs con resistencia de 330 o medir con un tester las tensiones.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// selecciona PINes para LCD
int p11 = 11;
int p12 = 12;
int p13 = 13;
void setup()
{
lcd.begin(16, 2);
// Arrancar la Libreria
pinMode(p11, OUTPUT);
pinMode(p12, OUTPUT);
pinMode(p13, OUTPUT);
}
void loop(){
lcd.setCursor(0,1);
lcd.print("Linea 1");
// Cursor en posicion 0 linea 1
// Imprimir
digitalWrite(p11, LOW);
digitalWrite(p12, LOW);
digitalWrite(p13, LOW);
lcd.setCursor(0,0);lcd.print(digitalRead(p11));
// Imprimir
delay(1000);
digitalWrite(p11, 1);
digitalWrite(p12, 1);
digitalWrite(p13, 1);
lcd.setCursor(0,0); lcd.print(digitalRead(p11));
// Imprimir
delay(1000);
} //FIN del void loop()
4