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