hello im trying to control 4 relays with my Nextion touch screen and a DSbutton, i got the code to work but its not working correctly. im using a maga 2560 board. when i go and touch the 4 buttons in a row 1234 the relay engage but they dont turn off if i go 4321. i have to go back to button 1 and start from there. can someone tell me what i need to change in the code so they can work independently?
#include "Nextion.h"
/*
* Declare a dual state button object [page id:0,component id:1, component name: "bt0"].
*/
NexDSButton bt0 = NexDSButton(0, 2, "bt0");
NexDSButton bt1 = NexDSButton(0, 3, "bt0");
NexDSButton bt2 = NexDSButton(0, 4, "bt0");
NexDSButton bt3 = NexDSButton(0, 5, "bt0");
char buffer[100] = {0};
/*
* Register a dual state button object to the touch event list.
*/
NexTouch *nex_listen_list[] =
{
&bt0,
&bt1,
&bt2,
&bt3,
NULL
};
/*
* Dual state button component pop callback function.
*/
void bt0PopCallback(void *ptr)
{
uint32_t dual_state;
NexDSButton *btn = (NexDSButton *)ptr;
dbSerialPrintln("b0PopCallback");
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(9, HIGH);
}
else{digitalWrite(9, LOW);
}
}
void bt1PopCallback(void *ptr)
{
uint32_t dual_state;
NexDSButton *btn = (NexDSButton *)ptr;
dbSerialPrintln("b1PopCallback");
dbSerialPrint("ptr=");
dbSerialPrintln((uint32_t)ptr);
memset(buffer, 0, sizeof(buffer));
/* Get the state value of dual state button component . */
bt1.getValue(&dual_state);
if(dual_state){digitalWrite(10, HIGH);
}
else{digitalWrite(10, LOW);
}
}
void bt2PopCallback(void *ptr)
{
uint32_t dual_state;
NexDSButton *btn = (NexDSButton *)ptr;
dbSerialPrintln("b2PopCallback");
dbSerialPrint("ptr=");
dbSerialPrintln((uint32_t)ptr);
memset(buffer, 0, sizeof(buffer));
/* Get the state value of dual state button component . */
bt2.getValue(&dual_state);
if(dual_state){digitalWrite(11, HIGH);
}
else{digitalWrite(11, LOW);
}
}
void bt3PopCallback(void *ptr)
{
uint32_t dual_state;
NexDSButton *btn = (NexDSButton *)ptr;
dbSerialPrintln("b3PopCallback");
dbSerialPrint("ptr=");
dbSerialPrintln((uint32_t)ptr);
memset(buffer, 0, sizeof(buffer));
/* Get the state value of dual state button component . */
bt3.getValue(&dual_state);
if(dual_state){digitalWrite(12, HIGH);
}
else{digitalWrite(12, LOW);
}
}
void setup(void)
{
/* Set the baudrate which is for debug and communicate with Nextion screen. */
nexInit();
/* Register the pop event callback function of the dual state button component. */
bt0.attachPop(bt0PopCallback, &bt0);
bt1.attachPop(bt1PopCallback, &bt1);
bt2.attachPop(bt2PopCallback, &bt2);
bt3.attachPop(bt3PopCallback, &bt3);
//setting port OUTPUT
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
//initializing port
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
dbSerialPrintln("setup done");
}
void loop(void)
{
nexLoop(nex_listen_list);
}