Ciao a tutti,
regolazione della temperatura oltre che tutti i comandi del caso. Il codice senza il display non sarebbe difficile ma col Nextion ho
mando la temperatura della caldaia al display ogni mezzo secondo ma se nel momento che la manda premo un pulsante questo non viene letto, sembra che la seriale di arduino non riceva se sta trasmettendo oppure quella di Nextion non trasmetta se sta ricevendo... boh. Uso la libreria ufficiale di Nextion per Arduino Mega2560 e ho scopiazzato in giro per capire come fare ma sembra che il modo sia quello che uso e che sia normale, almeno qualcun altro ha notato la stessa cosa.
Ringrazio per l'eventuale aiuto :-)
#include #include #include
//Dichiarazione dei pulsanti Nextion (pagina, id, "name");
NexButton bsetmeno = NexButton(1, 2, "b0"); NexButton bsetpiu = NexButton(1, 3, "b1"); NexDSButton bcaffe = NexDSButton(0, 2, "bt0"); NexDSButton bvapore = NexDSButton(0, 6, "bt1");
NexNumber temp = NexNumber(0, 3, "temp"); NexNumber settemp = NexNumber(1, 6, "settemp");
uint32_t stato_caffe = 0; uint32_t stato_vapore = 0; unsigned long t1, dt; //timer per mandare valori al display int serialeNextion = 0; float intemperatura = A0; // ingresso sensore temperatura
NexTouch *nex_listen_list[] = { &bsetmeno, &bsetpiu, &bcaffe, &bvapore, NULL};
void setup() { Serial2.begin(9600); pinMode(22, OUTPUT); pinMode(13, OUTPUT); analogReference( INTERNAL2V56 );
nexInit(); bsetmeno.attachPop(btsetmeno, &bsetmeno); bsetpiu.attachPop(btsetpiu, &bsetpiu); bcaffe.attachPop(btcaffe, &bcaffe); bvapore.attachPop(btvapore, &bvapore);
void loop() { nexLoop(nex_listen_list);
dt = millis() - t1;
if (dt > 1000) { aggiornaNextion(); t1=millis(); }
void btsetmeno(void *ptr) { digitalWrite (22, HIGH); }
void btsetpiu(void *ptr) { digitalWrite (22, LOW); }
void btcaffe(void *ptr) { bcaffe.getValue (&stato_caffe);
if (stato_caffe == 1) { digitalWrite (13, HIGH);}
else
{digitalWrite (13, LOW); } }
void btvapore(void *ptr) { bvapore.getValue (&stato_vapore);
if (stato_vapore == 1) { digitalWrite (13, HIGH); }
else
{ digitalWrite (13, LOW); } }
void aggiornaNextion() { float temperatura = map(analogRead(intemperatura), 186, 585, 150, 19); settemp.setValue(100); temp.setValue(temperatura); }