Arduino Mega2560 e display Nextion

puoi linkare la libreria Nextion che stai usando ?

volevo capire cosa ti sta succedendo e ho installato questa:

formatting link
ma le funzioni presenti con combaciano con il tuo sorgente.

Reply to
alfio
Loading thread data ...

Il 01/01/2022 14:15, alfio ha scritto:

Ho usato la libreria originale ma sarebbe meglio non usare nulla e

usare tali dati, il Nextion manda i dati in formato ascii con ultimi tre byte 0xFF 0xFF 0xFF, ora riesco a vedere sul monitor di arduino cosa mando, esattamente al premere un tasto mando la scritta "caffeon" ma poi se la voglio confrontare con l'istruzione "if" non riesco a farla vedere, non ci capisco una mazza e i vari tutorial sono spiegati per chi

https://nextion.tech/nextion-editor/#_section3

formatting link

--
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 01/01/2022 14:15, alfio ha scritto:

ma non sono riuscito a farla funzionare:

formatting link

--
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

in che senso non riesci a confrontare? parli dell'usare l'istruzione giusta per il confronto oppure che le 2 stringhe "sembrano" diverse?

Reply to
Franco Af

Il 02/01/2022 11:15, Franco Af ha scritto:

In pratica il display manda "caffeon" o "caffeoff" sulla seriale quando viene premuto il pulsante a doppio stato, io vorrei far partire la pompa o fermarla in base alla parola che arriva. Sul monitor dell'IDE riesco a leggere le due parole quando arrivano ma non ho capito come usarle per quello che mi serve. Ho cercato in rete esempi ma sono tutti molto complicati, usano istruzioni strane... boh :-) Sto facendo un sacco di prove ma non giungo a risultati funzionanti :-(

--
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 02/01/2022 12:03, Drizzt do'Urden ha scritto:

prendere la parte di stringa giusta

Reply to
Franco Af

Il 02/01/2022 12:09, Franco Af ha scritto:

9997102102101111110 che corrisponde in ascii a "caffeon"

uso questo codice per leggere:

Serial.begin(9600); Serial2.begin(9600);

if (Serial2.available()) { String a=Serial2.read(); }

Serial.print(a);

--
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 nel messaggio news:sqqbp3$me8$ snipped-for-privacy@gioia.aioe.org...

caso mio ma

mentre ci sei, prova anche quella che c'e' nell'elenco delle librerie di

Arduino IDE, cioe' quella che vedi nel mio screenshot: Nextion 2.0.2 by Helder Rodriguez

Reply to
alfio

Il 02/01/2022 14:31, alfio ha scritto:

l'hanno nemmeno commentato e non saprei come usare i comandi.

--
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

Serial.print(String(a) + " ");

in pratica viene letto un carattere alla volta non tutti insieme

Reply to
Franco Af

Il 02/01/2022 15:05, Franco Af ha scritto:

99 97 102 102 101 111 110

ma come posso usare questa stringa per fargli fare delle azioni? Giusto per fare una prova ho scritto questo (non ridere) ma non

confrontati: Nella mia testolina le cose dovrebbero essere semplici, arriva un dato dalla seriale, lo leggi e lo usi per fare quello che ti serve ma

String caffe= ""; String caffeoff= "caffeoff"; String caffeon="caffeon"; String a="";

void setup() { Serial.begin(9600); Serial2.begin(9600);

pinMode(22, OUTPUT); pinMode(13, OUTPUT); analogReference( INTERNAL2V56 );

} void loop() { if (Serial2.available()) { { a=Serial2.read(); Serial.print(String(a) + " "); } if (a == caffeon) { digitalWrite (13, HIGH); a=""; } if (a == caffeoff) { digitalWrite (13, LOW); a=""; } } }

--
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 02/01/2022 15:23, Drizzt do'Urden ha scritto:

quando leggi a con "a=Serial2.read()" viene letto solo il primo carattere "99" (lo spazio lo aggiungiamo noi ogni volta che passiamo da read), e questo serviva per capire i caratteri letti.

partenza evento 101 (65 in esa) ma tu non lo vedi, prima lo vedevi

dal sorgente:

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; } } else { buff[sym_indx] = c; if (c == 0xff) { // The finish sequence symbol if (end_event()) { page = buff[0]; item = buff[1]; start_event = false; return true; } } if (++sym_indx > 7) { start_event = false; } }

PEr renderlo facile dice: Quando arriva 65 imposti la variabile start_event a leggere tutti i prossimi caratteri e finire quando troverai c = 0xff .

Sei sicuro di avermi dato tutti i caratteri che ricevi ?

Se sono tutti prova in questo modo, attento a copiare tutto il codice :

String caffe= ""; // questi comandi devono essere uguali a quelle stringhe che vedi String caffeoff= "99 97 102 102 101 111 102 102"; String caffeon="99 97 102 102 101 111 110"; String a="";

String com;

void setup() { Serial.begin(9600); Serial2.begin(9600);

pinMode(22, OUTPUT); pinMode(13, OUTPUT); analogReference( INTERNAL2V56 );

}

void loop() { com="";

while (Serial2.available()){ a=Serial2.read(); com=com + a + " "; // ti ho aggiunto lo spazio altrimenti non si

}

Serial.print(com + " - ");

if (com == caffeon ) { digitalWrite (13, HIGH); Serial.print(" * HIGH * "); }

if (com == caffeoff ) { digitalWrite (13, LOW); Serial.print(" * LOW * "); }

}

finito l'evento. Io non posso provare nulla, "dovrebbe" andare.

Reply to
Franco Af

Il 02/01/2022 16:52, Franco Af ha scritto:

modifica questa : String caffeoff= "99 97 102 102 101 111 102 102 "; String caffeon="99 97 102 102 101 111 110 ";

ci manca lo spazio

Reply to
Franco Af

"Drizzt do'Urden" ha scritto nel messaggio news:sqsb1v$eef$ snipped-for-privacy@gioia.aioe.org...

non

scritto al volo cercando di capire come funziona sia questa lib sia quella usata da te sia il tuo codice, senza aver mai visto un Nextion, quindi prova ma non dare per scontato che funzioni :-)

nel tuo codice sia Caffe' sia Vapore agiscono sull'uscita 13, e' corretto ?

questa libreria usa la SoftwareSerial e i 2 pin che metti nella dichiarazione di "nextion" devono soddisfare queste regole:

formatting link

#include

Nextion nextion( 10,11 ); // pin seriale rx,tx

void cbSetMeno ( uint8_t page,uint8_t id,bool state ) { digitalWrite( 22,HIGH ); }

void cbSetPiu ( uint8_t page,uint8_t id,bool state ) { digitalWrite( 22,LOW ); }

void cbCaffe ( uint8_t page,uint8_t id,bool state ) { digitalWrite( 13,state ); }

void cbVapore ( uint8_t page,uint8_t id,bool state ) { digitalWrite( 13,state ); }

unsigned long dt;

void setup() { nextion.begin( 9600 ); // baudrate

nextion.attach( { 1,2,NEXTION_EVENT_PRESS }, cbSetMeno ); // { pag,id,evento },callback nextion.attach( { 1,3,NEXTION_EVENT_PRESS }, cbSetPiu ); nextion.attach( { 0,2,NEXTION_EVENT_PRESS }, cbCaffe ); nextion.attach( { 0,6,NEXTION_EVENT_PRESS }, cbVapore );

dt = millis(); }

nextionComponent cTemp = { 0,3 }; // pag,id nextionComponent cSetTemp = { 1,6 };

void scriviNumero ( nextionComponent &c,uint32_t val ) { nextion.print( "p["+String( c.page )+"].b["+String( c.id )+"].val=\""+String( val ) + "\"" ); }

void aggiornaNextion ( void ) { uint32_t temperatura = map( analogRead( A0 ), 186, 585, 150, 19 ); scriviNumero( cSetTemp,100 ); scriviNumero( cTemp,temperatura ); }

void loop() { nextion.listen();

if( millis()>=dt ) { dt += 1000; aggiornaNextion(); } }

Reply to
alfio

Il 02/01/2022 16:52, Franco Af ha scritto:

Ok, penso di aver capito qualcosa di essenziale, fino ad ora pensavo che

ciclo con tutti i caratteri, invece "finalmente" ho capito che ad ogni

stringa, sembra banale per voi ma non ho mai trovato una spiegazione

l'argomento :-)

Dunque, se si lascia la programmazione del Nextion di default, ad ogni

65 00 05 00 FF FF FF esadecimale

oppure stringa

oppure ascii

101020255255255

che indicano, il 65 non lo so, 00 pagina, 05 id oggetto, 00 valore oggetto FF FF FF fine stringa.

Gli oggetti del display li puoi anche programmare per inviare i dati che vuoi tu invece dell'indirizzo standard, in questo caso sto mandando "caffeon" che corrisponde a

99 97 102 102 101 111 110
--
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 02/01/2022 18:39, alfio ha scritto:

si, l'ho fatto per semplificare, sulla scheda di prova ho un solo led, nel progetto finito devono fare cose diverse.

Ok, io uso il Mega2560 quindi ho diverse seriali libere e ora uso la 2

Provo anche questo, se non mi incasino la testa :-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 02/01/2022 16:55, Franco Af ha scritto:

Ho provato, copiato pari pari, la seriale parla continuamente e sul monitor si vedono passare velocemente tanti ----------- poi se premi il pulsante per un attimo appare la stringa corrispondente ma il led non si accende.

--
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 02/01/2022 20:50, Drizzt do'Urden ha scritto:

e non appaiono nemmeno le scritte HIGH o LOW

ci lavoro per capire :-)

--
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

la seriale parla troppo :) dovresti cambiare il comando sul display con inizio e fine comando es:

per i comandi aggiungi un carattere all'inizio e uno alla fine...

esempio :

ovviamente su tutti i comandi, in questo modo capiremo il comando inizio e fine. Devi cambiarlo sul display .

poi cambia il codice while

while (Serial2.available()){ ...... }

con questo sotto:

if (Serial2.available()){ a=Serial2.read();

int start=1; while(start==1){ a=Serial2.read();

com=com + a + " "; }else{ start=0; // permette di uscire dal ciclo } } } }

dovrebbe funzionare :)

Reply to
Franco Af

Il 02/01/2022 21:14, Franco Af ha scritto:

Dunque, la seriale parla ancora troppo :-D

per poter vedere sul monitor la stampa di "com" ho dovuto cambiare i due simboli col codice che mi arriva dalla seriale, altrimenti vedevo solo i

- scorrere:

ora quando premo il pulsante caffeon, sul monitor appare il codice 99 97

102 102 101 111 110 in mezzo ai - che scorrono e comunque il led non si accende e non appare la scritta HIGH.
--
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

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.