Lcd Screen not diplaying anything

#include <Wire.h>
#include <LiquidCrystal.h> // library for LCD with I2C
#include <virtuabotixRTC.h>
#include <EEPROM.h>
virtuabotixRTC myRTC(6, 7, 8);
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

const int btnChange = 2;
const int btnOK = 3;
const int btnMode = 4;
const int buzzer = 5;
int backlight;
int alarmHour = 12;
int alarmMinutes = 0;
boolean hourMode = 0;
boolean alarmOn = 1;
int M = 12;
int D = 31;
int Y = 2020;
int day = 7;
int h = 23;
int m = 59;

int addrH[] = {0, 1, 2, 3, 4};
int addrM[] = {5, 6, 7, 8, 9};
int addrActive[] = {10, 11, 12, 13, 14};

int mode = 1;
int submode = 1;
int slot = 0;

byte clockChar[] = {B00000, B01110, B10101, B10101, B10111, B10001, B01110, B00000};
byte alarmChar[] = {B00100, B01110, B01110, B01110, B11111, B00000, B00100, B00000};
byte dateChar[] = {B11111, B00000, B01100, B01010, B01010, B01100, B00000, B11111};

void setup() {

pinMode(btnChange, INPUT_PULLUP);
pinMode(btnOK, INPUT_PULLUP);
pinMode(btnMode, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);

lcd.begin(16, 2); // initialize the LCD
digitalWrite(backlight, HIGH); // Turn on the blacklight
lcd.createChar(0, clockChar);
lcd.createChar(1, alarmChar);
lcd.createChar(2, dateChar);

Serial.begin(9600);

}

/////////////////////////////////////////////////////////////////// void LOOP ///////////////////////////////////////////

void loop() {

if (digitalRead(btnMode) == LOW) {
mode++;
Serial.println("btnMode press");
if (mode == 4) {
mode = 1;
}
submode = 0;
lcd.clear();
delay(200);
}

if (mode == 1) {
clockDisplay();
Serial.println(mode);
// delay(200);
}

if (mode == 2) {
alarmMode();
Serial.println(mode);
// delay(200);
}

if (mode == 3) {
updateRTC();
Serial.println(mode);
// delay(200);
}
if (mode == 0) {
alarm();
Serial.println(mode);
EEPROM.write(addrActive, 0);
// delay(200);
}
for (int x = 0; x < 5; x++) {
if (EEPROM.read(addrActive[x]) == 1) {
Serial.print("alarm slot active: ");
Serial.println(x);
if ( myRTC.hours == EEPROM.read(addrH[x]) && myRTC.minutes == EEPROM.read(addrM[x])) {
EEPROM.write(addrActive[x], 0);
mode = 0;
}
}
}
}

void alarm() {
clockDisplay();
digitalWrite(backlight, LOW);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(backlight, HIGH);
digitalWrite(buzzer, LOW);
delay(200);
}

/////////////////////////////////////////////////////////////////// CLOCK DISPLAY ///////////////////////////////////////////

void clockDisplay() {
myRTC.updateTime();
lcd.clear();
lcd.setCursor(0, 0);
lcd.write((byte)0x00);

lcd.setCursor(0, 1);
switch (myRTC.month) {
case 1: lcd.print("Jan"); break;
case 2: lcd.print("Feb"); break;
case 3: lcd.print("Mar"); break;
case 4: lcd.print("Apr"); break;
case 5: lcd.print("May"); break;
case 6: lcd.print("Jun"); break;
case 7: lcd.print("Jul"); break;
case 8: lcd.print("Aug"); break;
case 9: lcd.print("Sep"); break;
case 10: lcd.print("Oct"); break;
case 11: lcd.print("Nov"); break;
case 12: lcd.print("Dec"); break;
}

if (myRTC.dayofmonth < 10) {
lcd.print(" ");
lcd.print(myRTC.dayofmonth);
}
else{
lcd.print(myRTC.dayofmonth);
}
lcd.print(",");
lcd.print(myRTC.year);

lcd.setCursor(13, 1);
switch (myRTC.dayofweek) {
case 1: lcd.print("Sun"); break;
case 2: lcd.print("Mon"); break;
case 3: lcd.print("Tue"); break;
case 4: lcd.print("Wed"); break;
case 5: lcd.print("Thu"); break;
case 6: lcd.print("Fri"); break;
case 7: lcd.print("Sat"); break;
}
lcd.setCursor(3, 0);
if ((myRTC.hours > 12 && myRTC.hours < 22) || (myRTC.hours > 0 && myRTC.hours < 10)) {
lcd.print("0");
}
if (myRTC.hours == 0) {
lcd.print("12");
}
else if (myRTC.hours <= 12) {
lcd.print(myRTC.hours);
}
else {
lcd.print(myRTC.hours - 12);
}
lcd.print(":");
if (myRTC.minutes < 10) {
lcd.print("0");
}
lcd.print(myRTC.minutes);
lcd.print(":");
if (myRTC.seconds < 10) {
lcd.print("0");
}
lcd.print(myRTC.seconds);
lcd.print(" ");
if (myRTC.hours < 12) {
lcd.print("AM");
}
else {
lcd.print("PM");
}
}

/////////////////////////////////////////////////////////////////// ALARM FUNCTION ///////////////////////////////////////////
void alarmMode() {
if (submode == 0) {
lcd.setCursor(0, 0);
lcd.write(1);
lcd.setCursor(2, 0);
lcd.print("Select:");

if (digitalRead(btnChange) == LOW) {
  slot++;
  if (slot > 4 ) {
    slot = 0;
  }
  delay(200);
}
lcd.setCursor(10, 0);
lcd.print("Slot#");
lcd.print(slot + 1);
lcd.setCursor(0, 1);
if (EEPROM.read(addrH[slot]) > 23) {
  EEPROM.write(addrH[slot], 0);
}
if (EEPROM.read(addrM[slot]) > 59) {
  EEPROM.write(addrM[slot], 0);
}
if (EEPROM.read(addrActive[slot]) > 1) {
  EEPROM.write(addrActive[slot], 0);
}
if ((EEPROM.read(addrH[slot]) > 12 && EEPROM.read(addrH[slot]) < 22) || (EEPROM.read(addrH[slot]) > 0 && EEPROM.read(addrH[slot]) < 10)) {
  lcd.print("0");
}
if (EEPROM.read(addrH[slot]) == 0) {
  lcd.print("12");
  alarmHour = 12;
}
else if (EEPROM.read(addrH[slot]) <= 12) {
  lcd.print(EEPROM.read(addrH[slot]));
  alarmHour = EEPROM.read(addrH[slot]);
}
else {
  lcd.print(EEPROM.read(addrH[slot]) - 12);
  alarmHour = EEPROM.read(addrH[slot]) - 12;
}
lcd.print(":");
if (EEPROM.read(addrM[slot]) < 10) {
  lcd.print("0");
}
lcd.print(EEPROM.read(addrM[slot]));
alarmMinutes = EEPROM.read(addrM[slot]);
lcd.print(" ");
if (EEPROM.read(addrH[slot]) < 12) {
  lcd.print("AM");
  hourMode = 0;
}
else {
  lcd.print("PM");
  hourMode = 1;
}
lcd.print("   ");
if (EEPROM.read(addrActive[slot]) == 1) {
  lcd.print("ON ");
}
else {
  lcd.print("OFF");
}

}
else {
lcd.setCursor(0, 0);
lcd.write(1);
lcd.setCursor(2, 0);
lcd.print("Set ||");
lcd.setCursor(0, 1);
lcd.print("Alarm ||");
lcd.setCursor(9, 1);
if (alarmHour < 10) {
lcd.print("0");
lcd.setCursor(10, 1);
}
lcd.print(alarmHour);
lcd.setCursor(11, 1);
lcd.print(":");
lcd.setCursor(12, 1);
if (alarmMinutes < 10) {
lcd.print("0");
lcd.setCursor(13, 1);
}
lcd.print(alarmMinutes);
if (hourMode == 0) {
lcd.print("AM");
}
else {
lcd.print("PM");
}
}
// lcd.print(alarmMinutes);
if (digitalRead(btnOK) == LOW) {
submode++;
if (submode > 4) {
submode = 0;
}
delay(200);
lcd.clear();
}
if (submode == 1) {
lcd.setCursor(9, 0);
lcd.write(1);
lcd.write(1);
if (digitalRead(btnChange) == LOW) {
alarmHour++;
if (alarmHour > 12) {
alarmHour = 1;
}
delay(500);
}
}
if (submode == 2) {
lcd.setCursor(12, 0);
lcd.write(1);
lcd.write(1);
if (digitalRead(btnChange) == LOW) {
alarmMinutes++;
if (alarmMinutes >= 60) {
alarmMinutes = 0;
}
delay(500);
}
}
if (submode == 3) {
lcd.setCursor(14, 0);
lcd.write(1);
lcd.write(1);
if (digitalRead(btnChange) == LOW) {
hourMode = !hourMode;
delay(500);
}
}
while (submode == 4) {
lcd.setCursor(0, 0);
lcd.print("Activate Alarm?");
lcd.setCursor(0, 1);
lcd.print("Slot #");
lcd.print(slot + 1);
lcd.print(" ");
if(alarmOn==1){
lcd.print("ON ");
}
else{
lcd.print("OFF");
}
if (digitalRead(btnChange) == LOW) {
alarmOn = !alarmOn;
delay(200);
}

if (digitalRead(btnOK) == LOW && alarmOn == 1) {
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Saving.");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  if (hourMode == 1 && alarmHour != 12) {
    EEPROM.write(addrH[slot], alarmHour + 12);
  }
  else if (hourMode == 0 && alarmHour == 12) {
    EEPROM.write(addrH[slot], 0);
  }
  else {
    EEPROM.write(addrH[slot], alarmHour);
  }

  EEPROM.write(addrM[slot], alarmMinutes);
  EEPROM.write(addrActive[slot], 1);
  submode = 0;
  mode = 1;
  lcd.clear();
}
if (digitalRead(btnOK) == LOW && alarmOn == 0)  {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Alarm Slot#");
  lcd.print(slot + 1);
  lcd.setCursor(0, 1);
  lcd.print(" OFF      ");
  
  EEPROM.write(addrActive[slot], 0);
  submode = 0;
  mode = 1;
  
  delay(2000);
  lcd.clear();
}

}
}

/////////////////////////////////////////////////////////////////// SETTING DATE & TIME FUNCTION ///////////////////////////////////////////

void updateRTC() {
lcd.setCursor(0, 0);
lcd.write(2);
if (digitalRead(btnOK) == LOW) {
submode++;
if (submode > 7) {
submode = 0;
}
delay(200);
lcd.clear();
}

if (submode == 0) {
lcd.setCursor(2, 0);
lcd.print(" Set Date/Time?");
lcd.setCursor(0, 1);
lcd.print("Press OK button");
}
if (submode == 1) {
lcd.setCursor(2, 0);
lcd.print("Set Month");
lcd.setCursor(0, 1);
lcd.print("--> ");
if (digitalRead(btnChange) == LOW) {
M++;
if (M == 13) {
M = 1;
}
delay(200);
}
switch (M) {
case 1: lcd.print("January ");
break;
case 2: lcd.print("February ");
break;
case 3: lcd.print("March ");
break;
case 4: lcd.print("April ");
break;
case 5: lcd.print("May ");
break;
case 6: lcd.print("June ");
break;
case 7: lcd.print("July ");
break;
case 8: lcd.print("August ");
break;
case 9: lcd.print("September ");
break;
case 10: lcd.print("October ");
break;
case 11: lcd.print("November ");
break;
case 12: lcd.print("December ");
break;
}
}
if (submode == 2) {
lcd.setCursor(2, 0);
lcd.print("Set Day");
lcd.setCursor(0, 1);
lcd.print("--> ");
if (digitalRead(btnChange) == LOW) {
D++;
if (D == 32) {
D = 1;
}
delay(200);
}
lcd.print(D);
lcd.print(" ");
}

if (submode == 3) {
lcd.setCursor(2, 0);
lcd.print("Set Year");
lcd.setCursor(0, 1);
lcd.print("--> ");
if (digitalRead(btnChange) == LOW) {
Y++;
if (Y == 2099) {
Y = 2000;
}
delay(200);
}
lcd.print(Y);
}
if (submode == 4) {
lcd.setCursor(2, 0);
lcd.print("Set Day of the Week");
lcd.setCursor(0, 1);
lcd.print("--> ");
if (digitalRead(btnChange) == LOW) {
day++;
if (day == 8) {
day = 1;
}
delay(200);
}
switch (day) {
case 1: lcd.print("Sunday ");
break;
case 2: lcd.print("Monday ");
break;
case 3: lcd.print("Tuesday ");
break;
case 4: lcd.print("Wednesday ");
break;
case 5: lcd.print("Thursday ");
break;
case 6: lcd.print("Friday ");
break;
case 7: lcd.print("Saturday ");
break;
}
}
if (submode == 5) {
lcd.setCursor(2, 0);
lcd.print("Set Hour");
lcd.setCursor(0, 1);
lcd.print("--> ");
if (digitalRead(btnChange) == LOW) {
h++;
if (h == 24) {
h = 0;
}
delay(200);
}
if (h > 12) {
lcd.print(h - 12);
lcd.print(" ");
}
else if (h == 0) {
lcd.print("12");
lcd.print(" ");
}
else {
lcd.print(h);
lcd.print(" ");

}
if (h >= 12) {
  lcd.setCursor(9, 1);
  lcd.print("PM");
}
else {
  lcd.setCursor(9, 1);
  lcd.print("AM");
}

}
if (submode == 6) {
lcd.setCursor(2, 0);
lcd.print("Set Minutes");
lcd.setCursor(0, 1);
lcd.print("--> ");
if (digitalRead(btnChange) == LOW) {
m++;
if (m == 60) {
m = 0;
}
delay(200);
}
lcd.print(m);
lcd.print(" ");
}
if (submode == 7) {
lcd.setCursor(2, 0);
lcd.print("Date & Time");
lcd.setCursor(0, 1);
lcd.print("Updating");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
delay(200);
lcd.print(".");
myRTC.setDS1302Time(00, m, h, day, D, M, Y);
delay(200);
lcd.clear();
mode = 1;
}
}

this is the code we used but the screen is not displaying

Snap your program in little pieces.

Try to have the display correct working.

As I correct understand you use the eeprom as RTC. The EEPROM can't be write unending. 100 000 cycles is the limit. At once a second approx 28 hours. At once a minute approx 1666 hours or 69 days.

Use an RTC like DS3231 or DS1307 (less accurate). They have battery backup too.

Welcome to the forum

Please follow the advice given in the link below when posting code, in particular the section entitled 'Posting code and common code problems'

Use code tags (the </> icon above the compose window) to make it easier to read and copy for examination

Your topic has been moved to a more appropriate forum category

Hi, @rcoet
Welcome to the forum.

Have you got some example code from the library you are using that works on your LCD.
You need to check that you can send simple messages to your display before adding extra code.

Have you been able to display on your screen without all the extra code?

Thanks.... Tom.... :smiley: :+1: :coffee: :australia:

How is your circuit? Have you connected a volume pot with the contrast (V0) pin?

the lecturer told me that it might be a loose cable, and i have tried to display simple messages but it still is not displaying any text. The LCD screen is turning on and displaying boxes in the first row

We connected the I2C serial adapter

There must be a blue colored variable pot in the adapter's PCB. Have you tried adjusting that?

yes, we found the error and fixed it, it is now working 100%, Thank you for the help

To help close this thread and for others with similar problems, please tell us what you did to fix your problem.

Thanks.. Tom.. :smiley: :+1: :coffee: :australia: