i am unable to get anything to work with the screen it also now doesnt update the time anymore and just shows the placeholder string. I tried making like a debug code to see what page im on and what button is pressed but it doesnt show the correct page and also doesnt print when i press a button
i have checked all of my buttons and checked that the printh are correct
for instance on the add pill button i have in the Touch press event a page add
and then in the Touch release event printh 23 02 54 01
and it also prints it when i press the button in debug but when i try it with my code nothing happens. I tried using claude ai to help me code some of it because i wasent understanding it and it helped get the DS1302 working but the lcd + arduino i wasnt able to get it working neither with the help from claude.
The code also says tWarning that it changes it to "System Ready" but it just keeps saying "All good"
here is the code
/*
* Medicine Box
* Arduino Mega + DS1302 (msparks library) + Nextion + EasyNextionLibrary
*
* WIRING:
* Nextion TX -> Mega pin 19 (RX1)
* Nextion RX -> Mega pin 18 (TX1)
* Nextion VCC -> 5V PSU rail (NOT Mega 5V pin)
* Nextion GND -> GND
*
* DS1302 RST -> Mega pin 28
* DS1302 DAT -> Mega pin 27
* DS1302 CLK -> Mega pin 26
* DS1302 VCC -> 5V
* DS1302 GND -> GND
*
* LIBRARIES (Library Manager):
* EasyNextionLibrary by Seithan
* DS1302 by msparks
*
* NEXTION EDITOR - each button Touch Release Event:
* printh 23 02 54 XX (XX = trigger number from table below)
* Each page Preinitialize Event:
* printh 23 02 50 XX (XX = page number: 00..05)
*
* TRIGGER TABLE:
* 01=bAdd 02=bInfo 03=bSettings
* 04=bMon 05=bTue 06=bWed 07=bThu 08=bFri 09=bSat 0A=bSun
* 0B=bTotalPlus 0C=bTotalMinus 0D=bDosePlus 0E=bDoseMinus
* 0F=bSave 10=bBack(add)
* 11=bEdit 12=bBack(info)
* 13=bLang 14=bReset 15=bBack(settings)
* 16=bSelectPlus 17=bSelectMinus 18=bApply 19=bBack(edit_amount)
* 1A=bDanishLan 1B=bEnglishLan 1C=bBack(language)
*/
#include <EasyNextionLibrary.h>
#include <DS1302.h>
// βββ Nextion on Serial1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
EasyNex myNex(Serial1);
// βββ DS1302: RST=8, DAT=7, CLK=6 (matches wiring comment above) ββββββββββ
DS1302 rtc(8, 7, 6);
#define DEBUG true
// βββ Days of week βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// msparks: dow Sun=1, Mon=2, Tue=3, Wed=4, Thu=5, Fri=6, Sat=7
const char* DOW[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
// βββ App state ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
int totalPills = 10;
int dosePerDay = 1;
int editIndex = 0;
bool isEnglish = true;
bool days[7] = {false}; // 0=Mon 1=Tue 2=Wed 3=Thu 4=Fri 5=Sat 6=Sun
char buf[40];
// βββ Helpers βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
void sendStr(const char* comp, const char* val) {
myNex.writeStr(comp, val);
if (DEBUG) {
Serial.print(F(" -> ")); Serial.print(comp);
Serial.print(F(" = \"")); Serial.print(val); Serial.println(F("\""));
}
}
void sendInt(const char* comp, int v) {
itoa(v, buf, 10);
sendStr(comp, buf);
}
void buildDaysString() {
const char* labels[] = {"Mo","Tu","We","Th","Fr","Sa","Su"};
buf[0] = '\0';
bool any = false;
for (uint8_t i = 0; i < 7; i++) {
if (!days[i]) continue;
if (any) strlcat(buf, " ", sizeof(buf));
strlcat(buf, labels[i], sizeof(buf));
any = true;
}
if (!any) strlcpy(buf, isEnglish ? "None" : "Ingen", sizeof(buf));
}
void refreshAddPage() {
sendInt("tTotal.txt", totalPills);
sendInt("tDose.txt", dosePerDay);
sendStr("tTimeSet.txt", "08:00");
buildDaysString();
sendStr("tDays.txt", buf);
}
// βββ Page change handler ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
void onPageChange(int newPage) {
if (DEBUG) {
Serial.print(F("[PAGE] -> ")); Serial.println(newPage);
}
switch (newPage) {
case 1:
refreshAddPage();
break;
case 2:
sendStr("tList.txt",
"1. Paracetamol\n 500mg 2x/day Mo-Fr\n\n"
"2. Vitamin D\n 1000IU 1x/day daily");
break;
case 4:
snprintf(buf, sizeof(buf), "Medicine %d", editIndex + 1);
sendStr("tSelected.txt", buf);
sendStr("tListofpills.txt", "1. Paracetamol\n2. Vitamin D");
sendStr("tSelectedPill.txt", "Paracetamol");
break;
}
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// TRIGGER FUNCTIONS (called automatically by NextionListen)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
void trigger1() { if(DEBUG) Serial.println(F("[BTN] bAdd")); refreshAddPage(); }
void trigger2() { if(DEBUG) Serial.println(F("[BTN] bInfo")); }
void trigger3() { if(DEBUG) Serial.println(F("[BTN] bSettings")); }
// Day toggles β each one updates the display immediately
void trigger4() { days[0]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Mon="));Serial.println(days[0]);} }
void trigger5() { days[1]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Tue="));Serial.println(days[1]);} }
void trigger6() { days[2]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Wed="));Serial.println(days[2]);} }
void trigger7() { days[3]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Thu="));Serial.println(days[3]);} }
void trigger8() { days[4]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Fri="));Serial.println(days[4]);} }
void trigger9() { days[5]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Sat="));Serial.println(days[5]);} }
void trigger10() { days[6]^=1; buildDaysString(); sendStr("tDays.txt",buf); if(DEBUG){Serial.print(F("[DAY] Sun="));Serial.println(days[6]);} }
void trigger11() { totalPills++; sendInt("tTotal.txt",totalPills); if(DEBUG){Serial.print(F("[TOTAL] "));Serial.println(totalPills);} }
void trigger12() { if(totalPills>1)totalPills--; sendInt("tTotal.txt",totalPills); if(DEBUG){Serial.print(F("[TOTAL] "));Serial.println(totalPills);} }
void trigger13() { dosePerDay++; sendInt("tDose.txt",dosePerDay); if(DEBUG){Serial.print(F("[DOSE] ")); Serial.println(dosePerDay);} }
void trigger14() { if(dosePerDay>1)dosePerDay--; sendInt("tDose.txt",dosePerDay); if(DEBUG){Serial.print(F("[DOSE] ")); Serial.println(dosePerDay);} }
void trigger15() { if(DEBUG)Serial.println(F("[BTN] bSave")); sendStr("tWarning.txt", isEnglish?"Saved!":"Gemt!"); }
void trigger16() { if(DEBUG)Serial.println(F("[BTN] bBack add")); }
void trigger17() { if(DEBUG)Serial.println(F("[BTN] bEdit")); editIndex=0; }
void trigger18() { if(DEBUG)Serial.println(F("[BTN] bBack info")); }
void trigger19() { if(DEBUG)Serial.println(F("[BTN] bLang")); }
void trigger20() {
if(DEBUG)Serial.println(F("[BTN] bReset"));
totalPills=10; dosePerDay=1; isEnglish=true;
memset(days,0,sizeof(days));
sendStr("tWarning.txt","System reset!");
sendStr("tNext.txt","--:--");
}
void trigger21() { if(DEBUG)Serial.println(F("[BTN] bBack settings")); }
void trigger22() {
editIndex++;
snprintf(buf,sizeof(buf),"Medicine %d",editIndex+1);
sendStr("tSelected.txt",buf);
if(DEBUG){Serial.print(F("[EDIT] "));Serial.println(editIndex);}
}
void trigger23() {
if(editIndex>0) editIndex--;
snprintf(buf,sizeof(buf),"Medicine %d",editIndex+1);
sendStr("tSelected.txt",buf);
if(DEBUG){Serial.print(F("[EDIT] "));Serial.println(editIndex);}
}
void trigger24() { if(DEBUG)Serial.println(F("[BTN] bApply")); sendStr("tWarning.txt",isEnglish?"Updated!":"Opdateret!"); }
void trigger25() { if(DEBUG)Serial.println(F("[BTN] bBack edit")); }
void trigger26() { isEnglish=false; if(DEBUG)Serial.println(F("[BTN] Danish")); sendStr("tWarning.txt","Sprog: Dansk"); }
void trigger27() { isEnglish=true; if(DEBUG)Serial.println(F("[BTN] English")); sendStr("tWarning.txt","Language: English"); }
void trigger28() { if(DEBUG)Serial.println(F("[BTN] bBack lang")); }
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SETUP
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
void setup() {
Serial.begin(9600);
Serial.println(F("=== Medicine Box booting ==="));
rtc.halt(false);
rtc.writeProtect(false);
// ββ Set time ONCE: uncomment, upload, re-comment, upload again ββββββββββββ
// Time t(2026, 4, 14, 12, 0, 0, Time::kMonday);
// rtc.time(t);
Serial.println(F("[RTC] DS1302 OK"));
myNex.begin(9600);
Serial.println(F("[NEX] Serial1 ready"));
delay(600);
sendStr("tWarning.txt", "System ready");
sendStr("tNext.txt", "Next: --:--");
Serial.println(F("[INIT] Boot complete."));
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// LOOP β RTC polled with millis(), NOT every iteration
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
int lastPageId = -1;
unsigned long lastRtcMs = 0; // β replaces lastSecond check with millis()
void loop() {
// ββ 1. Always listen first β give serial the most CPU time βββββββββββββββ
myNex.NextionListen();
// ββ 2. Page change detection ββββββββββββββββββββββββββββββββββββββββββββββ
if (myNex.currentPageId != lastPageId) {
lastPageId = myNex.currentPageId;
onPageChange(lastPageId);
}
// ββ 3. RTC update β only once per second, not every loop iteration ββββββββ
// This prevents the bit-bang DS1302 read from blocking NextionListen()
if (millis() - lastRtcMs >= 1000) {
lastRtcMs = millis();
Time t = rtc.getTime(); // only called ~1x per second now
// msparks dow: Sun=1 ... Sat=7 β DOW[t.dow - 1]
snprintf(buf, sizeof(buf), "%s %02d:%02d:%02d",
DOW[t.dow - 1], t.hour, t.min, t.sec);
if (myNex.currentPageId == 0) {
myNex.writeStr("tTime.txt", buf);
}
if (DEBUG) {
Serial.print(F("[RTC] ")); Serial.print(buf);
Serial.print(F(" page=")); Serial.println(myNex.currentPageId);
}
}
}
this is the output from clicking a bit around in the screen with the code
β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘
===========================================
Medicine Box booting...
===========================================
[RTC] DS1302 OK
[NEX] Nextion ready on Serial1 (pins 18/19)
-> tWarning.txt = "System ready"
-> tNext.txt = "Next: --:--"
[INIT] Boot complete.
[PAGE] Switched to page 0
[RTC] Sun 21:32:21 page=0
[RTC] Sun 21:32:22 page=0
[RTC] Sun 21:32:23 page=0
[RTC] Sun 21:32:24 page=0
[RTC] Sun 21:32:25 page=0
[RTC] Sun 21:32:26 page=0
[RTC] Sun 21:32:27 page=0
[RTC] Sun 21:32:28 page=0
[RTC] Sun 21:32:29 page=0
[RTC] Sun 21:32:30 page=0
[RTC] Sun 21:32:31 page=0
[RTC] Sun 21:32:32 page=0
[RTC] Sun 21:32:33 page=0
[RTC] Sun 21:32:34 page=0
[RTC] Sun 21:32:35 page=0
[RTC] Sun 21:32:36 page=0
[RTC] Sun 21:32:37 page=0
[RTC] Sun 21:32:38 page=0
[RTC] Sun 21:32:39 page=0
[RTC] Sun 21:32:40 page=0
[RTC] Sun 21:32:41 page=0
[RTC] Sun 21:32:42 page=0
[RTC] Sun 21:32:43 page=0
[RTC] Sun 21:32:44 page=0
[RTC] Sun 21:32:45 page=0
[RTC] Sun 21:32:46 page=0
[RTC] Sun 21:32:47 page=0
[RTC] Sun 21:32:48 page=0
[RTC] Sun 21:32:49 page=0
[RTC] Sun 21:32:50 page=0
[RTC] Sun 21:32:51 page=0
[RTC] Sun 21:32:52 page=0
[RTC] Sun 21:32:53 page=0
[RTC] Sun 21:32:54 page=0
[RTC] Sun 21:32:55 page=0
[RTC] Sun 21:32:56 page=0
[RTC] Sun 21:32:57 page=0
[RTC] Sun 21:32:58 page=0
[RTC] Sun 21:32:59 page=0
[RTC] Sun 21:33:00 page=0
[RTC] Sun 21:33:01 page=0
[RTC] Sun 21:33:02 page=0
[RTC] Sun 21:33:03 page=0
[RTC] Sun 21:33:04 page=0
[RTC] Sun 21:33:05 page=0
[RTC] Sun 21:33:06 page=0
[RTC] Sun 21:33:07 page=0
[RTC] Sun 21:33:08 page=0
[RTC] Sun 21:33:09 page=0
[RTC] Sun 21:33:10 page=0
[RTC] Sun 21:33:11 page=0
[RTC] Sun 21:33:12 page=0
[RTC] Sun 21:33:13 page=0
[RTC] Sun 21:33:14 page=0
[RTC] Sun 21:33:15 page=0
[RTC] Sun 21:33:16 page=0
[RTC] Sun 21:33:17 page=0
[RTC] Sun 21:33:18 page=0
[RTC] Sun 21:33:19 page=0
[RTC] Sun 21:33:20 page=0
[RTC] Sun 21:33:21 page=0
[RTC] Sun 21:33:22 page=0
[RTC] Sun 21:33:23 page=0
[RTC] Sun 21:33:24 page=0
[RTC] Sun 21:33:25 page=0
[RTC] Sun 21:33:26 page=0
[RTC] Sun 21:33:27 page=0
[RTC] Sun 21:33:28 page=0
[RTC] Sun 21:33:29 page=0
[RTC] Sun 21:33:30 page=0
[RTC] Sun 21:33:31 page=0
[RTC] Sun 21:33:32 page=0
[RTC] Sun 21:33:33 page=0
[RTC] Sun 21:33:34 page=0
[RTC] Sun 21:33:35 page=0
===========================================
Medicine Box booting...
===========================================
[RTC] DS1302 OK
[NEX] Nextion ready on Serial1 (pins 18/19)
-> tWarning.txt = "System ready"
-> tNext.txt = "Next: --:--"
[INIT] Boot complete.
[PAGE] Switched to page 0
[RTC] Sun 21:42:12 page=0
[RTC] Sun 21:42:13 page=0
[RTC] Sun 21:42:14 page=0
β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘β‘IQ
uοΏ½οΏ½=== Medicine Box booting ===
[RTC] DS1302 OK
[NEX] Serial1 ready
-> tWarning.txt = "System ready"
-> tNext.txt = "Next: --:--"
[INIT] Boot complete.
[PAGE] -> 0
[RTC] Sun 21:42:18 page=0
[RTC] Sun 21:42:19 page=0
[RTC] Sun 21:42:20 page=0
[RTC] Sun 21:42:21 page=0
[RTC] Sun 21:42:22 page=0
[RTC] Sun 21:42:23 page=0
[RTC] Sun 21:42:24 page=0
[RTC] Sun 21:42:25 page=0
[RTC] Sun 21:42:26 page=0
[RTC] Sun 21:42:27 page=0
[RTC] Sun 21:42:28 page=0
[RTC] Sun 21:42:29 page=0
[RTC] Sun 21:42:30 page=0
[RTC] Sun 21:42:31 page=0
[RTC] Sun 21:42:32 page=0
[RTC] Sun 21:42:33 page=0
[RTC] Sun 21:42:34 page=0
[RTC] Sun 21:42:35 page=0
[RTC] Sun 21:42:36 page=0
[RTC] Sun 21:42:37 page=0
[RTC] Sun 21:42:38 page=0
[RTC] Sun 21:42:39 page=0
[RTC] Sun 21:42:40 page=0
[RTC] Sun 21:42:41 page=0
[RTC] Sun 21:42:42 page=0
[RTC] Sun 21:42:44 page=0
[RTC] Sun 21:42:45 page=0
[RTC] Sun 21:42:46 page=0
[RTC] Sun 21:42:47 page=0
[RTC] Sun 21:42:48 page=0
[RTC] Sun 21:42:49 page=0
[RTC] Sun 21:42:50 page=0
[RTC] Sun 21:42:51 page=0
[RTC] Sun 21:42:52 page=0
[RTC] Sun 21:42:53 page=0
[RTC] Sun 21:42:54 page=0
[RTC] Sun 21:42:55 page=0
[RTC] Sun 21:42:56 page=0
[RTC] Sun 21:42:57 page=0
[RTC] Sun 21:42:58 page=0
[RTC] Sun 21:42:59 page=0
[RTC] Sun 21:43:00 page=0
[RTC] Sun 21:43:01 page=0
[RTC] Sun 21:43:02 page=0
[RTC] Sun 21:43:03 page=0
[RTC] Sun 21:43:04 page=0
[RTC] Sun 21:43:06 page=0
[RTC] Sun 21:43:07 page=0
[RTC] Sun 21:43:08 page=0
[RTC] Sun 21:43:09 page=0
and this is one of the buttons
i also have added in the preinzialize in every page a printh for instance in the home page i have printh 23 02 50 00
im a bit lost on what i have done wrong as nothing seems to fix this
i alos switch the board from a uno to a mega