¿Qué pasa con mi programa de 16x2 LCD y la soldadura?

0

Soy un noob total en Arduino aquí, y este es mi primer proyecto en 16x2 LCD, teclado 4x4 y otros. Entonces, la historia es que, después de que cargué el programa del reloj despertador Arduino de mi grupo en la placa Arduino, la pantalla LCD muestra cajas negras en la primera fila de la pantalla LCD. Además, cuando desconecté la placa de mi computadora y la conecté a un adaptador de 5V, la pantalla LCD no mostraba nada.

Ya busqué en Internet las posibles causas, y principalmente dijeron que la inicialización de la pantalla LCD es incorrecta o que hay problemas en la soldadura. Mi amigo y yo llegamos a la conclusión de que no hay problema con la soldadura, pero no sabemos dónde está el problema en el programa.

El problema es que no teníamos ninguna conexión para la luz de fondo de la pantalla LCD ya que no tenemos potenciómetro. Intenté controlar el contraste y el brillo de la pantalla LCD utilizando Arduino, pero no puedo entender nada porque soy un noob total.

Esta es la imagen de la soldadura de la pantalla LCD.

AcontinuaciónsemuestraelúltimocódigoquecargamosenlaplacaArduino.¿Hayalgúnfalloenelprograma?

#include<EEPROM.h>#include<Keypad.h>#include<DS1307.h>#include<Wire.h>#include<Adafruit_GFX.h>#include<LiquidCrystal.h>DS1307rtc(SDA,SCL);LiquidCrystallcd(A3,A2,A1,A0,5,4);Timet;#definebuz3intHor,Min,Sec,h,m,s;intASCII=48;char*tim;char*dat;constcharkey=0;charbuffer[2];constbytenumRows=4;constbytenumCols=4;charkeymap[numRows][numCols]={{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};byterowPins[numRows]={12,11,10,9};bytecolPins[numCols]={8,7,6,5};KeypadmyKeypad=Keypad(makeKeymap(keymap),rowPins,colPins,numRows,numCols);voidsetup(){Wire.begin();rtc.begin();pinMode(buz,OUTPUT);lcd.begin(16,2);welcome();rtc.setDOW(SATURDAY);//SetDay-of-WeektoSUNDAYrtc.setTime(10,54,0);//Setthetimeto12:00:00(24hrformat)rtc.setDate(7,1,2017);//Day,Month,Year}voidloop(){t=rtc.getTime();Hor=t.hour;Min=t.min;Sec=t.sec;tim=rtc.getTimeStr();dat=rtc.getDateStr();charkey=myKeypad.getKey();if(key=='C'){digitalWrite(buz,LOW);EEPROM.write(2,ASCII+6);EEPROM.write(3,ASCII);}if(key=='#'){lcd.setCursor(0,0);lcd.print("Enter New Time");
    lcd.setCursor(0,1);
    int j =0;
    int i=0;
    while( j<6)
    {
    if(i==2 || i == 5){
    lcd.print(":");
    lcd.display();
    i++;
    }
    key=myKeypad.getKey();
    if(key)
    {
    lcd.print(key);
    lcd.display();
    EEPROM.write(j,key);
    j++;
    i++;
    }
    }
    }

    changealarm();
    checkalarm();
    timedate();
    }

    void checkalarm(){
    if( Hor == h && Min == m)
    {
    delay(3000);
    lcd.setCursor(0,1);
    lcd.print("Hold C");
    digitalWrite(buz, HIGH);
    delay(3000);
    }
    }

    void changealarm(){
    buffer[0]=EEPROM.read(0);
    buffer[1]=EEPROM.read(1);
    h = atoi(buffer);
    buffer[0]=EEPROM.read(2);
    buffer[1]=EEPROM.read(3);
    m = atoi(buffer);
    buffer[0]=EEPROM.read(4);
    buffer[1]=EEPROM.read(5);
    s = atoi(buffer);
    }

    void timedate(){
    lcd.setCursor(0,0);
    lcd.print("Time: ");
    lcd.print(rtc.getTimeStr());

    lcd.setCursor(0,1);
    lcd.print("Date: ");
    lcd.print(rtc.getDateStr());
    delay(3000);
    lcd.setCursor(0,1);
    lcd.print("Alarm: ");
    lcd.print(h);
    lcd.print(".");
    lcd.print(m);
    lcd.print(".");
    lcd.print(s);
    delay(3000);
    }

    void welcome(){
    lcd.setCursor(0,0);
    lcd.print("Welcome");

    lcd.setCursor(0,1);
    lcd.print("To");
    delay(3000);

    lcd.setCursor(0,1);
    lcd.print("TIMeProject");
    delay(3000);
    }
    

2 respuestas

0

La pantalla LCD no se está inicializando correctamente. Es probable que sea un error de firmware o de cableado.

Compruebe que el pin RW está conectado a tierra. Conecte su bote ELEMENT un lado a GND (Vss en la pantalla LCD) y uno a + 5V (Vdd en la pantalla LCD) a través de una resistencia de 1K.

El pot WIPER va a Vo en la pantalla LCD.

La resistencia de 1K no es 100% necesaria, pero protege el bote si comete un error.

simular este circuito : esquema creado usando CircuitLab

Si eso no funciona, verifique los números de pin en el Arduino y cómo se corresponden con los respectivos números de pin de LCD con mucho cuidado. RW debe ir a tierra y no al Arduino.

Los pines A y K son para la luz de fondo, que puede o no estar presente. Deja eso por ahora.

    
respondido por el Spehro Pefhany
1

En general, ver los cuadros como esos en estos LCD de caracteres a menudo es un problema de contraste. Como se señaló en los comentarios, AnalogWrite genera un tren de pulsos PWM que no controlará correctamente el contraste. Si no puede obtener un potenciómetro, intente usar dos resistencias fijas como divisor de voltaje para intentar acercarse a un nivel de contraste utilizable. Comenzaría con dos resistencias iguales para dar 2.5 voltios al pin de contraste.

    
respondido por el DoxyLover

Lea otras preguntas en las etiquetas