Hello Mr. Krzysztof
Some time has passed since our discussions on YT - I had a long break from working with the project but I am going back to continuing the topic. After changing / rearranging the pages (order), problems with which I am not able to deal with have broken down. The clock, lamps and thermometers flickered nicely and it was over

. The project generally concerns the controller / controller of the aquarium in a slightly expanded version.
The driver options include:
- control of two PWM channels with indication of the time of day of lamp operation (LED lamps)
- temperature control and fan control (two channels) - animation of the fan operation on the panel when one of them is turned on,
- measurement of the pH value and with the appropriate kH introduced, calculation of the value of carbon dioxide in the water Co2,
- of course the current date and time,
- fertilizer dispenser control.
The whole in the one-channel version works on the arduino nano and the 20x4 LCD display, but there is no possibility of setting parameters from the display position only in the program and the need to reload the program to arduino, which is tiring and cumbersome.
And now my heartfelt request to the experts from arduino and Nextion displays to help me embrace the subject, because I do not know how to handle it anymore.
In the connection, I put the file for the display, my model is: NX3224T024_011. The Arduino to be operated is the MEGA 2560 version.
Of course, if someone sees the use of such a project, I will be happy to share it, but let it work

.
below the skech for arduino:
[syntax=c]#include "Arduino.h"
#include "Nextion.h"
#include
#include
#include
#include
#include
#include
#define ONE_WIRE_BUS 13 // pin 13 termomoetr
#define TEMPERATURE_RECISION 9
#define ODSTEP 1000
#define SensorPin A7 // wejÅcie analogowe dla sensora pH - pin analogowy 7
#define LED A7 // nowy wpis do pH
#define samplingInterval 20 // nowy wpis do pH
#define printInterval 800 // nowy wpis do pH
#define ArrayLenth 40 // times of collection
#define Offset 0.50 // kalibracja pH
//-----------------------PINY WE/WY ---------------------------------
int W1 = 5; // pin 5 - wyjÅcie do stycznika nr 1 - wentylator
int dozownik_1 = 6; // pin 6 - wyjÅcie do stycznika nr 2 - dozownik
int LED1 = 11; // pin 11 - wyjÅcie PWM do sterowania LED1
int LED2 = 10; // pin 11 - wyjÅcie PWM do sterowania LED2
int STEP = 1; // dÅugoÅÄ trwania jednego kroku
int CZAS; //czas do lampy led
int czas1;
int czas2;
int GODZ; // godziny
int MIN; // minuty
int maxD1 = 60; // maksymalna moc kanaÅu LED1
int maxD2 = 60; // maksymalna moc kanaÅu LED2
int ZMIANA = 60;
int godzina_ON; // godzina wÅÄ
czenia dozownika
int godzina_OFF; // godzina wyÅÄ
czenia dozownika
int minuta_ON; // minuty wÅÄ
czenia dozownika
int minuta_OFF; // minuty wyÅÄ
czenia dozownika
int sekunda_ON; // sekunty wÅÄ
czenia dozownika
int sekunda_OFF; // sekundy wyÅÄ
czenia dozownika
int porcja; // iloÅÄ wdozowywanego nawozu w ml
//int dzienG = 7; // poczÄ
tek dnia - godziny
//int dzienM = 00; // poczÄ
tek dnia - minuty
//int nocG = 20; // poczÄ
tek nocy - godziny
//int nocM = 00; // poczÄ
tek nocy - minuty
unsigned long czas_poprzedni = 0;
int licznik = 0;
int stan = 0;
int pH;
float b;
//float pH; // dla sensora pH
int pHArray[ArrayLenth]; //Store the average value of the sensor feedback
int pHArrayIndex=0; // nowy wpis do pH
//-----------------------ZMIENNE DLA TERMOMETRĆW -------------------------------
NexText t1 = NexText(1, 23, "t2"); //zmienna tekstowa dla termometra 1 (strona0)
NexText t2 = NexText(1, 24, "t3"); //zmienna tekstowa dla termometra 2 (strona0)
//-----------------------ZMIENNE DLA RTC -------------------------------
NexNumber g = NexNumber(1, 16, "page0.n1"); //zmienna numeryczna do zegara dla godzin (strona0)
NexNumber m = NexNumber(1, 17, "page0.n2"); //zmienna numeryczna do zegara dla minut (strona0)
NexNumber s = NexNumber(1, 18, "page0.n3"); //zmienna numeryczna do zegara dla sekund (strona0)
NexNumber d = NexNumber(1, 19, "page0.n4"); //zmienna numeryczna do kalendarza dla dni
NexNumber mie = NexNumber(1, 20, "page0.n5"); //zmienna numeryczna do kalendarza dla mieiÄcy
NexNumber r = NexNumber(1, 21, "page0.n6"); //zmienna numeryczna do kalendarza dla lat
//-----------------------ZMIENNE DLA TEMPERATURY - WIATRAK -------------------------------
NexNumber limes = NexNumber(3, 4, "te0"); //zmienna numeryczna dla ustawieÅ temperatury pobierana ze strony 3
//-----------------------ZMIENNE DLA SONDY PH -------------------------------
NexNumber PHval = NexNumber(1, 12, "page0.n7"); //zmienna numeryczna dla wartosci pH wyswietlanej na stronie 0
//-----------------------ZMIENNE DLA TWARTOÅCI/co2 -------------------------------
NexNumber num1 = NexNumber(1, 31, "n0"); //zmienna numeryczna dla twardoÅci wyÅwietlanej na stronie 0
NexNumber co2 = NexNumber(1, 29, "n8"); // obliczenie wartosci Co2 wyswietlanej na stronie 0
//-----------------------ZMIENNE DO STEROWANIA LAMPAMI -------------------------------
NexNumber dG1 = NexNumber(3, 5, "page2.dg1"); //zmienna numeryczna dla twardoÅci wyÅwietlanej na stronie 0
NexNumber dM1 = NexNumber(3, 7, "page2.dm1"); //zmienna numeryczna dla ustawieÅ twardoÅci pobierana ze strony 5
NexNumber nG1 = NexNumber(3, 4, "page2.ng1"); //zmienna numeryczna dla twardoÅci wyÅwietlanej na stronie 0
NexNumber nM1 = NexNumber(3, 6, "page2.nm1"); //zmienna numeryczna dla ustawieÅ twardoÅci pobierana ze strony 5
NexNumber dzienG2 = NexNumber(7, 5, "page8.dzienG2"); //zmienna numeryczna dla twardoÅci wyÅwietlanej na stronie 0
NexNumber dzienM2 = NexNumber(7, 7, "page8.dzienM2"); //zmienna numeryczna dla ustawieÅ twardoÅci pobierana ze strony 5
NexNumber nocG2 = NexNumber(7, 4, "page8.nocG2"); //zmienna numeryczna dla twardoÅci wyÅwietlanej na stronie 0
NexNumber nocM2 = NexNumber(7, 6, "page8.nocM2"); //zmienna numeryczna dla ustawieÅ twardoÅci pobierana ze strony 5
NexText pora = NexText(0, 6, "po"); //zmienna tekstowa dla pory dnia oÅwietlenia
NexNumber lamp1 = NexNumber(1, 23, "page0.l1"); //zmienna numeryczna dla statusu % lampy 1
NexNumber lamp2 = NexNumber(1, 24, "page0.l2"); //zmienna numeryczna dla statusu % lampy 2
NexTouch *nex_Listen_List[]=
{
NULL
};
char buffer[10] = {0};
OneWire oneWire(ONE_WIRE_BUS); // termometr one wire
DallasTemperature sensors(&oneWire); // termometr
int numberOfDevices;
DeviceAddress tempDeviceAddress;
//--------------------------------------------------------------------------------------------------------
//-------------------SETUP-------------------------------
//--------------------------------------------------------------------------------------------------------
void setup() {
//nexInit();
sensors.begin(); // aktywacja termometr
Serial.begin(9600); // aktywacja portu szeregowego
while (!Serial) ; // wait until Arduino Serial Monitor opens
numberOfDevices = sensors.getDeviceCount(); // pobranie danych z sensora
// pinMode(LED1, OUTPUT); // LED 1
// pinMode(LED2, OUTPUT); // LED 2
// pinMode(W1, OUTPUT); // wyjÅcie wentylator
// pinMode(W2, OUTPUT); // wyjÅcie dozownik
tmElements_t tm;
} // koniec void setup
//--------------------------------------------------------------------------------------------------------
//------------------- loop -------------------------------
//--------------------------------------------------------------------------------------------------------
void loop()
{
unsigned long czas_aktualny = millis();
if(czas_poprzedni - czas_aktualny> ODSTEP)
czas_poprzedni = czas_aktualny;
licznik = licznik + 1;
//------------------- ZEGAR -------------------------------
tmElements_t tm;
if (RTC.read(tm)) { // pobierz czas na wyÅwietlacz
Serial.print("DS1307 configured Time=");
Serial.print(__TIME__);
Serial.print(", Date=");
Serial.println(__DATE__);
d.setValue(tm.Day);
mie.setValue(tm.Month);
r.setValue(tmYearToCalendar(tm.Year));
g.setValue(tm.Hour);
m.setValue(tm.Minute);
s.setValue(tm.Second);
}
Serial.println("swiatÅa start");
LAMPY(); // dane z bloku lampy
Serial.println("temperatura start");
// printTemperature(DeviceAddress deviceAddress, int index); // dane z bloku temperatury
Serial.print("");
dozownik(); // dane z bloku dozownika
Serial.println("dozownik start");
PH_SONDA(); // dane z bloku sondy pH
Serial.println("sonda pH start");
} // konice void loop
//-----------------------------------------------------------------------------------------
bool setSys0(uint32_t number)
{
char buf[10] = {0};
String cmd;
utoa(number, buf, 10);
cmd += "sys0=";
cmd += buf;
sendCommand(cmd.c_str());
return recvRetCommandFinished();
} // koniec funkcji bool
uint32_t numLimes;
//--------------------------------------------------------------------------------------------------------
//-------------------void TEMPERATURY-------------------------------
//--------------------------------------------------------------------------------------------------------
void printTemperature(DeviceAddress deviceAddress, int index)
{
float tempC = sensors.getTempC(deviceAddress);
memset(buffer, 0, sizeof(buffer));
String tempTXT = String(tempC, 2);
tempTXT.toCharArray(buffer, 10);
if(index == 0){
t1.setText(buffer);
Serial.print("temperatura 1=");
Serial.print(buffer);
limes.getValue(&numLimes);
if(tempC > numLimes){
setSys0(1);
digitalWrite(W1,HIGH);
Serial.println("wiatrak 1 - ON");
}
else{
setSys0(0);
digitalWrite(W1,LOW);
Serial.println("wiatrak 1 - OFF");
}
}
if(index ==1){
t2.setText(buffer);
Serial.print("temperatura 2=");
Serial.print(buffer);
}
}
uint32_t num;
uint32_t dg1;
uint32_t dm1;
uint32_t ng1;
uint32_t nm1;
//uint32_t dG2;
//uint32_t dM2;
//uint32_t nG2;
//uint32_t nM2;
//--------------------------------------------------------------------------------------------------------
//-------------------VOID DOZOWNIK-------------------------------
//--------------------------------------------------------------------------------------------------------
void dozownik()
{
tmElements_t tm;
sekunda_OFF= porcja*60/100; // przeliczenie porcji w ml na czas dosowania w sekundach
if((godzina_ON==tm.Hour)&&(minuta_ON==tm.Minute)&&(sekunda_ON==tm.Second)) // warunek wÅÄ
czenia dozownika
{
digitalWrite(dozownik_1,HIGH); //wÅaczenie dozownika
Serial.println("dozownik start");
}
if((godzina_OFF==tm.Hour)&&(minuta_OFF==tm.Minute)&&(sekunda_OFF==tm.Second)) // warunek wyÅÄ
czenia dozownika
{
digitalWrite(dozownik_1,LOW); //wyÅaczenie dozownika
Serial.println("dozownik stop");
}
} //koniec void dozownik
//--------------------------------------------------------------------------------------------------------
//-------------------VOID LAMPY-------------------------------
//--------------------------------------------------------------------------------------------------------
void LAMPY()
{
//------------------- ZEGAR -------------------------------
tmElements_t tm;
if (RTC.read(tm)) { // pobierz czas na wyÅwietlacz
//------------------- OÅWIETLENIE -------------------------------
dG1.getValue(&dg1);
dM1.getValue(&dm1);
nG1.getValue(&ng1);
nM1.getValue(&nm1);
// dzienG2.getValue(&dG2);
// dzienM2.getValue(&dM2);
// nocG2.getValue(&nG2);
// nocM2.getValue(&nM2);
GODZ = (tm.Hour); // pobranie godziny z zegara
MIN = (tm.Minute); // pobranie minut z zegara
int CZAS = (GODZ*60+MIN); // przejÅcie na minuty - czas ogólny
int czas1 = (dg1*60+dm1); // przeliczenie na minuty dla czasu gdy dzieÅ
int czas2 = (ng1*60+nm1); // przeliczenie na minuty dla czsu gdy noc
// int czas1L2 = (dG2*60+dm2); // przeliczenie na minuty dla czasu gdy dzieÅ
// int czas2L2 = (nG2*60+nm2); // przeliczenie na minuty dla czsu gdy noc
static int D1; //stopieÅ rozjaÅniania LED1, LED2
// static int D2; //stopieÅ rozjaÅniania LED1, LED2
// -------------- LAMPA 1 --------------------------------------------
int mocD1[61] = //stopieÅ rozjaÅniania LED1
{
0,1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
25,30,35,40,45,50,55,60,65,70,
75,80,85,90,95,100,105,110,115,120,
125,130,135,140,145,150,155,160,165,170,
175,175,179,190,205,205,205,205,205,205 // zasilanie na 100%
};
int mocD2[61] = //stopieÅ rozjaÅniania LED1
{
0,1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
25,30,35,40,45,50,55,60,65,70,
75,80,85,90,95,100,105,110,115,120,
125,130,135,140,145,150,155,160,165,170,
175,175,179,195,210,215,225,235,245,255 // zasilanie na 100%
};
if (CZAS < czas1) // warunek gdy NOC
{
D1=0; //
// sendCommand("po.val=NOC");
Serial.println("LED - NOC");
pora.setText("NOC");
}
if ((czas1