Buonasera a tutti,
premetto che sono nuovo del forum e nonostante ho letto diversi topics (per lo più in inglese), che facciano riferimento al caso, non sono riuscito a risolvere il problema.
Sto provando ad accendere e spegnere dei leds attraverso il display nextion e arduino mega 2560, con pessimi risultati.
Riesco ad accendere il relè, ma non lo riesco a spegnere. ciò mi fa capire che l'arduino comunica con il display, ma non capisco cosa impedisca al "NexDsButton" di spegnerlo.
Il nextion è collegato ad arduino nelle porte 16 e 17, la libreria usata è stata scaricata dal sito ufficiale del display.
Nemmeno caricando lo sketch di esempio della libreria Nextion riesco ad avere risultati migliori.
Ringrazio in anticipo chiunque voglia aiutarmi a risolvere il problema.
inserisco lo sketch.
#include "Nextion.h"
int relay = 22;
/*
* Declare a dual state button object [page id:0,component id:1, component name: "bt0"].
*/
NexDSButton bt0 = NexDSButton(0, 1, "bt0");
char buffer[100] = {0};
/*
* Register a dual state button object to the touch event list.
*/
NexTouch *nex_listen_list[] =
{
&bt0,
NULL
};
/*
* Dual state button component pop callback function.
* In this example,the button's text value will plus one every time when it is released.
*/
void bt0PopCallback(void *ptr)
{
uint32_t dual_state;
NexDSButton *btn = (NexDSButton *)ptr;
dbSerialPrintln("bt0PopCallback");
dbSerialPrint("ptr=");
dbSerialPrintln((uint32_t)ptr);
memset(buffer, 0, sizeof(buffer));
/* Get the state value of dual state button component . */
bt0.getValue(&dual_state);
if(dual_state)
{
digitalWrite(relay, LOW);
}
else
{
digitalWrite(relay, HIGH);
}
}
void setup(void)
{
/* Set the baudrate which is for debug and communicate with Nextion screen. */
nexInit();
pinMode(relay,OUTPUT);
digitalWrite(relay, HIGH);
/* Register the pop event callback function of the dual state button component. */
bt0.attachPop(bt0PopCallback, &bt0);
dbSerialPrintln("setup done");
}
void loop(void)
{
/*
* When a pop or push event occured every time,
* the corresponding component[right page id and component id] in touch event list will be asked.
*/
nexLoop(nex_listen_list);
}
Ho usato Nextion ma mai i dual state button e soprattutto non uso la libreria, ad ogni modo l'unica cosa che mi viene in mente è che il tuo relé si attiva quando l'uscita è LOW in quanto metti l'uscita HIGH nel setup, da qui mi viene da suggerirti di stampare su seriale il valore della variabile dual_state perché se dichi che toccando il display il relé si attiva e se lo tocchi di nuovo non si disattiva allora penso che il valore restituito sia sempre valutato come true. Stampalo su seriale e guarda che valore di viene riportato nei due casi perché se come penso non restituisce zero e uno ma due valori interi specifici allora non entrerà mai nell'else
La butto li, nel programma del Nextion il tuo pulsante dual state ha id 1, si chiama bt0 ed è posizionato nella prima pagina? Se si allora credo che il problema stia nel fatto che hai utilizzato probabilmente la seriale numero 2 per collegarti al display (visto che usi 16 e 17 come pin) e non la Serial1 (pin 18 e 19) che è definita nella libreria, prova a spostarti di pin e usare Serial1 o se proprio vuoi usare la Serial2 modifica la libreria Nextion.
Ho provato ad impostare la Serial1, ma nulla. La libreria usata (scaricata dal Github nextion) è già configurata per Arduino Mega 2560, quindi dovrebbe funzionare. L’errore che mi da al monitor seriale dell’Ide Arduino:
mi fa pensare ad un problema di seriale o di tempo, ma non capisco come risolverlo.
Sto pure pensando che che il pulsante nextion rimane attivo e al comando tocco successivo non risponde perché appunto, già attivo.
In serata provo a rilevare la temperatura attraverso la lettura di un ds18b20 e il gaudge di nextion e vediamo se è un problema di dualStatebutton o di seriale.
Non va nulla, mi si presenta sempre lo stesso problema. Arduino e nextion comunicano al primo tocco per componente del display, ma successivamente si blocca.
Ma il programma sul Nextion l'hai fatto tu o hai scaricato l'esempio da loro? Perché se l'hai fatto tu hai verificato le cose che ho detto al post #5? Hai attivato il flag che invia anche l'ID del componente?
Poi visto che hai quella sequela d'errori non è che per caso hai invertito RX e TX? Se non sei sicuro verifica il collegamento.
Se il collegamento è corretto prova a stampare il valore di ritorno sulla seriale così lo vedi nel serial monitor.
Se ancora non funziona prova a caricare un esempio standard della libreria (che non sia legato ad un bottone a due stati) e carica su Nextion un esempio fatto da loro e verifica se continua a non funzionare potrebbe essere un problema hardware del display o della MEGA
Ho controllato se i pin tx rx e sono collegati bene, i vari flag touch release event di nextion sono flaggati, ho provato altri esempi ufficiali della libreria nextion e in tutti mi da l'errore mensionati nei post precedenti.
ho stampato il valore di ritorno del pin sulla seriale e al tocco del pulsante nextion stampa sempre 1, cioè pin alto.