Problemas con LCD 16x2

Hola gente!. Tengo un problema con una funcion. Al probarla en Proteus, anda perfecto. El problema es cuando la uso en Arduino Uno.
El problema es que en esta funciones que dejo:

// Se incluyen las librerias a utilizar
#include <LiquidCrystal.h>

//inicializa la libreria con los numeros de los pines conectados
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  lcd.begin(16, 2);
}

void loop(){
     mensajeBienvenida();
}


//muestra un mensaje en la linea superior
//m = cadena a mostrar<16
//x = posicion con respecto al eje x
//y= posicion con respecto al eje y
//d= DELAY, tiempo de espera
//l= 1 para limpiar la pantalla completa y 0 para dejar
void mostrarMensaje(String m,int x, int y, int d, int l){
  if(l==1)
    lcd.clear();
  lcd.setCursor(x,y);
  lcd.print(m);
  if(d>0)
    delay(d);
}


//Muestra un mensaje de Bienvenida
void mensajeBienvenida(){
  int d=5000;
  mostrarMensaje("Hola",centro("Hola"),0,d,1);

//A PARTIR DE ACA NO MUESTRA MAS NADA (SE APAGA EL LCD)

  mostrarMensaje("Mensaje",centro("Mensaje"),1,d,0);
  limpiarPantalla(1,0,15);
  mostrarMensaje("Algo",centro("Algo"),1,d,0);
  limpiarPantalla(1,0,15);
  mostrarMensaje("Algo",centro("Algo"),1,d,0);

//SE PRENDE Y MUESTRA EL MSJ

  mostrarMensaje("Presentan",centro("Presentan"),0,d,1);

//A PARTIR DE ACA NO MUESTRA MAS NADA (SE APAGA EL LCD)

  mostrarMensaje("No se ve",centro("No se ve"),1,d,0);



}

//Devuelve el valor  posicion, para ubicar la palabra en el centro
int centro(char *m){
  int inic=strlen(m);
  inic=(16-inic)/2;
  return inic;
}

//Limpia los (x,1) de la pantalla
void limpiarPantalla(int y, int inic,int fin){
  lcd.setCursor(inic,y);
  for(int i=inic;i<=fin;i++)
    lcd.print(" ");

}

EL conexionado del lcd usado es:
The circuit:

  • LCD RS pin to digital pin 12
  • LCD Enable pin to digital pin 11
  • LCD D4 pin to digital pin 5
  • LCD D5 pin to digital pin 4
  • LCD D6 pin to digital pin 3
  • LCD D7 pin to digital pin 2
  • LCD R/W pin to ground
  • LCD VSS pin to ground
  • LCD VCC pin to 5V
  • 10K resistor:
  • ends to +5V and ground
  • wiper to LCD VO pin (pin 3)

Desde ya, gracias. Espero poder solucionar este problema. Lo raro es que probado en Proteus, funciona perfecto.

mensaje de bienvenida tiene un delay de 250?

void mensajeBienvenida(){
  int d=250;

y tu esperas ver algo con 250 mseg, apenas lo muestra lo borra.
Sube a 5000.

Las cosas en los simuladores demoran y por eso se ven aparentemente bien pero no es tiempo real.

surbyte:
mensaje de bienvenida tiene un delay de 250?

void mensajeBienvenida(){

int d=250;




y tu esperas ver algo con 250 mseg, apenas lo muestra lo borra.
Sube a 5000.

Las cosas en los simuladores demoran y por eso se ven aparentemente bien pero no es tiempo real.

Sisi, lo habia bajado a 250 porque lo probaba en el proteus y funciona medio lento.. A la arduino lo subi con d=5000..

Gracias surbyte por responder.. Si en proteus funciona, tendria que funcionar en arduino de la misma forma?. Pregunto esto porque de ser asi, tengo algun problema con mi conexion.. Por lo menos en este caso..

Muy simple, si tienes duda de TU PROGRAMA, usa un ejemplo de la librería LiquidCrystal

surbyte:
Muy simple, si tienes duda de TU PROGRAMA, usa un ejemplo de la librería LiquidCrystal

Esta bien es un buen consejo, voy a probar de esa forma.. Gracias!

PD: Se la diferencia entre "FUNCION" y PROGRAMA.. Edite mi primer mensaje porque solo subia las funcion en la que tenia problema pero para que este mejor presentada la duda, le agregue el setup y el loop.. Saludos!