Код: Выделить всё
#define MY_DEBUG // Включаем отладочные сообщения в порт ноды
#define MY_RADIO_NRF24 // Определаем тип радио модуля
#define MY_NODE_ID 5 // Задаем ID ноды
#define MY_RF24_CE_PIN 9 // Специфические настройки пинов для радиомодулей RF24
#define MY_RF24_CS_PIN 10 // Специфические настройки пинов для радиомодулей RF24
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
#define RELAY_1 3 // номер цифрового пина для 1 реле
#define RELAY_2 4 // номер цифрового пина для 2 реле
//#define NUMBER_OF_RELAYS 2 // Общее количество подключенных реле
#define RELAY_ON 1 // состояние влюченного реле
#define RELAY_OFF 0 // состояние выключенного реле
#define BUTTON_PIN_1 6 // номер цифрового пина для 1 выключателя
#define BUTTON_PIN_2 7 // номер цифрового пина для 2 выключателя
//#define CHILD_ID 5 // Id Идентификатор датчика
Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
MyMessage msg1(1, V_STATUS);
MyMessage msg2(2, V_STATUS); // Initialize message
void before()
{
// Устанавливаем состояние контактов реле 1
pinMode(RELAY_1, OUTPUT);
// Отправляем состояние реле шлюзу
digitalWrite(RELAY_1, loadState(1)?RELAY_OFF:RELAY_ON);
// Устанавливаем состояние контактов реле 2
pinMode(RELAY_2, OUTPUT);
// Отправляем состояние реле шлюзу
digitalWrite(RELAY_2, loadState(2)?RELAY_OFF:RELAY_ON);
/*
for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
// Then set relay pins in output mode
pinMode(pin, OUTPUT);
// Set relay to last known state (using eeprom storage)
digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
}*/
}
void setup()
{
pinMode(BUTTON_PIN_1, INPUT); // Установки состояния выключателя №1
digitalWrite(BUTTON_PIN_1,HIGH); // Устанавливаем состояния выключателя pull-up
debouncer1.attach(BUTTON_PIN_1); // После настройки кнопки, установка debouncer
debouncer1.interval(5);
pinMode(BUTTON_PIN_2, INPUT); // Установки состояния выключателя №1
digitalWrite(BUTTON_PIN_2,HIGH); // Устанавливаем состояния выключателя pull-up
debouncer2.attach(BUTTON_PIN_2); // После настройки кнопки, установка debouncer
debouncer2.interval(5);
}
void presentation()
{
// Версия прошивки контроллера
sendSketchInfo("Switch2WayWD_test", "1.1");
// Регистрируем датчики для шлюза MySensor
present(1, S_BINARY);
present(2, S_BINARY);
/*for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
// Register all sensors to gw (they will be created as child devices)
present(sensor, S_BINARY);
}*/
}
void loop()
{
if (debouncer1.update() && debouncer1.read()) {
send(msg1.set(loadState(1)?RELAY_ON:RELAY_OFF), true);
}
if (debouncer2.update() && debouncer2.read()) {
send(msg2.set(loadState(2)?RELAY_ON:RELAY_OFF), true);
}
}
// Обработка входящих сообщений от шлюза MySensor
void receive(const MyMessage &message)
{
// Проверка состояния реле
if (message.type==V_STATUS) {
// Изменяем состояние реле
digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
// Пишем состояние реле в память
saveState(message.sensor, message.getBool());
// Обработка ошибок через com порт
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}