Делаю мониторинг и управление двумя контрольными приборами сигнализации ГрандМагиср с помощью Z-Uno Shield.
По сути всё сводится к тому чтобы организовать:
1 два канала чтобы поставить\взять под охрану - сухой контакт, закрыть на 1 сек (по одному каналу на каждый ППК)
2 два пина как сенсор чтобы ловить alarm c каждого ППК
3 два пина чтобы отслеживать что прибор встал под охрану (например от внешней команды с кнопки) и находится в Armed state - признак - присутствует "-" на пине
Это мой первый проект на Z-Uno, пока не понимаю как организовать 3 пункт.
Скетч ниже. Пока такой.
Контроллер HC2 но с таким скетчем не вижу на нём состояние pin5 и pin6, которые планировал использовать под п.3 как раз.
Ещё неясно нужно ли делать виртуальное устройство на HC2 или всю логику нужно делать на Zuno ...
Прошу совета или где посмотреть подобный проект...
Code: Select all
// Global variables
byte pin3SensorBinaryState;
byte pin4SensorBinaryState;
byte pin5SensorBinaryState;
byte pin6SensorBinaryState;
byte pin12SensorBinaryState;
byte pin13SwitchBinaryState = 0;
byte pin14SwitchBinaryState = 0;
// Z-Wave channels
ZUNO_SETUP_CHANNELS(
ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_SMOKE, pin3SensorBinaryGetter),
ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_MOTION, pin4SensorBinaryGetter),
ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_GENERAL_PURPOSE, pin5SensorBinaryGetter),
ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_GENERAL_PURPOSE, pin6SensorBinaryGetter),
ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_WATER, pin12SensorBinaryGetter),
ZUNO_SWITCH_BINARY(pin13SwitchBinaryGetter, pin13SwitchBinarySetter),
ZUNO_SWITCH_BINARY(pin14SwitchBinaryGetter, pin14SwitchBinarySetter)
);
void setup() {
pinMode(3, INPUT_PULLUP);
pin3SensorBinaryState = !digitalRead(3);
pinMode(4, INPUT_PULLUP);
pin4SensorBinaryState = !digitalRead(4);
pinMode(5, INPUT_PULLUP);
pin5SensorBinaryState = !digitalRead(5);
pinMode(6, INPUT_PULLUP);
pin6SensorBinaryState = !digitalRead(6);
pinMode(12, INPUT);
pin12SensorBinaryState = !digitalRead(12);
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
}
void loop() {
byte _pin3SensorBinaryState = digitalRead(3);
if (pin3SensorBinaryState != _pin3SensorBinaryState) {
pin3SensorBinaryState = _pin3SensorBinaryState;
zunoSendReport(1);
}
byte _pin4SensorBinaryState = digitalRead(4);
if (pin4SensorBinaryState != _pin4SensorBinaryState) {
pin4SensorBinaryState = _pin4SensorBinaryState;
zunoSendReport(2);
}
byte _pin5SensorBinaryState = digitalRead(5);
if (pin5SensorBinaryState != _pin5SensorBinaryState) {
pin5SensorBinaryState = _pin5SensorBinaryState;
zunoSendReport(3);
}
byte _pin6SensorBinaryState = digitalRead(6);
if (pin6SensorBinaryState != _pin6SensorBinaryState) {
pin6SensorBinaryState = _pin6SensorBinaryState;
zunoSendReport(4);
}
byte _pin12SensorBinaryState = digitalRead(12);
if (pin12SensorBinaryState != _pin12SensorBinaryState) {
pin12SensorBinaryState = _pin12SensorBinaryState;
zunoSendReport(5);
}
digitalWrite(13, pin13SwitchBinaryState ? HIGH : LOW);
digitalWrite(14, pin14SwitchBinaryState ? HIGH : LOW);
delay(20);
}
// Getters and setters
byte pin3SensorBinaryGetter() {
return pin3SensorBinaryState;
}
byte pin4SensorBinaryGetter() {
return pin4SensorBinaryState;
}
byte pin5SensorBinaryGetter() {
return pin5SensorBinaryState;
}
byte pin6SensorBinaryGetter() {
return pin6SensorBinaryState;
}
byte pin12SensorBinaryGetter() {
return pin12SensorBinaryState;
}
void pin13SwitchBinarySetter(byte value) {
pin13SwitchBinaryState = value;
}
byte pin13SwitchBinaryGetter() {
return pin13SwitchBinaryState;
}
void pin14SwitchBinarySetter(byte value) {
pin14SwitchBinaryState = value;
}
byte pin14SwitchBinaryGetter() {
return pin14SwitchBinaryState;
}