I dont understand and i am begginer. Can you explaine me more and give me ready solution please ?
This is my actual sketch which i use:
/**
DESCRIPTION
Sketch for 2x relay with buttons monostable. After back power all relays set OFF and send correct status OFF to controller.
*/
// Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
// Enabled repeater feature for this node
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
// Define Relays
#define RELAY_ON 1 // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay
// Define Sensor ID's
#define SSR_A_ID 1 // Id of the sensor child
#define SSR_B_ID 2 // Id of the sensor child
// Define buttons and relays
const int buttonPinA = 3;
const int buttonPinB = 4;
const int relayPinA = 5;
const int relayPinB = 6;
// Define Variables
int oldValueA = 0;
int oldValueB = 0;
bool stateA = false;
bool stateB = false;
int trigger = 0;
Bounce debouncerA = Bounce();
Bounce debouncerB = Bounce();
MyMessage msgA(SSR_A_ID, V_STATUS);
MyMessage msgB(SSR_B_ID, V_STATUS);
void setup()
{
pinMode(buttonPinA, INPUT_PULLUP); // Setup the button Activate internal pull-up
pinMode(buttonPinB, INPUT_PULLUP); // Setup the button Activate internal pull-up
// After setting up the buttons, setup debouncer
debouncerA.attach(buttonPinA);
debouncerA.interval(5);
debouncerB.attach(buttonPinB);
debouncerB.interval(5);
// Make sure relays are off when starting up
digitalWrite(relayPinA, RELAY_OFF);
digitalWrite(relayPinB, RELAY_OFF);
// Then set relay pins in output mode
pinMode(relayPinA, OUTPUT);
pinMode(relayPinB, OUTPUT);
}
void presentation() {
// Send the sketch version information to the gateway and Controller
sendSketchInfo("2xRelay with monostable", "1.0");
// Register all sensors to gw (they will be created as child devices)
present(SSR_A_ID, S_LIGHT);
present(SSR_B_ID, S_LIGHT);
}
/*
Example on how to asynchronously check for new messages from gw
*/
void loop()
{
if (trigger == 0){
send(msgA.set(false)); // Send off state for relayA to ensure controller knows the switch is off
send(msgB.set(false)); // Send off state for relayB to ensure controller knows the switch is off
trigger = 1;
}
debouncerA.update();
// Get the update value
int valueA = debouncerA.read();
if (valueA != oldValueA && valueA == 0) {
send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
}
oldValueA = valueA;
debouncerB.update();
// Get the update value
int valueB = debouncerB.read();
if (valueB != oldValueB && valueB == 0) {
send(msgB.set(stateB ? false : true), true); // Send new state and request ack back
}
oldValueB = valueB;
}
void receive(const MyMessage &message) {
// We only expect one type of message from controller. But we better check anyway.
if (message.type == V_STATUS) {
switch (message.sensor) {
case 1:
stateA = message.getBool();
digitalWrite(message.sensor + 4, stateA ? RELAY_ON : RELAY_OFF);
break;
case 2:
stateB = message.getBool();
digitalWrite(message.sensor + 4, stateB ? RELAY_ON : RELAY_OFF);
break;
}
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.println(message.sensor);
Serial.print("from node:");
Serial.println(message.sender);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}```