Arduino Mega2560 e display Nextion

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); }

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden
Loading thread data ...

Il 28/12/2021 23:09, Drizzt do'Urden ha scritto:

Negli esperimenti che feci con un pannello Nextion un paio di anni addietro ad un certo punto le zone touch erano diventate pigre. Risolsi

Se cerchi bene nella documentazione dell'IDE di Nexition trovi il comando apposito.

Se non ricordo male proprio su questo gruppo lessi l'esperienza fatta da una persona che diceva del degrado prestazionale dovuto alla massa degli scambi Arduino/Nextion non ottimizzati; in altre parole ad esempio mandare un input da nextion ad arduino per elaborare dati e poi rimandare il risultato da Arduino a Nextion "consuma" inutilmente tempo;

Arduino si risparmia un sacco di tempo ad utilizzare questo per

tutto.

--
 
_ _ 
0 0 
  @ 

E. Delacroix
Reply to
E. Delacroix

...

Hai modificaot il codice e postato versioni non funzionanti?

Reply to
Franco Af

Il 29/12/2021 12:40, Franco Af ha scritto:

Ho modificato in base ai miei nomi ma il programma funziona, l'unica

migliore senza usare la libreria del nextion e fare tutto direttamente con la seriale, boh :-) Ma cosa vedi che non va bene?

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Il 29/12/2021 10:44, E. Delacroix ha scritto:

Infatti, tutti i tutorial che ho visto dicono di non appesantire il void.loop() altrimenti si potrebbero avere dei disguidi nella

seriale che se usato bene non dovrebbe portare a questi ritardi, magari sbaglio qualcosa ma se fa tutto la libreria cosa sbaglio? Se non mando dati al nextion, i pulsanti non perdono un colpo, quando inizio a mandare regolarmente dati, ogni tanto si perde un colpo.

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Il 29/12/2021 18:10, Drizzt do'Urden ha scritto:

manca la graffa alla fine della funzione

Reply to
Franco Af

Il 29/12/2021 19:12, Drizzt do'Urden ha scritto:

Io non vedo letture e neppure scritture sulla seriale nel tuo codice, magari non le hai riportate.

prova a controllare la porta prima di leggere la seriale del display

if (Serial2.available()) { leggi dalla seriale Serial2.read }

Reply to
Franco Af

Il 29/12/2021 19:41, Franco Af ha scritto:

non puoi usare la seriale con i comandi "manuali"

ho provato questo semplice codice per vedere di capire come usare la seriale ma quando premo un pulsante sul display mi escono strani

In pratica uso la serial2 per comunicare col display e mi aspettavo di vedere nel monitor seriale l'indirizzo che deve spedire il display, tipo

65 00 02 00 FF FF FF:

void setup() { Serial2.begin(9600); Serial.begin(9600); pinMode(22, OUTPUT); pinMode(13, OUTPUT); analogReference( INTERNAL2V56 );

}

void loop() { if (Serial2.available()) { int inByte = Serial2.read(); Serial.write(inByte); }

if (Serial.available()) {

int inByte = Serial.read();

Serial2.write(inByte);

} }

un'impresa riuscirci :-) :-D

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Il 29/12/2021 21:25, Drizzt do'Urden ha scritto:

che vedi sulla serial2.

per provare, dovresti convertire il numero in stringa Serial.print(String(a)); (dopo non usare String che ruba memoria)

Reply to
Franco Af

Serial.print(String(inByte));

Reply to
Franco Af

Il 29/12/2021 22:40, Franco Af ha scritto:

OK, ora mi torna qualcosa di meglio :-D

101020255255255
--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Drizzt do'Urden ha scritto:

ste le

e

le cose?

dati sulla seriale ad Arduino, Arduino non invia nulla a Nexticon

controllato in questo modo?

Reply to
emilio

Il 29/12/2021 22:52, emilio ha scritto:

Bella domanda alla quale non so rispondere, bisognerebbe capire come

libreria, sto trovando alcuni video su youtube che spiegano come usarlo senza libreria, devo fare moooolti esperimenti prima di arrivarci ;-)

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Il 29/12/2021 22:52, Drizzt do'Urden ha scritto:

ho trovato questo:

byte c = Serial2.read(); if (!start_event) { // No press event byte (0x65) have been received if (c == 0x65) { // Event press character received, start the event start_event = true; sym_indx = 0; } }

prova questo che va a capo ogni numero ricevuto

Serial.println(String(inByte));

Reply to
Franco Af

Il 31/12/2021 00:44, LAB ha scritto:

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Il 29/12/2021 23:08, Franco Af ha scritto:

--
Saluti da Drizzt, quello vero! 


www.agidone.altervista.org 
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! 
http://www.tappezzeriagraziella.com/
Reply to
Drizzt do'Urden

Il 31/12/2021 12:01, Drizzt do'Urden ha scritto:

Poi bisognava vedere sul loro sito l'sdk (insieme di funzioni e variabili) che dovrebbe spiegare tutto. Magari farai ancora un po' di fatica nel mandare messaggi al display, ma dovresti riuscire facilmente.

Reply to
Franco Af

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.