Problema Arduino Mega 2560 e Dual State Button di Nextion

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

Nessun aiuto?

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

Grazie per avermi risposto, in serata provo e ti faccio sapere

Buonasera, ho fatto delle prove e aprendo il monitor serial mi sono accorto del seguente errore:

recvRetCommandFinished err
recvRetCommandFinished err
setup done

se tocco il pulsante sul Nextion, il monitor seriale mi comunica quest'altro errore:

[1708:0,2,bt0]
Callback
ptr=1708
recvRetNumber err

Facendo una ricerca non ho trovato risoluzioni a questo errore.

Leggo soltanto che è un problema di seriale.

Aiutoooooooooo

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:

recvRetCommandFinished err
recvRetCommandFinished err
setup done

[1708:0,2,bt0]
Callback
ptr=1708
recvRetNumber err

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.

Vi aggiorno

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.

mah.....

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.

A questo punto non so davvero cosa pensare.

Stefano_74, dai un'occhiata qui, anch'io avevo avuto problemi con la seriale e il Mega.

https://forum.arduino.cc/index.php?topic=380177.0

In effetti mi sono scaricato la libreria e la seriale collegata è la due e non la uno quindi i pin da usare sono 16 e 17