Z-Uno 5 reley

Данный раздел предназначен для русскоязычных пользователей. Если вы владеете английским, рекомендуем также просмотреть общую ветку обсуждений на английском.
Post Reply
4709700
Posts: 3
Joined: 27 Sep 2019 10:13

Z-Uno 5 reley

Post by 4709700 »

Добра всем!
Прошу помощи, 2 вопроса...
Попытка создать устройсто упр. 5 реле на PN5-10DA - на 80% получилось.
Последнee устройство 5 , ни в какую не обновляется статус в smarthome ui после передергивания питания. (сброс всех каналов после подкл. питания на офф. по скетчу ниже). Горит "Вкл." 5 канал. Остальные 4 реле - все отображается норм, "выкл" статус меняется...
+ Вопрос по ходу, каким образом записывать текущее состояние каждого реле, что бы пи пропадании и возобновлении питания - возвращалось исходное?


Код:
:shock:

// Pins definitions

#define LedPin1 9
#define LedPin2 10
#define LedPin4 11
#define LedPin3 12
#define LedPin5 14

// Global variables to store data reported via getters
byte switchValue1 = 0;
byte switchValue2 = 0;
byte switchValue3 = 0;
byte switchValue4 = 0;
byte switchValue5 = 0;

ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_ALWAYS_AWAKE);
ZUNO_SETUP_ASSOCIATIONS(ZUNO_ASSOCIATION_GROUP_SET_VALUE); // Send Basic Set to association group

// Set up 5 channels
ZUNO_SETUP_CHANNELS(
ZUNO_SWITCH_BINARY(getterSwitch1, setterSwitch1),
ZUNO_SWITCH_BINARY(getterSwitch2, setterSwitch2),
ZUNO_SWITCH_BINARY(getterSwitch3, setterSwitch3),
ZUNO_SWITCH_BINARY(getterSwitch4, setterSwitch4),
ZUNO_SWITCH_BINARY(getterSwitch5, setterSwitch5)
);

void setup() {
// set up I/O pins. Analog and PWM will be automatically set up on analogRead/analogWrite functions call
pinMode(LedPin1, OUTPUT);
pinMode(LedPin2, OUTPUT);
pinMode(LedPin3, OUTPUT);
pinMode(LedPin4, OUTPUT);
pinMode(LedPin5, OUTPUT);
digitalWrite(LedPin1, HIGH);
digitalWrite(LedPin2, HIGH);
digitalWrite(LedPin3, HIGH);
digitalWrite(LedPin4, HIGH);
digitalWrite(LedPin5, HIGH);

zunoSendReport(1);
zunoSendReport(2);
zunoSendReport(3);
zunoSendReport(4);
zunoSendReport(5);
}

void loop() {
// Empty
}

// Getters and setters
//1

void setterSwitch1(byte value) {
digitalWrite(LedPin1, (value > 0) ? LOW : HIGH);
switchValue1 = value;
}
byte getterSwitch1() {
return switchValue1;
}

//2

void setterSwitch2(byte value) {
digitalWrite(LedPin2, (value > 0) ? LOW : HIGH);
switchValue2 = value;
}
byte getterSwitch2() {
return switchValue2;
}

//3
void setterSwitch3(byte value) {
digitalWrite(LedPin3, (value > 0) ? LOW : HIGH);
switchValue3 = value;
}
byte getterSwitch3() {
return switchValue3;
}
//4

void setterSwitch4(byte value) {
digitalWrite(LedPin4, (value > 0) ? LOW : HIGH);
switchValue4 = value;
}
byte getterSwitch4() {
return switchValue4;
}

//5
void setterSwitch5(byte value) {
digitalWrite(LedPin5, (value > 0) ? LOW : HIGH);
switchValue5 = value;
}
byte getterSwitch5() {
return switchValue5;
}
User avatar
PoltoS
Posts: 7571
Joined: 26 Jan 2011 19:36

Re: Z-Uno 5 reley

Post by PoltoS »

Спящее реле? Вы уверены?

Для запоминания состояния используйте запись в EEOROM.
4709700
Posts: 3
Joined: 27 Sep 2019 10:13

Re: Z-Uno 5 reley

Post by 4709700 »

Да, "спало" , и не обновлялось). Решил проблему , подсмотрено тут - https://z-wave.by/product/smart-control ... -a-2-30-a/
Спасибо за ответ!
Рабочий код:

#include "EEPROM.h"

// Pins definitions
#define LedPin0 9
#define LedPin1 10
#define LedPin2 11
#define LedPin3 12
#define LedPin4 14

#define ADDRESS_0 0x00
#define ADDRESS_1 0x01
#define ADDRESS_2 0x02
#define ADDRESS_3 0x03
#define ADDRESS_4 0x04

// Global variables to store data reported via getters
byte switchValue0 = EEPROM.read(ADDRESS_0);
byte switchValue1 = EEPROM.read(ADDRESS_1);
byte switchValue2 = EEPROM.read(ADDRESS_2);
byte switchValue3 = EEPROM.read(ADDRESS_3);
byte switchValue4 = EEPROM.read(ADDRESS_4);

// Set up 5 channels
ZUNO_SETUP_CHANNELS(
ZUNO_SWITCH_BINARY(getterSwitch0, setterSwitch0),
ZUNO_SWITCH_BINARY(getterSwitch1, setterSwitch1),
ZUNO_SWITCH_BINARY(getterSwitch2, setterSwitch2),
ZUNO_SWITCH_BINARY(getterSwitch3, setterSwitch3),
ZUNO_SWITCH_BINARY(getterSwitch4, setterSwitch4)
);

boolean firstStart = true;

void setup() {
}

void loop() {
if (firstStart) {

pinMode(LedPin0, OUTPUT);
delay(10);
if (EEPROM.read(ADDRESS_0) == 1)
digitalWrite(LedPin0, LOW);
else
digitalWrite(LedPin0, HIGH);

pinMode(LedPin1, OUTPUT);
delay(10);
if (EEPROM.read(ADDRESS_1) == 1)
digitalWrite(LedPin1, LOW);
else
digitalWrite(LedPin1, HIGH);

pinMode(LedPin2, OUTPUT);
delay(10);
if (EEPROM.read(ADDRESS_2) == 1)
digitalWrite(LedPin2, LOW);
else
digitalWrite(LedPin2, HIGH);

pinMode(LedPin3, OUTPUT);
delay(10);
if (EEPROM.read(ADDRESS_3) == 1)
digitalWrite(LedPin3, LOW);
else
digitalWrite(LedPin3, HIGH);

pinMode(LedPin4, OUTPUT);
delay(10);
if (EEPROM.read(ADDRESS_4) == 1)
digitalWrite(LedPin4, LOW);
else
digitalWrite(LedPin4, HIGH);

}
firstStart = false;
}



void setterSwitch0(byte value) {
if (value > 0) {
digitalWrite(LedPin0, LOW);
if (EEPROM.read(ADDRESS_0) != 1)
EEPROM.write(ADDRESS_0, 1);
}
else {
digitalWrite(LedPin0, HIGH);
if (EEPROM.read(ADDRESS_0) != 0)
EEPROM.write(ADDRESS_0, 0);
}
switchValue0 = value;
}

byte getterSwitch0() {
return switchValue0;
}

void setterSwitch1(byte value) {
if (value > 0) {
digitalWrite(LedPin1, LOW);
if (EEPROM.read(ADDRESS_1) != 1)
EEPROM.write(ADDRESS_1, 1);
}
else {
digitalWrite(LedPin1, HIGH);
if (EEPROM.read(ADDRESS_1) != 0)
EEPROM.write(ADDRESS_1, 0);
}
switchValue1 = value;
}

byte getterSwitch1() {
return switchValue1;
}

void setterSwitch2(byte value) {
if (value > 0) {
digitalWrite(LedPin2, LOW);
if (EEPROM.read(ADDRESS_2) != 1)
EEPROM.write(ADDRESS_2, 1);
}
else {
digitalWrite(LedPin2, HIGH);
if (EEPROM.read(ADDRESS_2) != 0)
EEPROM.write(ADDRESS_2, 0);
}
switchValue2 = value;
}

byte getterSwitch2() {
return switchValue2;
}

void setterSwitch3(byte value) {
if (value > 0) {
digitalWrite(LedPin3, LOW);
if (EEPROM.read(ADDRESS_3) != 1)
EEPROM.write(ADDRESS_3, 1);
}
else {
digitalWrite(LedPin3, HIGH);
if (EEPROM.read(ADDRESS_3) != 0)
EEPROM.write(ADDRESS_3, 0);
}
switchValue3 = value;
}

byte getterSwitch3() {
return switchValue3;
}

void setterSwitch4(byte value) {
if (value > 0) {
digitalWrite(LedPin4, LOW);
if (EEPROM.read(ADDRESS_4) != 1)
EEPROM.write(ADDRESS_4, 1);
}
else {
digitalWrite(LedPin4, HIGH);
if (EEPROM.read(ADDRESS_4) != 0)
EEPROM.write(ADDRESS_4, 0);
}
switchValue4 = value;
}

byte getterSwitch4() {
return switchValue4;
}
Post Reply