Buenas, me acabo de comprar el LCD keypad Shield para el arduino mega 2560 y no consigo que funcione...
Le he cargado el siguiente programa:
//example use of LCD4Bit_mod library
#include <LCD4Bit_mod.h>
//create object to control an LCD.
//number of lines in display=1
LCD4Bit_mod lcd = LCD4Bit_mod(2);
//Key message
char msgs[5][15] = {"Right Key OK ",
"Up Key OK ",
"Down Key OK ",
"Left Key OK ",
"Select Key OK" };
int adc_key_val[5] ={30, 150, 360, 535, 760 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup() {
pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat
lcd.init();
//optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init()
//lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!)
lcd.clear();
lcd.printIn("KEYPAD testing... pressing");
}
void loop() {
adc_key_in = analogRead(0); // read the value from the sensor
digitalWrite(13, HIGH);
key = get_key(adc_key_in); // convert into key press
if (key != oldkey) // if keypress is detected
{
delay(50); // wait for debounce time
adc_key_in = analogRead(0); // read the value from the sensor
key = get_key(adc_key_in); // convert into key press
if (key != oldkey)
{
oldkey = key;
if (key >=0){
lcd.cursorTo(2, 0); //line=2, x=0
lcd.printIn(msgs[key]);
}
}
}
//delay(1000);
digitalWrite(13, LOW);
}
// Convert ADC value to key number
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)
k = -1; // No valid key pressed
return k;
}
Cuando lo enciendo, se enciende el LCD pero no muestra nada, cuando pulso los botones del keypad, el led numero 13 del arduino parpadea, por lo que eso si lo hace bien....
Antonio, un potenciómetro no es más que una resistencia variable por lo que puedes ponerle cualquier otro el mio lo saque del kit de iniciación a arduino que compre tiempo atrás... de todas formas, para confirmar que el problema es el potenciómetro puedes puentear las conexiones con una resistencia o incluso directamente con un cable...
así al menos verás que lo que falla es el shield y no el programa...
lo que hace el potenciómetro es variar el contraste por lo que si no pasa corriente el contraste se queda al mínimo y por tanto no se verá
Comentaron por le foro que esta shield tiene un importante fallo, si os fijáis la alimentación del LED del LCD no esta limitado por ninguna resistencia.
Estos chinos se copian unos de otros y la mayoría de estas shields tiene ese "bug".
Ya está solucionado, era el potenciometro, estaba defectuoso, hice el puente entre dos pines del potenciometro y aparecia el hola mundo, lo he cambiado por otro y ya funciona perfectamente.
pues o tengo un problema diferrente he seguido las recomendaciones que diste de tu pagina web
pero no me han servido de nada ya que me salen caracteres raros y cosas raras, lo ultimo que salio, fue "odmfn bloh" mu raro, y si pulso el boton reset a menudo me salen caracteres raros, he probado el ejemplo este del arduino que trae y nada, sigue haciendo cosas raras.
queria saber cual es el problema porque las coexiones no tiene ninguna, ya que va encima del arduino.
Buenas tardes estimados, a mi me sucedió el mismo problema que no se veía el "Hola mundo" o las letras en la pantalla del LCD Keypad Shield. Lo primero que hice fue cargar el ejemplo del Sketch.
Editando primero los pines LiquidCrystal lcd(12, 11, 5, 4, 3, 2); (que vienen por defecto en el ejemplo Hello, world) a LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
hasta ahí el problema no se me solucionaba, ya que el problema es el potenciometro , en mi caso no fue necesario cambiarlo
con un destornillador de paleta empece a girar el tornillo que esta en el potenciometro azul, en el sentido que giran las manecillas del reloj, hasta que empezaron de apoco aparecer las letras del HOLA MUNDO en la pantalla
NO tuve que cambiar el potenciometro, solo tuve que girar el tornillo hasta que aparecieron las letras
Hola a todos, se que es algo antiguo el post pero como he recibido un shield de la misma marca aunque de distinto origen, al probar he visto que lso valores de UP y Down no coinciden, varían algo a lo cual aporto aquí el diagrama para quien quiera probar.
en micaso no ah hecho falta cambiar nada sobre el potenciometro. ha sido conectar, y funcionar a la primera.
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
const int analogInPin = A0;
int sensorValue = 0;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print(" HOLA TERRICOLA");
lcd.setCursor(0, 2);
lcd.print("Pulsa un boton");
}
void loop() {
sensorValue = analogRead(analogInPin);
Serial.println(sensorValue);
delay(100);
if (sensorValue <1000 || sensorValue>1100) {
limpiarLinea();
lcd.print(opcion(sensorValue));
}
}
String opcion(int sensor){
if(sensor > 400 && sensor<500){
return("Izquierda");
}
if(sensor > 600 && sensor<750){
return("Seleccion");
}
if(sensor > 250 && sensor<350){ //valor modificado al diagrama anterior
return("Abajo");
}
if(sensor > 90 && sensor<150){ //valor modificado al diagrama anterior
return("Arriba");
}
if(sensor < 10){
return("Derecha");
}
}
void limpiarLinea(){
lcd.setCursor(0, 2);
for (int i = 0; i < 16; i = i + 1) {
lcd.print(" ");
}
lcd.setCursor(0, 2);
}