Problema con LCD keypad shield y arduino mega 2560

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....

El LCD keypad shield es este:

Espero que me podais ayudar

Un saludo y muchas gracias

Hola Antonio.

Recientemente yo también adquirí la misma shield, la compré en dealextreme y también me doy algún que otro. dolor de cabeza...

Mira mi blog por si puede ayudarte... itmanageratschool.blogspot.com

un saludo y suerte.

No me digas más.... la mía tambien es de dealextreme... jaja

Por qué potenciometro tendria que cambiarlo?? hay distintos modelos??

Se podria prescindir de dicho potenciometro??

Un saludo y muchisimas gracias

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".

Un saludo!

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.

Gracias a todos por la ayuda prestada.

Un saludo

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.

Tengo arduino MEGA 2560.

Gracias por adelantado

Un Saludo

DPG

Danipa96 recién arrancas y como muchos respondes a un post sin ver cuando fue la ultima vez que alguien dejó una respuesta.
Jun 13, 2012, 11:00 pm

Lee las normas, crea un nuevo hilo y recibirás ayuda.

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

Saludos espero que les sirva

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);
}