Witam
Nie dawno zainteresował się tematem inteligentnego domu i w nowym domu wstawiłem rolety zewnętrzne z silnikami 230V do puszek elektrycznych mam poprowadzony kabel utp.
Napisałem program na podstawie maysensors i niby miało śmigać bez problemów, niestety tak nie było. podczas uruchomienia 1 rolety działało wszytko ok. roleta podnosiła się i opuszczała z przycisku i sterowana z Domoticza. 2 roleta działała z przycisku ale gdy starałem się sterować z domoticza to podnosiła się 1 i 2 . Po uruchomieniu trzeciej działała tylko po wysterowaniu z domoticza arduino nie reaguje na przycisk choć jest poprawnie podłączony. Teraz jestem w kropce :
1. czemu nie mogę sterować tylko pojedynczą roletą z domoticza ?
2. czemu adruino nie reaguje na kolejne przyciski ?
Zakładana specyfika pracy rolet :
1. Sterowanie każdej rolety z przycisku rolety mam tych rolet 9
2. Sterowanie każdej rolety z osobna jak i wszystkimi razem z domoticza.
3. Ustawić plan dla wszystkich rolet
3 . W przyszłości sterowanie roletami z domoticza procentowo.
Proszę o radę czy z moim kodem jest wszystko ok i jak go mogę poprawć aby to działało.
#define MY_DEBUG
#define MY_GATEWAY_SERIAL
#define MY_REPEATER_FEATURE
//#include MY_NODE_ID 1
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
//--------------Roleta 1-------------------------
#define BUTTON_PIN 4
#define RELAY_1 5
#define BUTTON_PIN2 6
#define RELAY_2 7
//--------------Roleta 2-------------------------
#define BUTTON_PIN3 8
#define RELAY_3 9
#define BUTTON_PIN4 10
#define RELAY_4 11
//--------------Roleta 3-------------------------
#define BUTTON_PIN5 12
#define RELAY_5 13
#define BUTTON_PIN6 14
#define RELAY_6 15
//--------------Roleta 4-------------------------
#define BUTTON_PIN7 16
#define RELAY_7 17
#define BUTTON_PIN8 18
#define RELAY_8 19
//--------------Roleta 5-------------------------
#define BUTTON_PIN9 20
#define RELAY_9 21
#define BUTTON_PIN10 22
#define RELAY_10 23
//--------------Roleta 6-------------------------
#define BUTTON_PIN11 24
#define RELAY_11 25
#define BUTTON_PIN12 26
#define RELAY_12 27
//--------------Roleta 7-------------------------
#define BUTTON_PIN13 28
#define RELAY_13 29
#define BUTTON_PIN14 30
#define RELAY_14 31
//--------------Roleta 8-------------------------
#define BUTTON_PIN15 32
#define RELAY_15 33
#define BUTTON_PIN16 34
#define RELAY_16 35
//--------------Roleta 9-------------------------
#define BUTTON_PIN17 36
#define RELAY_17 37
#define BUTTON_PIN18 38
#define RELAY_18 39
//----------------------------------------------------------------
#define RELAY_ON 0
#define RELAY_OFF 1
// Inicjalizacja obiektu Bounce
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();
Bounce debouncer10 = Bounce();
Bounce debouncer11 = Bounce();
Bounce debouncer12 = Bounce();
Bounce debouncer13 = Bounce();
Bounce debouncer14 = Bounce();
Bounce debouncer15 = Bounce();
Bounce debouncer16 = Bounce();
Bounce debouncer17 = Bounce();
Bounce debouncer18 = Bounce();
void before() {
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
pinMode(RELAY_3, OUTPUT);
pinMode(RELAY_4, OUTPUT);
pinMode(RELAY_5, OUTPUT);
pinMode(RELAY_6, OUTPUT);
pinMode(RELAY_7, OUTPUT);
pinMode(RELAY_8, OUTPUT);
pinMode(RELAY_9, OUTPUT);
pinMode(RELAY_10, OUTPUT);
pinMode(RELAY_11, OUTPUT);
pinMode(RELAY_12, OUTPUT);
pinMode(RELAY_13, OUTPUT);
pinMode(RELAY_14, OUTPUT);
pinMode(RELAY_15, OUTPUT);
pinMode(RELAY_16, OUTPUT);
pinMode(RELAY_17, OUTPUT);
pinMode(RELAY_18, OUTPUT);
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, HIGH);
digitalWrite(RELAY_3, HIGH);
digitalWrite(RELAY_4, HIGH);
digitalWrite(RELAY_5, HIGH);
digitalWrite(RELAY_6, HIGH);
digitalWrite(RELAY_7, HIGH);
digitalWrite(RELAY_8, HIGH);
digitalWrite(RELAY_9, HIGH);
digitalWrite(RELAY_10, HIGH);
digitalWrite(RELAY_11, HIGH);
digitalWrite(RELAY_12, HIGH);
digitalWrite(RELAY_13, HIGH);
digitalWrite(RELAY_14, HIGH);
digitalWrite(RELAY_15, HIGH);
digitalWrite(RELAY_16, HIGH);
digitalWrite(RELAY_17, HIGH);
digitalWrite(RELAY_18, HIGH);
}
void setup() {
// Konfiguracja pinu przycisku i aktywowanie rezystora podciągającego:
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUTTON_PIN2, INPUT_PULLUP);
pinMode(BUTTON_PIN3, INPUT_PULLUP);
pinMode(BUTTON_PIN4, INPUT_PULLUP);
pinMode(BUTTON_PIN5, INPUT_PULLUP);
pinMode(BUTTON_PIN6, INPUT_PULLUP);
pinMode(BUTTON_PIN7, INPUT_PULLUP);
pinMode(BUTTON_PIN8, INPUT_PULLUP);
pinMode(BUTTON_PIN9, INPUT_PULLUP);
pinMode(BUTTON_PIN10, INPUT_PULLUP);
pinMode(BUTTON_PIN11, INPUT_PULLUP);
pinMode(BUTTON_PIN12, INPUT_PULLUP);
pinMode(BUTTON_PIN13, INPUT_PULLUP);
pinMode(BUTTON_PIN14, INPUT_PULLUP);
pinMode(BUTTON_PIN15, INPUT_PULLUP);
pinMode(BUTTON_PIN16, INPUT_PULLUP);
pinMode(BUTTON_PIN17, INPUT_PULLUP);
pinMode(BUTTON_PIN18, INPUT_PULLUP);
// Po konfiguracji przycisku, ustawienie działania funkcji Bounce :
debouncer.attach(BUTTON_PIN);
debouncer.interval(5); // interwał w ms
debouncer2.attach(BUTTON_PIN2);
debouncer2.interval(5);
debouncer3.attach(BUTTON_PIN3);
debouncer3.interval(5); // interwał w ms
debouncer4.attach(BUTTON_PIN4);
debouncer4.interval(5);
debouncer5.attach(BUTTON_PIN5);
debouncer5.interval(5);
debouncer6.attach(BUTTON_PIN6);
debouncer6.interval(5);
debouncer7.attach(BUTTON_PIN7);
debouncer7.interval(5);
debouncer8.attach(BUTTON_PIN8);
debouncer8.interval(5);
debouncer9.attach(BUTTON_PIN9);
debouncer9.interval(5);
debouncer10.attach(BUTTON_PIN10);
debouncer10.interval(5);
debouncer11.attach(BUTTON_PIN11);
debouncer11.interval(5);
debouncer12.attach(BUTTON_PIN12);
debouncer12.interval(5);
debouncer13.attach(BUTTON_PIN13);
debouncer13.interval(5);
debouncer14.attach(BUTTON_PIN14);
debouncer14.interval(5);
debouncer15.attach(BUTTON_PIN15);
debouncer15.interval(5);
debouncer16.attach(BUTTON_PIN16);
debouncer16.interval(5);
debouncer17.attach(BUTTON_PIN17);
debouncer17.interval(5);
debouncer18.attach(BUTTON_PIN18);
debouncer18.interval(5);
}
void presentation()
{
sendSketchInfo("Roller shutter", "1.0");
int sensor = 1;
present(sensor, S_COVER);
int sensor2 = 2 ;
present(sensor2, S_COVER);
int sensor3 = 3 ;
present(sensor3, S_COVER);
int sensor4 = 4 ;
present(sensor4, S_COVER);
int sensor5 = 5 ;
present(sensor5, S_COVER);
int sensor6 = 6 ;
present(sensor6, S_COVER);
int sensor7 = 7 ;
present(sensor7, S_COVER);
int sensor8 = 8 ;
present(sensor8, S_COVER);
int sensor9 = 9 ;
present(sensor9, S_COVER);
int sensor10 = 10 ;
present(sensor10, S_COVER);
int sensor11 = 11 ;
present(sensor11, S_COVER);
int sensor12 = 12 ;
present(sensor12, S_COVER);
int sensor13 = 13 ;
present(sensor13, S_COVER);
int sensor14 = 14 ;
present(sensor14, S_COVER);
int sensor15 = 15 ;
present(sensor15, S_COVER);
int sensor16 = 16 ;
present(sensor16, S_COVER);
int sensor17 = 17 ;
present(sensor17, S_COVER);
int sensor18 = 18 ;
present(sensor18, S_COVER);
}
MyMessage msg(1, V_LIGHT);
MyMessage msg2(2, V_LIGHT);
MyMessage msg3(3, V_LIGHT);
MyMessage msg4(4, V_LIGHT);
MyMessage msg5(5, V_LIGHT);
MyMessage msg6(6, V_LIGHT);
MyMessage msg7(7, V_LIGHT);
MyMessage msg8(8, V_LIGHT);
MyMessage msg9(9, V_LIGHT);
MyMessage msg10(10, V_LIGHT);
MyMessage msg11(11, V_LIGHT);
MyMessage msg12(12, V_LIGHT);
MyMessage msg13(13, V_LIGHT);
MyMessage msg14(14, V_LIGHT);
MyMessage msg15(15, V_LIGHT);
MyMessage msg16(16, V_LIGHT);
MyMessage msg17(17, V_LIGHT);
MyMessage msg18(18, V_LIGHT);
void loop() {
// debouncer.update();
//debouncer2.update();
// debouncer3.update();
//debouncer4.update();
//-----------------------------------------------------------------
if (debouncer.update()) {
int value = debouncer.read();
if (value == HIGH) {
saveState(1, !loadState(1));
digitalWrite(RELAY_1, loadState(1) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_2, HIGH);
send(msg.set(loadState(1)));
}
}
if (debouncer2.update()) {
int value2 = debouncer2.read();
if (value2 == LOW) {
saveState(2, !loadState(2));
digitalWrite(RELAY_2, loadState(2) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_1, HIGH);
send(msg.set(loadState(2)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer3.update()) {
// Get the update value.
int value3 = debouncer3.read();
// Send in the new value.
if (value3 == LOW) {
saveState(3, !loadState(3));
digitalWrite(RELAY_3, loadState(3) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_4, HIGH);
send(msg3.set(loadState(3)));
}
}
if (debouncer4.update()) {
int value4 = debouncer4.read();
if (value4 == LOW) {
saveState(4, !loadState(4));
digitalWrite(RELAY_4, loadState(4) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_3, HIGH);
send(msg4.set(loadState(4)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer5.update()) {
// Get the update value.
int value5 = debouncer5.read();
// Send in the new value.
if (value5 == LOW) {
saveState(5, !loadState(5));
digitalWrite(RELAY_5, loadState(5) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_6, HIGH);
send(msg5.set(loadState(5)));
}
}
if (debouncer6.update()) {
int value6 = debouncer6.read();
if (value6 == LOW) {
saveState(6, !loadState(6));
digitalWrite(RELAY_6, loadState(6) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_5, HIGH);
send(msg6.set(loadState(6)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer7.update()) {
// Get the update value.
int value7 = debouncer7.read();
// Send in the new value.
if (value7 == LOW) {
saveState(7, !loadState(7));
digitalWrite(RELAY_7, loadState(7) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_8, HIGH);
send(msg7.set(loadState(7)));
}
}
if (debouncer8.update()) {
int value8 = debouncer8.read();
if (value8 == LOW) {
saveState(8, !loadState(8));
digitalWrite(RELAY_8, loadState(8) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_7, HIGH);
send(msg8.set(loadState(8)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer9.update()) {
// Get the update value.
int value9 = debouncer9.read();
// Send in the new value.
if (value9 == LOW) {
saveState(9, !loadState(9));
digitalWrite(RELAY_9, loadState(9) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_10, HIGH);
send(msg9.set(loadState(9)));
}
}
if (debouncer10.update()) {
int value10 = debouncer10.read();
if (value10 == LOW) {
saveState(10, !loadState(10));
digitalWrite(RELAY_10, loadState(10) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_9, HIGH);
send(msg10.set(loadState(10)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer11.update()) {
// Get the update value.
int value11 = debouncer11.read();
// Send in the new value.
if (value11 == LOW) {
saveState(11, !loadState(11));
digitalWrite(RELAY_11, loadState(11) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_12, HIGH);
send(msg11.set(loadState(11)));
}
}
if (debouncer12.update()) {
int value12 = debouncer12.read();
if (value12 == LOW) {
saveState(12, !loadState(12));
digitalWrite(RELAY_12, loadState(12) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_11, HIGH);
send(msg12.set(loadState(12)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer13.update()) {
// Get the update value.
int value13 = debouncer13.read();
// Send in the new value.
if (value13 == LOW) {
saveState(13, !loadState(13));
digitalWrite(RELAY_13, loadState(13) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_14, HIGH);
send(msg13.set(loadState(13)));
}
}
if (debouncer14.update()) {
int value14 = debouncer14.read();
if (value14 == LOW) {
saveState(14, !loadState(14));
digitalWrite(RELAY_14, loadState(14) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_13, HIGH);
send(msg14.set(loadState(14)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer15.update()) {
// Get the update value.
int value15 = debouncer15.read();
// Send in the new value.
if (value15 == LOW) {
saveState(15, !loadState(15));
digitalWrite(RELAY_15, loadState(15) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_16, HIGH);
send(msg15.set(loadState(15)));
}
}
if (debouncer16.update()) {
int value16 = debouncer16.read();
if (value16 == LOW) {
saveState(16, !loadState(16));
digitalWrite(RELAY_16, loadState(16) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_15, HIGH);
send(msg16.set(loadState(16)));
}
}
//-----------------------------------------------------------------
// Send locally attached sensor data here
if (debouncer17.update()) {
// Get the update value.
int value17 = debouncer17.read();
// Send in the new value.
if (value17 == LOW) {
saveState(17, !loadState(17));
digitalWrite(RELAY_17, loadState(17) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_18, HIGH);
send(msg17.set(loadState(17)));
}
}
if (debouncer18.update()) {
int value18 = debouncer18.read();
if (value18 == LOW) {
saveState(18, !loadState(18));
digitalWrite(RELAY_18, loadState(18) ? RELAY_ON : RELAY_OFF);
digitalWrite(RELAY_17, HIGH);
send(msg18.set(loadState(18)));
}
}
}
void receive(const MyMessage &message) {
{
if (message.type == V_UP) {
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_2, HIGH);
digitalWrite(RELAY_1, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_3, HIGH);
digitalWrite(RELAY_4, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_3, HIGH);
digitalWrite(RELAY_4, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_4, HIGH);
digitalWrite(RELAY_3, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_5, HIGH);
digitalWrite(RELAY_6, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_5, HIGH);
digitalWrite(RELAY_6, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_6, HIGH);
digitalWrite(RELAY_5, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_7, HIGH);
digitalWrite(RELAY_8, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_7, HIGH);
digitalWrite(RELAY_8, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_8, HIGH);
digitalWrite(RELAY_7, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_9, HIGH);
digitalWrite(RELAY_10, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_9, HIGH);
digitalWrite(RELAY_10, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_10, HIGH);
digitalWrite(RELAY_9, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_11, HIGH);
digitalWrite(RELAY_12, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_11, HIGH);
digitalWrite(RELAY_12, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_12, HIGH);
digitalWrite(RELAY_11, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_13, HIGH);
digitalWrite(RELAY_14, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_13, HIGH);
digitalWrite(RELAY_14, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_14, HIGH);
digitalWrite(RELAY_13, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_15, HIGH);
digitalWrite(RELAY_16, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_15, HIGH);
digitalWrite(RELAY_16, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_16, HIGH);
digitalWrite(RELAY_15, LOW);
}
}
{
//----------------------------------------------------------
if (message.type == V_UP) {
digitalWrite(RELAY_17, HIGH);
digitalWrite(RELAY_18, LOW);
}
if (message.type == V_STOP ) {
digitalWrite(RELAY_17, HIGH);
digitalWrite(RELAY_18, HIGH);
}
if (message.type == V_DOWN) {
digitalWrite(RELAY_18, HIGH);
digitalWrite(RELAY_17, LOW);
}
}
}
Hmm
Całkiem podobny skrypt do tego, który tworzyłem jakiś czas temu. Kilka dni temu sam chciałem go zastosować u siebie w domu i jakoś nie wyszło. Pewnie nie wyłapałem błędów wcześniej bo testowałem wszystko na jednej rolecie. A w domu już ich jest 24. Na dzień dzisiejszy nie wiem gdzie jest błąd bo nie jestem programistą ale jest kilka nie logicznych rzeczy w skrypcie.
1. Jeżeli przycisk wciśniemy to zapamięta on jego stan ( powinno być raczej high niż low) i przełączy przekaźnik. Za pierwszym razem da na przekaźnik napięcie. Za drugim naciśnięciem znowu Arduino wykryje stan wysoki na przycisku ale na przekaźnik nie popłynie napięcie bo zmieni jego stan.
2. W tej samej części kodu jeśli roleta na być za sterowana do góry to drugi przekaźnik musi być wyłączony dlatego jest relay2 = high ( lepiej było wpisać low wtedy wiemy że chodzi o jego wyłączenie)
3. Jeżeli naciśniesz przycisk opuszczania to Arduino wykryje stan wysoki i wykona na przekaźniku opuszczania stan ??? odwrotny do tego, który był na początku ?
Problem jest w tym, że on ma w pamięci stanu, który zapamiętał z pierwszego wciśnięcia przycisku.
Ta opcja z drugim przekaźnikiem miała zabezpieczać roletę przed jednoczesnym za sterowaniem góra, dół.
Lepsze było by uzależnienie
#define MY_DEBUG
#define MY_GATEWAY_SERIAL
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
//--------------Roleta w kuchni duże okno-------------------------
#define ROLETA_1_CHILD 1
#define BUTTON_PIN A1
#define BUTTON_PIN2 A2
#define RELAY_1 2
#define RELAY_2 5
bool state = false;
bool initialValueSent = false;
int poprzedni_stan_RELAY_1 = LOW;
int poprzedni_stan_RELAY_2 = LOW;
int stan_RELAY_1 = LOW;
int stan_RELAY_2 = LOW;
//----------------------------------------------------------------
// Inicjalizacja obiektu Bounce
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();
void before() {
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
;
digitalWrite(RELAY_1,LOW);
digitalWrite(RELAY_2,LOW);
}
void setup() {
// Konfiguracja pinu przycisku i aktywowanie rezystora podciągającego:
pinMode(BUTTON_PIN,INPUT_PULLUP);
pinMode(BUTTON_PIN2,INPUT_PULLUP);
// Po konfiguracji przycisku, ustawienie działania funkcji Bounce :
debouncer.attach(BUTTON_PIN);
debouncer.interval(20);
debouncer2.attach(BUTTON_PIN2);
debouncer2.interval(20);
}
void presentation()
{
sendSketchInfo("Rolety parter", "1.0");
present(ROLETA_1_CHILD, S_BINARY);
}
MyMessage msg(ROLETA_1_CHILD, V_STATUS);
MyMessage msg2(ROLETA_1_CHILD, V_STATUS);
void loop() {
//--------------Roleta w kuchni duże okno-------------------------
if (debouncer.update()) {
int value = debouncer.read();
if(value == HIGH && poprzedni_stan_RELAY_1 == LOW && stan_RELAY_2 == LOW){
if(stan_RELAY_1 == HIGH){
stan_RELAY_1 = LOW;
} else {
stan_RELAY_1 = HIGH;
}}
digitalWrite(RELAY_1, stan_RELAY_1);
poprzedni_stan_RELAY_1 == value;
send(msg.set(stan_RELAY_1), true);
}
if (debouncer2.update()) {
int value2 = debouncer2.read();
if(value2 == HIGH && poprzedni_stan_RELAY_2 == LOW && stan_RELAY_1 == LOW){
if(stan_RELAY_2 == HIGH){
stan_RELAY_2 = LOW;
} else {
stan_RELAY_2 = HIGH;
}}
digitalWrite(RELAY_2, stan_RELAY_2);
poprzedni_stan_RELAY_2 == value2;
send(msg2.set(stan_RELAY_2), true);
}
}
void receive(const MyMessage &message) {
//--------------Roleta w kuchni duże okno-------------------------
{
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, LOW);
}
}
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_1, LOW);
digitalWrite(RELAY_2, LOW);
}
}
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_2, HIGH);
digitalWrite(RELAY_1, LOW);
}
}
}
}
Nie sprawdzałem tego pod domoticzem. Na przekaźnikach jest dobrze zabezpieczone jednoczesne załączenie góra, dół. Daj znać czy domoticz to widzi bo ja szukam czegoś pod HA a tutaj jest problem innej natury.
pozdro
Cześć, jak chcesz to mam gotowy skrypt do obsługi rolet przez MySensors. U mnie sterowanie odbywa się przy użyciu włączników zwiernych do rolet i zwykłych przekaźników SSR (2 szt. na jedną roletę). Mam 6 rolet. Pomimo, że skrypt ma zaimplementowaną obsługę % to niestety w domoticzu to nie działa. Skrypt nie jest mojego auotrstwa, lecz natrafiłem na niego w internecie 🙂
W szkicu oprócz rolet mam też zrobioną obsługę włączników schodowych i dzwonka. Dużo zabawy byłoby z kasowaniem tego więc wrzucam całość. Może przy okazji ktoś wyłapie dlaczego procentowe sterowanie nie działa w Domoticzu, z tego co kojarzę to szkic pisany był pod Home Assitant.
Trochę odświeżę temat. Wklejam szkic do sterowania roletami, którego używam od roku. Sterowanie z poziomu domoticza działa bez zarzutu. Do sterowania mechanicznego używam przycisków dzwonkowych góra/dół (bez przycisku stop). Czasami trzeba nacisnąć dwa razy przycisk w danym kierunku, żeby roleta ruszyła. Rozumiem, że jest to spowodowane jakimś stanem, który został w pamięci np. z poprzedniej komendy z poziomu domoticza. Inna niedoróbka to taka, że jeżeli zasterujemy przyciskiem np. w górę to tylko przyciskiem w górę zatrzymamy roletę. Jeżeli, ktoś jest na tyle biegły w pisaniu programów i może naprawić te błędy to będzie dla przyszłych pokoleń.
#define MY_DEBUG
#define MY_GATEWAY_SERIAL
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
//--------------Roleta w kuchni duże okno-------------------------
#define ROLETA_1_CHILD 1
#define BUTTON_PIN A1
#define BUTTON_PIN2 A2
#define RELAY_1 2
#define RELAY_2 3
//--------------Roleta w kuchni małe okno-------------------------
#define ROLETA_2_CHILD 2
#define BUTTON_PIN3 A3
#define BUTTON_PIN4 A4
#define RELAY_3 4
#define RELAY_4 5
//--------------Roleta w jadalni duże okno------------------------
#define ROLETA_3_CHILD 3
#define BUTTON_PIN5 A5
#define BUTTON_PIN6 A6
#define RELAY_5 6
#define RELAY_6 7
//--------------Roleta w jadalni małe okno------------------------
#define ROLETA_4_CHILD 4
#define BUTTON_PIN7 A7
#define BUTTON_PIN8 A8
#define RELAY_7 8
#define RELAY_8 9
//--------------Roleta w dużym pokoju duże okno od frontu---------
#define ROLETA_5_CHILD 5
#define BUTTON_PIN9 A9
#define BUTTON_PIN10 A10
#define RELAY_9 10
#define RELAY_10 11
//--------------Roleta w dużym pokoju małe okno od frontu---------
#define ROLETA_6_CHILD 6
#define BUTTON_PIN11 A11
#define BUTTON_PIN12 A12
#define RELAY_11 12
#define RELAY_12 13
//--------------Roleta w dużym pokoju małe okno od strony ogrodu--
#define ROLETA_7_CHILD 7
#define BUTTON_PIN13 A13
#define BUTTON_PIN14 A14
#define RELAY_13 14
#define RELAY_14 15
//--------------Roleta w dużym pokoju drzwi tarasowe--------------
#define ROLETA_8_CHILD 8
#define BUTTON_PIN15 A15
#define BUTTON_PIN16 52
#define RELAY_15 16
#define RELAY_16 17
//--------------Roleta w gabinecie drzwi tarasowe-----------------
#define ROLETA_9_CHILD 9
#define BUTTON_PIN17 51
#define BUTTON_PIN18 50
#define RELAY_17 18
#define RELAY_18 19
//--------------Roleta w gabinecie okno---------------------------
#define ROLETA_10_CHILD 10
#define BUTTON_PIN19 49
#define BUTTON_PIN20 48
#define RELAY_19 20
#define RELAY_20 21
//--------------Roleta w łazience na parterze---------------------
#define ROLETA_11_CHILD 11
#define BUTTON_PIN21 47
#define BUTTON_PIN22 46
#define RELAY_21 22
#define RELAY_22 23
//--------------Roleta w pomieszczeniu gospodarczym---------------
#define ROLETA_12_CHILD 12
#define BUTTON_PIN23 45
#define BUTTON_PIN24 44
#define RELAY_23 24
#define RELAY_24 25
//--------------Roleta w garażu-----------------------------------
#define ROLETA_13_CHILD 13
#define BUTTON_PIN25 43
#define BUTTON_PIN26 42
#define RELAY_25 26
#define RELAY_26 27
//--------------Brama garażowa------------------------------------
#define ROLETA_14_CHILD 14
#define BUTTON_PIN27 41
#define BUTTON_PIN28 40
#define RELAY_27 28
#define RELAY_28 29
//----------------------------------------------------------------
#define RELAY_ON 1
#define RELAY_OFF 0
//----------------------------------------------------------------
// Inicjalizacja obiektu Bounce
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();
Bounce debouncer10 = Bounce();
Bounce debouncer11 = Bounce();
Bounce debouncer12 = Bounce();
Bounce debouncer13 = Bounce();
Bounce debouncer14 = Bounce();
Bounce debouncer15 = Bounce();
Bounce debouncer16 = Bounce();
Bounce debouncer17 = Bounce();
Bounce debouncer18 = Bounce();
Bounce debouncer19 = Bounce();
Bounce debouncer20 = Bounce();
Bounce debouncer21 = Bounce();
Bounce debouncer22 = Bounce();
Bounce debouncer23 = Bounce();
Bounce debouncer24 = Bounce();
Bounce debouncer25 = Bounce();
Bounce debouncer26 = Bounce();
Bounce debouncer27 = Bounce();
Bounce debouncer28 = Bounce();
void before() {
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
pinMode(RELAY_3, OUTPUT);
pinMode(RELAY_4, OUTPUT);
pinMode(RELAY_5, OUTPUT);
pinMode(RELAY_6, OUTPUT);
pinMode(RELAY_7, OUTPUT);
pinMode(RELAY_8, OUTPUT);
pinMode(RELAY_9, OUTPUT);
pinMode(RELAY_10, OUTPUT);
pinMode(RELAY_11, OUTPUT);
pinMode(RELAY_12, OUTPUT);
pinMode(RELAY_13, OUTPUT);
pinMode(RELAY_14, OUTPUT);
pinMode(RELAY_15, OUTPUT);
pinMode(RELAY_16, OUTPUT);
pinMode(RELAY_17, OUTPUT);
pinMode(RELAY_18, OUTPUT);
pinMode(RELAY_19, OUTPUT);
pinMode(RELAY_20, OUTPUT);
pinMode(RELAY_21, OUTPUT);
pinMode(RELAY_22, OUTPUT);
pinMode(RELAY_23, OUTPUT);
pinMode(RELAY_24, OUTPUT);
pinMode(RELAY_25, OUTPUT);
pinMode(RELAY_26, OUTPUT);
pinMode(RELAY_27, OUTPUT);
pinMode(RELAY_28, OUTPUT);
digitalWrite(RELAY_1,LOW);
digitalWrite(RELAY_2,LOW);
digitalWrite(RELAY_3,LOW);
digitalWrite(RELAY_4,LOW);
digitalWrite(RELAY_5,LOW);
digitalWrite(RELAY_6,LOW);
digitalWrite(RELAY_7,LOW);
digitalWrite(RELAY_8,LOW);
digitalWrite(RELAY_9,LOW);
digitalWrite(RELAY_10,LOW);
digitalWrite(RELAY_11,LOW);
digitalWrite(RELAY_12,LOW);
digitalWrite(RELAY_13,LOW);
digitalWrite(RELAY_14,LOW);
digitalWrite(RELAY_15,LOW);
digitalWrite(RELAY_16,LOW);
digitalWrite(RELAY_17,LOW);
digitalWrite(RELAY_18,LOW);
digitalWrite(RELAY_19,LOW);
digitalWrite(RELAY_20,LOW);
digitalWrite(RELAY_21,LOW);
digitalWrite(RELAY_22,LOW);
digitalWrite(RELAY_23,LOW);
digitalWrite(RELAY_24,LOW);
digitalWrite(RELAY_25,LOW);
digitalWrite(RELAY_26,LOW);
digitalWrite(RELAY_27,LOW);
digitalWrite(RELAY_28,LOW);
}
void setup() {
// Konfiguracja pinu przycisku i aktywowanie rezystora podciągającego:
pinMode(BUTTON_PIN,INPUT_PULLUP);
pinMode(BUTTON_PIN2,INPUT_PULLUP);
pinMode(BUTTON_PIN3,INPUT_PULLUP);
pinMode(BUTTON_PIN4,INPUT_PULLUP);
pinMode(BUTTON_PIN5,INPUT_PULLUP);
pinMode(BUTTON_PIN6,INPUT_PULLUP);
pinMode(BUTTON_PIN7,INPUT_PULLUP);
pinMode(BUTTON_PIN8,INPUT_PULLUP);
pinMode(BUTTON_PIN9,INPUT_PULLUP);
pinMode(BUTTON_PIN10,INPUT_PULLUP);
pinMode(BUTTON_PIN11,INPUT_PULLUP);
pinMode(BUTTON_PIN12,INPUT_PULLUP);
pinMode(BUTTON_PIN13,INPUT_PULLUP);
pinMode(BUTTON_PIN14,INPUT_PULLUP);
pinMode(BUTTON_PIN15,INPUT_PULLUP);
pinMode(BUTTON_PIN16,INPUT_PULLUP);
pinMode(BUTTON_PIN17,INPUT_PULLUP);
pinMode(BUTTON_PIN18,INPUT_PULLUP);
pinMode(BUTTON_PIN19,INPUT_PULLUP);
pinMode(BUTTON_PIN20,INPUT_PULLUP);
pinMode(BUTTON_PIN21,INPUT_PULLUP);
pinMode(BUTTON_PIN22,INPUT_PULLUP);
pinMode(BUTTON_PIN23,INPUT_PULLUP);
pinMode(BUTTON_PIN24,INPUT_PULLUP);
pinMode(BUTTON_PIN25,INPUT_PULLUP);
pinMode(BUTTON_PIN26,INPUT_PULLUP);
pinMode(BUTTON_PIN27,INPUT_PULLUP);
pinMode(BUTTON_PIN28,INPUT_PULLUP);
// Po konfiguracji przycisku, ustawienie działania funkcji Bounce :
debouncer.attach(BUTTON_PIN);
debouncer.interval(5);
debouncer2.attach(BUTTON_PIN2);
debouncer2.interval(5);
debouncer3.attach(BUTTON_PIN3);
debouncer3.interval(5);
debouncer4.attach(BUTTON_PIN4);
debouncer4.interval(5);
debouncer5.attach(BUTTON_PIN5);
debouncer5.interval(5);
debouncer6.attach(BUTTON_PIN6);
debouncer6.interval(5);
debouncer7.attach(BUTTON_PIN7);
debouncer7.interval(5);
debouncer8.attach(BUTTON_PIN8);
debouncer8.interval(5);
debouncer9.attach(BUTTON_PIN9);
debouncer9.interval(5);
debouncer10.attach(BUTTON_PIN10);
debouncer10.interval(5);
debouncer11.attach(BUTTON_PIN11);
debouncer11.interval(5);
debouncer12.attach(BUTTON_PIN12);
debouncer12.interval(5);
debouncer13.attach(BUTTON_PIN13);
debouncer13.interval(5);
debouncer14.attach(BUTTON_PIN14);
debouncer14.interval(5);
debouncer15.attach(BUTTON_PIN15);
debouncer15.interval(5);
debouncer16.attach(BUTTON_PIN16);
debouncer16.interval(5);
debouncer17.attach(BUTTON_PIN17);
debouncer17.interval(5);
debouncer18.attach(BUTTON_PIN18);
debouncer18.interval(5);
debouncer19.attach(BUTTON_PIN19);
debouncer19.interval(5);
debouncer20.attach(BUTTON_PIN20);
debouncer20.interval(5);
debouncer21.attach(BUTTON_PIN21);
debouncer21.interval(5);
debouncer22.attach(BUTTON_PIN22);
debouncer22.interval(5);
debouncer23.attach(BUTTON_PIN23);
debouncer23.interval(5);
debouncer24.attach(BUTTON_PIN24);
debouncer24.interval(5);
debouncer25.attach(BUTTON_PIN25);
debouncer25.interval(5);
debouncer26.attach(BUTTON_PIN26);
debouncer26.interval(5);
debouncer27.attach(BUTTON_PIN27);
debouncer27.interval(5);
debouncer28.attach(BUTTON_PIN28);
debouncer28.interval(5);
}
void presentation()
{
sendSketchInfo("Rolety parter", "1.0");
present(ROLETA_1_CHILD, S_COVER);
present(ROLETA_2_CHILD, S_COVER);
present(ROLETA_3_CHILD, S_COVER);
present(ROLETA_4_CHILD, S_COVER);
present(ROLETA_5_CHILD, S_COVER);
present(ROLETA_6_CHILD, S_COVER);
present(ROLETA_7_CHILD, S_COVER);
present(ROLETA_8_CHILD, S_COVER);
present(ROLETA_9_CHILD, S_COVER);
present(ROLETA_10_CHILD, S_COVER);
present(ROLETA_11_CHILD, S_COVER);
present(ROLETA_12_CHILD, S_COVER);
present(ROLETA_13_CHILD, S_COVER);
present(ROLETA_14_CHILD, S_COVER);
}
MyMessage msg(ROLETA_1_CHILD, V_UP);
MyMessage msg2(ROLETA_1_CHILD, V_DOWN);
MyMessage msg3(ROLETA_2_CHILD, V_UP);
MyMessage msg4(ROLETA_2_CHILD, V_DOWN);
MyMessage msg5(ROLETA_3_CHILD, V_UP);
MyMessage msg6(ROLETA_3_CHILD, V_DOWN);
MyMessage msg7(ROLETA_4_CHILD, V_UP);
MyMessage msg8(ROLETA_4_CHILD, V_DOWN);
MyMessage msg9(ROLETA_5_CHILD, V_UP);
MyMessage msg10(ROLETA_5_CHILD, V_DOWN);
MyMessage msg11(ROLETA_6_CHILD, V_UP);
MyMessage msg12(ROLETA_6_CHILD, V_DOWN);
MyMessage msg13(ROLETA_7_CHILD, V_UP);
MyMessage msg14(ROLETA_7_CHILD, V_DOWN);
MyMessage msg15(ROLETA_8_CHILD, V_UP);
MyMessage msg16(ROLETA_8_CHILD, V_DOWN);
MyMessage msg17(ROLETA_9_CHILD, V_UP);
MyMessage msg18(ROLETA_9_CHILD, V_DOWN);
MyMessage msg19(ROLETA_10_CHILD, V_UP);
MyMessage msg20(ROLETA_10_CHILD, V_DOWN);
MyMessage msg21(ROLETA_11_CHILD, V_UP);
MyMessage msg22(ROLETA_11_CHILD, V_DOWN);
MyMessage msg23(ROLETA_12_CHILD, V_UP);
MyMessage msg24(ROLETA_12_CHILD, V_DOWN);
MyMessage msg25(ROLETA_13_CHILD, V_UP);
MyMessage msg26(ROLETA_13_CHILD, V_DOWN);
MyMessage msg27(ROLETA_14_CHILD, V_UP);
MyMessage msg28(ROLETA_14_CHILD, V_DOWN);
void loop() {
//--------------Roleta w kuchni duże okno-------------------------
if (debouncer.update()) {
int value = debouncer.read();
if((value == LOW) && (digitalRead(RELAY_2) == RELAY_OFF)){
saveState(1, !loadState(1));
digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
send(msg.set(loadState(1)));
}
}
if (debouncer2.update()) {
int value2 = debouncer2.read();
if((value2 == LOW) && (digitalRead(RELAY_1) == RELAY_OFF)){
saveState(2, !loadState(2));
digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
send(msg2.set(loadState(2)));
}
}
//--------------Roleta w kuchni małe okno-------------------------
// Send locally attached sensor data here
if (debouncer3.update()) {
// Get the update value.
int value3 = debouncer3.read();
// Send in the new value.
if((value3 == LOW) && (digitalRead(RELAY_4) == RELAY_OFF)){
saveState(3, !loadState(3));
digitalWrite(RELAY_3, loadState(3)?RELAY_ON:RELAY_OFF);
send(msg3.set(loadState(3)));
}
}
if (debouncer4.update()) {
int value4 = debouncer4.read();
if((value4 == LOW) && (digitalRead(RELAY_3) == RELAY_OFF)){
saveState(4, !loadState(4));
digitalWrite(RELAY_4, loadState(4)?RELAY_ON:RELAY_OFF);
send(msg4.set(loadState(4)));
}
}
//--------------Roleta w jadalni duże okno------------------------
if (debouncer5.update()) {
int value5 = debouncer5.read();
if((value5 == LOW && (digitalRead(RELAY_6) == RELAY_OFF))){
saveState(5, !loadState(5));
digitalWrite(RELAY_5, loadState(5)?RELAY_ON:RELAY_OFF);
send(msg5.set(loadState(5)));
}
}
if (debouncer6.update()) {
int value6 = debouncer6.read();
if((value6 == LOW) && (digitalRead(RELAY_5) == RELAY_OFF)){
saveState(6, !loadState(6));
digitalWrite(RELAY_6, loadState(6)?RELAY_ON:RELAY_OFF);
send(msg6.set(loadState(6)));
}
}
//--------------Roleta w jadalni małe okno------------------------
if (debouncer7.update()) {
int value7 = debouncer7.read();
if((value7 == LOW) && (digitalRead(RELAY_8) == RELAY_OFF)){
saveState(7, !loadState(7));
digitalWrite(RELAY_7, loadState(7)?RELAY_ON:RELAY_OFF);
send(msg7.set(loadState(7)));
}
}
if (debouncer8.update()) {
int value8 = debouncer8.read();
if((value8 == LOW) && (digitalRead(RELAY_7) == RELAY_OFF)){
saveState(8, !loadState(8));
digitalWrite(RELAY_8, loadState(8)?RELAY_ON:RELAY_OFF);
send(msg8.set(loadState(8)));
}
}
//--------------Roleta w dużym pokoju duże okno od frontu---------
if (debouncer9.update()) {
int value9 = debouncer9.read();
if((value9 == LOW) && (digitalRead(RELAY_10) == RELAY_OFF)){
saveState(9, !loadState(9));
digitalWrite(RELAY_9, loadState(9)?RELAY_ON:RELAY_OFF);
send(msg9.set(loadState(9)));
}
}
if (debouncer10.update()) {
int value10 = debouncer10.read();
if((value10 == LOW) && (digitalRead(RELAY_9) == RELAY_OFF)){
saveState(10, !loadState(10));
digitalWrite(RELAY_10, loadState(10)?RELAY_ON:RELAY_OFF);
send(msg10.set(loadState(10)));
}
}
//--------------Roleta w dużym pokoju małe okno od frontu---------
if (debouncer11.update()) {
int value11 = debouncer11.read();
if((value11 == LOW) && (digitalRead(RELAY_12) == RELAY_OFF)){
saveState(11, !loadState(11));
digitalWrite(RELAY_11, loadState(11)?RELAY_ON:RELAY_OFF);
send(msg11.set(loadState(11)));
}
}
if (debouncer12.update()) {
int value12 = debouncer12.read();
if((value12 == LOW) && (digitalRead(RELAY_11) == RELAY_OFF)){
saveState(12, !loadState(12));
digitalWrite(RELAY_12, loadState(12)?RELAY_ON:RELAY_OFF);
send(msg12.set(loadState(12)));
}
}
//--------------Roleta w dużym pokoju małe okno od strony ogrodu--
if (debouncer13.update()) {
int value13 = debouncer13.read();
if((value13 == LOW) && (digitalRead(RELAY_14) == RELAY_OFF)){
saveState(13, !loadState(13));
digitalWrite(RELAY_13, loadState(13)?RELAY_ON:RELAY_OFF);
send(msg13.set(loadState(13)));
}
}
if (debouncer14.update()) {
int value14 = debouncer14.read();
if((value14 == LOW) && (digitalRead(RELAY_13) == RELAY_OFF)){
saveState(14, !loadState(14));
digitalWrite(RELAY_14, loadState(14)?RELAY_ON:RELAY_OFF);
send(msg14.set(loadState(14)));
}
}
//--------------Roleta w dużym pokoju drzwi tarasowe--------------
if (debouncer15.update()) {
int value15 = debouncer15.read();
if((value15 == LOW) && (digitalRead(RELAY_16) == RELAY_OFF)){
saveState(15, !loadState(15));
digitalWrite(RELAY_15, loadState(15)?RELAY_ON:RELAY_OFF);
send(msg15.set(loadState(15)));
}
}
if (debouncer16.update()) {
int value16 = debouncer16.read();
if((value16 == LOW) && (digitalRead(RELAY_15) == RELAY_OFF)){
saveState(16, !loadState(16));
digitalWrite(RELAY_16, loadState(16)?RELAY_ON:RELAY_OFF);
send(msg16.set(loadState(16)));
}
}
//--------------Roleta w gabinecie drzwi tarasowe-----------------
if (debouncer17.update()) {
int value17 = debouncer17.read();
if((value17 == LOW) && (digitalRead(RELAY_18) == RELAY_OFF)){
saveState(17, !loadState(17));
digitalWrite(RELAY_17, loadState(17)?RELAY_ON:RELAY_OFF);
send(msg17.set(loadState(17)));
}
}
if (debouncer18.update()) {
int value18 = debouncer18.read();
if((value18 == LOW) && (digitalRead(RELAY_17) == RELAY_OFF)){
saveState(18, !loadState(18));
digitalWrite(RELAY_18, loadState(18)?RELAY_ON:RELAY_OFF);
send(msg18.set(loadState(18)));
}
}
//--------------Roleta w gabinecie okno---------------------------
if (debouncer19.update()) {
int value19 = debouncer19.read();
if((value19 == LOW) && (digitalRead(RELAY_20) == RELAY_OFF)){
saveState(19, !loadState(19));
digitalWrite(RELAY_19, loadState(19)?RELAY_ON:RELAY_OFF);
send(msg19.set(loadState(19)));
}
}
if (debouncer20.update()) {
int value20 = debouncer20.read();
if((value20 == LOW) && (digitalRead(RELAY_19) == RELAY_OFF)){
saveState(20, !loadState(20));
digitalWrite(RELAY_20, loadState(20)?RELAY_ON:RELAY_OFF);
send(msg20.set(loadState(20)));
}
}
//--------------Roleta w łazience na parterze---------------------
if (debouncer21.update()) {
int value21 = debouncer21.read();
if((value21 == LOW) && (digitalRead(RELAY_22) == RELAY_OFF)){
saveState(21, !loadState(21));
digitalWrite(RELAY_21, loadState(21)?RELAY_ON:RELAY_OFF);
send(msg21.set(loadState(21)));
}
}
if (debouncer22.update()) {
int value22 = debouncer22.read();
if((value22 == LOW) && (digitalRead(RELAY_21) == RELAY_OFF)){
saveState(22, !loadState(22));
digitalWrite(RELAY_22, loadState(22)?RELAY_ON:RELAY_OFF);
send(msg22.set(loadState(22)));
}
}
//--------------Roleta w pomieszczeniu gospodarczym---------------
if (debouncer23.update()) {
int value23 = debouncer23.read();
if((value23 == LOW) && (digitalRead(RELAY_24) == RELAY_OFF)){
saveState(23, !loadState(23));
digitalWrite(RELAY_23, loadState(23)?RELAY_ON:RELAY_OFF);
send(msg23.set(loadState(23)));
}
}
if (debouncer24.update()) {
int value24 = debouncer24.read();
if((value24 == LOW) && (digitalRead(RELAY_23) == RELAY_OFF)){
saveState(24, !loadState(24));
digitalWrite(RELAY_24, loadState(24)?RELAY_ON:RELAY_OFF);
send(msg24.set(loadState(24)));
}
}
//--------------Roleta w garażu-----------------------------------
if (debouncer25.update()) {
int value25 = debouncer25.read();
if((value25 == LOW) && (digitalRead(RELAY_26) == RELAY_OFF)){
saveState(25, !loadState(25));
digitalWrite(RELAY_25, loadState(25)?RELAY_ON:RELAY_OFF);
send(msg25.set(loadState(25)));
}
}
if (debouncer26.update()) {
int value26 = debouncer26.read();
if((value26 == LOW) && (digitalRead(RELAY_25) == RELAY_OFF)){
saveState(26, !loadState(26));
digitalWrite(RELAY_26, loadState(26)?RELAY_ON:RELAY_OFF);
send(msg26.set(loadState(26)));
}
}
//--------------Brama garażowa------------------------------------
if (debouncer27.update()) {
int value27 = debouncer27.read();
if((value27 == LOW) && (digitalRead(RELAY_28) == RELAY_OFF)){
saveState(27, !loadState(27));
digitalWrite(RELAY_27, loadState(27)?RELAY_ON:RELAY_OFF);
send(msg27.set(loadState(27)));
}
}
if (debouncer28.update()) {
int value28 = debouncer28.read();
if((value28 == LOW) && (digitalRead(RELAY_27) == RELAY_OFF)){
saveState(28, !loadState(28));
digitalWrite(RELAY_28, loadState(28)?RELAY_ON:RELAY_OFF);
send(msg28.set(loadState(28)));
}
}
}
void receive(const MyMessage &message) {
//--------------Roleta w kuchni duże okno-------------------------
{
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, LOW);
}
}
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_1, LOW);
digitalWrite(RELAY_2, LOW);
}
}
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_2, HIGH);
digitalWrite(RELAY_1, LOW);
}
}
}
{
//--------------Roleta w kuchni małe okno-------------------------
if (message.sensor == ROLETA_2_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_3, HIGH);
digitalWrite(RELAY_4, LOW);
}
}
if (message.sensor == ROLETA_2_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_3, LOW);
digitalWrite(RELAY_4, LOW);
}
}
if (message.sensor == ROLETA_2_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_4, HIGH);
digitalWrite(RELAY_3, LOW);
}
}
}
//--------------Roleta w jadalni duże okno------------------------
{
if (message.sensor == ROLETA_3_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_5, HIGH);
digitalWrite(RELAY_6, LOW);
}
}
if (message.sensor == ROLETA_3_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_5, LOW);
digitalWrite(RELAY_6, LOW);
}
}
if (message.sensor == ROLETA_3_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_6, HIGH);
digitalWrite(RELAY_5, LOW);
}
}
}
//--------------Roleta w jadalni małe okno------------------------
{
if (message.sensor == ROLETA_4_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_7, HIGH);
digitalWrite(RELAY_8, LOW);
}
}
if (message.sensor == ROLETA_4_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_7, LOW);
digitalWrite(RELAY_8, LOW);
}
}
if (message.sensor == ROLETA_4_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_8, HIGH);
digitalWrite(RELAY_7, LOW);
}
}
}
//--------------Roleta w dużym pokoju duże okno od frontu---------
{
if (message.sensor == ROLETA_5_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_9, HIGH);
digitalWrite(RELAY_10, LOW);
}
}
if (message.sensor == ROLETA_5_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_9, LOW);
digitalWrite(RELAY_10, LOW);
}
}
if (message.sensor == ROLETA_5_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_10, HIGH);
digitalWrite(RELAY_9, LOW);
}
}
}
//--------------Roleta w dużym pokoju małe okno od frontu---------
{
if (message.sensor == ROLETA_6_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_11, HIGH);
digitalWrite(RELAY_12, LOW);
}
}
if (message.sensor == ROLETA_6_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_11, LOW);
digitalWrite(RELAY_12, LOW);
}
}
if (message.sensor == ROLETA_6_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_12, HIGH);
digitalWrite(RELAY_11, LOW);
}
}
}
//--------------Roleta w dużym pokoju małe okno od strony ogrodu--
{
if (message.sensor == ROLETA_7_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_13, HIGH);
digitalWrite(RELAY_14, LOW);
}
}
if (message.sensor == ROLETA_7_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_13, LOW);
digitalWrite(RELAY_14, LOW);
}
}
if (message.sensor == ROLETA_7_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_14, HIGH);
digitalWrite(RELAY_13, LOW);
}
}
}
//--------------Roleta w dużym pokoju drzwi tarasowe--------------
{
if (message.sensor == ROLETA_8_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_15, HIGH);
digitalWrite(RELAY_16, LOW);
}
}
if (message.sensor == ROLETA_8_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_15, LOW);
digitalWrite(RELAY_16, LOW);
}
}
if (message.sensor == ROLETA_8_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_16, HIGH);
digitalWrite(RELAY_15, LOW);
}
}
}
//--------------Roleta w gabinecie drzwi tarasowe-----------------
{
if (message.sensor == ROLETA_9_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_17, HIGH);
digitalWrite(RELAY_18, LOW);
}
}
if (message.sensor == ROLETA_9_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_17, LOW);
digitalWrite(RELAY_18, LOW);
}
}
if (message.sensor == ROLETA_9_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_18, HIGH);
digitalWrite(RELAY_17, LOW);
}
}
}
//--------------Roleta w gabinecie okno---------------------------
{
if (message.sensor == ROLETA_10_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_19, HIGH);
digitalWrite(RELAY_20, LOW);
}
}
if (message.sensor == ROLETA_10_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_19, LOW);
digitalWrite(RELAY_20, LOW);
}
}
if (message.sensor == ROLETA_10_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_20, HIGH);
digitalWrite(RELAY_19, LOW);
}
}
}
//--------------Roleta w łazience na parterze---------------------
{
if (message.sensor == ROLETA_11_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_21, HIGH);
digitalWrite(RELAY_22, LOW);
}
}
if (message.sensor == ROLETA_11_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_21, LOW);
digitalWrite(RELAY_22, LOW);
}
}
if (message.sensor == ROLETA_11_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_22, HIGH);
digitalWrite(RELAY_21, LOW);
}
}
}
{
//--------------Roleta w pomieszczeniu gospodarczym---------------
if (message.sensor == ROLETA_12_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_23, HIGH);
digitalWrite(RELAY_24, LOW);
}
}
if (message.sensor == ROLETA_12_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_23, LOW);
digitalWrite(RELAY_24, LOW);
}
}
if (message.sensor == ROLETA_12_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_24, HIGH);
digitalWrite(RELAY_23, LOW);
}
}
}
//--------------Roleta w garażu-----------------------------------
{
if (message.sensor == ROLETA_13_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_25, HIGH);
digitalWrite(RELAY_26, LOW);
}
}
if (message.sensor == ROLETA_13_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_25, LOW);
digitalWrite(RELAY_26, LOW);
}
}
if (message.sensor == ROLETA_13_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_26, HIGH);
digitalWrite(RELAY_25, LOW);
}
}
}
//--------------Brama garażowa------------------------------------
{
if (message.sensor == ROLETA_14_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_27, HIGH);
digitalWrite(RELAY_28, LOW);
}
}
if (message.sensor == ROLETA_14_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_27, LOW);
digitalWrite(RELAY_28, LOW);
}
}
if (message.sensor == ROLETA_14_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_28, HIGH);
digitalWrite(RELAY_27, LOW);
}
}
}
}
Odkopuję temat,
na podstawie kodu od @kuerten (wielkie dzięki), zaadoptowałem pod swoje rolety.
Chciałbym dorzucić funkcję delay () aby po pewnym czasie zrzucić stan wyjścia z low na high, żeby napięcie nie płynęło na silnik ( oczywiście są zamontowane krancówki).
Proszę o pomoc gdzie powinienem tą funkcję dorzucić.
#define MY_DEBUG
#define MY_GATEWAY_SERIAL
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
//--------------Roleta 1-------------------------
#define ROLETA_1_CHILD 1
#define BUTTON_PIN A1
#define BUTTON_PIN2 A2
#define RELAY_1 22
#define RELAY_2 23
//--------------Roleta 2-------------------------
#define ROLETA_2_CHILD 2
#define BUTTON_PIN3 A3
#define BUTTON_PIN4 A4
#define RELAY_3 24
#define RELAY_4 25
//--------------Roleta 3------------------------
#define ROLETA_3_CHILD 3
#define BUTTON_PIN5 A5
#define BUTTON_PIN6 A6
#define RELAY_5 26
#define RELAY_6 27
//--------------Roleta 4------------------------
#define ROLETA_4_CHILD 4
#define BUTTON_PIN7 A7
#define BUTTON_PIN8 A8
#define RELAY_7 28
#define RELAY_8 29
//--------------Roleta 5---------
#define ROLETA_5_CHILD 5
#define BUTTON_PIN9 A9
#define BUTTON_PIN10 A10
#define RELAY_9 30
#define RELAY_10 31
//--------------Roleta 6---------
#define ROLETA_6_CHILD 6
#define BUTTON_PIN11 A11
#define BUTTON_PIN12 A12
#define RELAY_11 32
#define RELAY_12 33
//--------------Roleta 7--
#define ROLETA_7_CHILD 7
#define BUTTON_PIN13 A13
#define BUTTON_PIN14 A14
#define RELAY_13 34
#define RELAY_14 35
//--------------Roleta 8--------------
#define ROLETA_8_CHILD 8
#define BUTTON_PIN15 A15
#define BUTTON_PIN16 2
#define RELAY_15 36
#define RELAY_16 37
//--------------Roleta 9-----------------
#define ROLETA_9_CHILD 9
#define BUTTON_PIN17 3
#define BUTTON_PIN18 4
#define RELAY_17 38
#define RELAY_18 39
//--------------Roleta 10---------------------------
#define ROLETA_10_CHILD 10
#define BUTTON_PIN19 5
#define BUTTON_PIN20 6
#define RELAY_19 40
#define RELAY_20 41
//--------------Roleta 11---------------------
#define ROLETA_11_CHILD 11
#define BUTTON_PIN21 7
#define BUTTON_PIN22 8
#define RELAY_21 42
#define RELAY_22 43
//--------------Roleta 12---------------
#define ROLETA_12_CHILD 12
#define BUTTON_PIN23 9
#define BUTTON_PIN24 10
#define RELAY_23 44
#define RELAY_24 45
//--------------Roleta 13-----------------------------------
#define ROLETA_13_CHILD 13
#define BUTTON_PIN25 11
#define BUTTON_PIN26 12
#define RELAY_25 46
#define RELAY_26 47
//--------------Roleta 14------------------------------------
#define ROLETA_14_CHILD 14
#define BUTTON_PIN27 52
#define BUTTON_PIN28 51
#define RELAY_27 48
#define RELAY_28 49
//----------------------------------------------------------------
#define RELAY_ON 0
#define RELAY_OFF 1
//----------------------------------------------------------------
// Inicjalizacja obiektu Bounce
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();
Bounce debouncer10 = Bounce();
Bounce debouncer11 = Bounce();
Bounce debouncer12 = Bounce();
Bounce debouncer13 = Bounce();
Bounce debouncer14 = Bounce();
Bounce debouncer15 = Bounce();
Bounce debouncer16 = Bounce();
Bounce debouncer17 = Bounce();
Bounce debouncer18 = Bounce();
Bounce debouncer19 = Bounce();
Bounce debouncer20 = Bounce();
Bounce debouncer21 = Bounce();
Bounce debouncer22 = Bounce();
Bounce debouncer23 = Bounce();
Bounce debouncer24 = Bounce();
Bounce debouncer25 = Bounce();
Bounce debouncer26 = Bounce();
Bounce debouncer27 = Bounce();
Bounce debouncer28 = Bounce();
void before() {
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
pinMode(RELAY_3, OUTPUT);
pinMode(RELAY_4, OUTPUT);
pinMode(RELAY_5, OUTPUT);
pinMode(RELAY_6, OUTPUT);
pinMode(RELAY_7, OUTPUT);
pinMode(RELAY_8, OUTPUT);
pinMode(RELAY_9, OUTPUT);
pinMode(RELAY_10, OUTPUT);
pinMode(RELAY_11, OUTPUT);
pinMode(RELAY_12, OUTPUT);
pinMode(RELAY_13, OUTPUT);
pinMode(RELAY_14, OUTPUT);
pinMode(RELAY_15, OUTPUT);
pinMode(RELAY_16, OUTPUT);
pinMode(RELAY_17, OUTPUT);
pinMode(RELAY_18, OUTPUT);
pinMode(RELAY_19, OUTPUT);
pinMode(RELAY_20, OUTPUT);
pinMode(RELAY_21, OUTPUT);
pinMode(RELAY_22, OUTPUT);
pinMode(RELAY_23, OUTPUT);
pinMode(RELAY_24, OUTPUT);
pinMode(RELAY_25, OUTPUT);
pinMode(RELAY_26, OUTPUT);
pinMode(RELAY_27, OUTPUT);
pinMode(RELAY_28, OUTPUT);
digitalWrite(RELAY_1,HIGH);
digitalWrite(RELAY_2,HIGH);
digitalWrite(RELAY_3,HIGH);
digitalWrite(RELAY_4,HIGH);
digitalWrite(RELAY_5,HIGH);
digitalWrite(RELAY_6,HIGH);
digitalWrite(RELAY_7,HIGH);
digitalWrite(RELAY_8,HIGH);
digitalWrite(RELAY_9,HIGH);
digitalWrite(RELAY_10,HIGH);
digitalWrite(RELAY_11,HIGH);
digitalWrite(RELAY_12,HIGH);
digitalWrite(RELAY_13,HIGH);
digitalWrite(RELAY_14,HIGH);
digitalWrite(RELAY_15,HIGH);
digitalWrite(RELAY_16,HIGH);
digitalWrite(RELAY_17,HIGH);
digitalWrite(RELAY_18,HIGH);
digitalWrite(RELAY_19,HIGH);
digitalWrite(RELAY_20,HIGH);
digitalWrite(RELAY_21,HIGH);
digitalWrite(RELAY_22,HIGH);
digitalWrite(RELAY_23,HIGH);
digitalWrite(RELAY_24,HIGH);
digitalWrite(RELAY_25,HIGH);
digitalWrite(RELAY_26,HIGH);
digitalWrite(RELAY_27,HIGH);
digitalWrite(RELAY_28,HIGH);
}
void setup() {
// Konfiguracja pinu przycisku i aktywowanie rezystora podciągającego:
pinMode(BUTTON_PIN,INPUT_PULLUP);
pinMode(BUTTON_PIN2,INPUT_PULLUP);
pinMode(BUTTON_PIN3,INPUT_PULLUP);
pinMode(BUTTON_PIN4,INPUT_PULLUP);
pinMode(BUTTON_PIN5,INPUT_PULLUP);
pinMode(BUTTON_PIN6,INPUT_PULLUP);
pinMode(BUTTON_PIN7,INPUT_PULLUP);
pinMode(BUTTON_PIN8,INPUT_PULLUP);
pinMode(BUTTON_PIN9,INPUT_PULLUP);
pinMode(BUTTON_PIN10,INPUT_PULLUP);
pinMode(BUTTON_PIN11,INPUT_PULLUP);
pinMode(BUTTON_PIN12,INPUT_PULLUP);
pinMode(BUTTON_PIN13,INPUT_PULLUP);
pinMode(BUTTON_PIN14,INPUT_PULLUP);
pinMode(BUTTON_PIN15,INPUT_PULLUP);
pinMode(BUTTON_PIN16,INPUT_PULLUP);
pinMode(BUTTON_PIN17,INPUT_PULLUP);
pinMode(BUTTON_PIN18,INPUT_PULLUP);
pinMode(BUTTON_PIN19,INPUT_PULLUP);
pinMode(BUTTON_PIN20,INPUT_PULLUP);
pinMode(BUTTON_PIN21,INPUT_PULLUP);
pinMode(BUTTON_PIN22,INPUT_PULLUP);
pinMode(BUTTON_PIN23,INPUT_PULLUP);
pinMode(BUTTON_PIN24,INPUT_PULLUP);
pinMode(BUTTON_PIN25,INPUT_PULLUP);
pinMode(BUTTON_PIN26,INPUT_PULLUP);
pinMode(BUTTON_PIN27,INPUT_PULLUP);
pinMode(BUTTON_PIN28,INPUT_PULLUP);
// Po konfiguracji przycisku, ustawienie działania funkcji Bounce :
debouncer.attach(BUTTON_PIN);
debouncer.interval(5);
debouncer2.attach(BUTTON_PIN2);
debouncer2.interval(5);
debouncer3.attach(BUTTON_PIN3);
debouncer3.interval(5);
debouncer4.attach(BUTTON_PIN4);
debouncer4.interval(5);
debouncer5.attach(BUTTON_PIN5);
debouncer5.interval(5);
debouncer6.attach(BUTTON_PIN6);
debouncer6.interval(5);
debouncer7.attach(BUTTON_PIN7);
debouncer7.interval(5);
debouncer8.attach(BUTTON_PIN8);
debouncer8.interval(5);
debouncer9.attach(BUTTON_PIN9);
debouncer9.interval(5);
debouncer10.attach(BUTTON_PIN10);
debouncer10.interval(5);
debouncer11.attach(BUTTON_PIN11);
debouncer11.interval(5);
debouncer12.attach(BUTTON_PIN12);
debouncer12.interval(5);
debouncer13.attach(BUTTON_PIN13);
debouncer13.interval(5);
debouncer14.attach(BUTTON_PIN14);
debouncer14.interval(5);
debouncer15.attach(BUTTON_PIN15);
debouncer15.interval(5);
debouncer16.attach(BUTTON_PIN16);
debouncer16.interval(5);
debouncer17.attach(BUTTON_PIN17);
debouncer17.interval(5);
debouncer18.attach(BUTTON_PIN18);
debouncer18.interval(5);
debouncer19.attach(BUTTON_PIN19);
debouncer19.interval(5);
debouncer20.attach(BUTTON_PIN20);
debouncer20.interval(5);
debouncer21.attach(BUTTON_PIN21);
debouncer21.interval(5);
debouncer22.attach(BUTTON_PIN22);
debouncer22.interval(5);
debouncer23.attach(BUTTON_PIN23);
debouncer23.interval(5);
debouncer24.attach(BUTTON_PIN24);
debouncer24.interval(5);
debouncer25.attach(BUTTON_PIN25);
debouncer25.interval(5);
debouncer26.attach(BUTTON_PIN26);
debouncer26.interval(5);
debouncer27.attach(BUTTON_PIN27);
debouncer27.interval(5);
debouncer28.attach(BUTTON_PIN28);
debouncer28.interval(5);
}
void presentation()
{
sendSketchInfo("Rolety parter", "1.0");
present(ROLETA_1_CHILD, S_COVER);
present(ROLETA_2_CHILD, S_COVER);
present(ROLETA_3_CHILD, S_COVER);
present(ROLETA_4_CHILD, S_COVER);
present(ROLETA_5_CHILD, S_COVER);
present(ROLETA_6_CHILD, S_COVER);
present(ROLETA_7_CHILD, S_COVER);
present(ROLETA_8_CHILD, S_COVER);
present(ROLETA_9_CHILD, S_COVER);
present(ROLETA_10_CHILD, S_COVER);
present(ROLETA_11_CHILD, S_COVER);
present(ROLETA_12_CHILD, S_COVER);
present(ROLETA_13_CHILD, S_COVER);
present(ROLETA_14_CHILD, S_COVER);
}
MyMessage msg(ROLETA_1_CHILD, V_UP);
MyMessage msg2(ROLETA_1_CHILD, V_DOWN);
MyMessage msg3(ROLETA_2_CHILD, V_UP);
MyMessage msg4(ROLETA_2_CHILD, V_DOWN);
MyMessage msg5(ROLETA_3_CHILD, V_UP);
MyMessage msg6(ROLETA_3_CHILD, V_DOWN);
MyMessage msg7(ROLETA_4_CHILD, V_UP);
MyMessage msg8(ROLETA_4_CHILD, V_DOWN);
MyMessage msg9(ROLETA_5_CHILD, V_UP);
MyMessage msg10(ROLETA_5_CHILD, V_DOWN);
MyMessage msg11(ROLETA_6_CHILD, V_UP);
MyMessage msg12(ROLETA_6_CHILD, V_DOWN);
MyMessage msg13(ROLETA_7_CHILD, V_UP);
MyMessage msg14(ROLETA_7_CHILD, V_DOWN);
MyMessage msg15(ROLETA_8_CHILD, V_UP);
MyMessage msg16(ROLETA_8_CHILD, V_DOWN);
MyMessage msg17(ROLETA_9_CHILD, V_UP);
MyMessage msg18(ROLETA_9_CHILD, V_DOWN);
MyMessage msg19(ROLETA_10_CHILD, V_UP);
MyMessage msg20(ROLETA_10_CHILD, V_DOWN);
MyMessage msg21(ROLETA_11_CHILD, V_UP);
MyMessage msg22(ROLETA_11_CHILD, V_DOWN);
MyMessage msg23(ROLETA_12_CHILD, V_UP);
MyMessage msg24(ROLETA_12_CHILD, V_DOWN);
MyMessage msg25(ROLETA_13_CHILD, V_UP);
MyMessage msg26(ROLETA_13_CHILD, V_DOWN);
MyMessage msg27(ROLETA_14_CHILD, V_UP);
MyMessage msg28(ROLETA_14_CHILD, V_DOWN);
void loop() {
//--------------Roleta 1-------------------------
if (debouncer.update()) {
int value = debouncer.read();
if((value == LOW) && (digitalRead(RELAY_2) == RELAY_OFF)){
saveState(1, !loadState(1));
digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
send(msg.set(loadState(1)));
}
}
if (debouncer2.update()) {
int value2 = debouncer2.read();
if((value2 == LOW) && (digitalRead(RELAY_1) == RELAY_OFF)){
saveState(2, !loadState(2));
digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
send(msg2.set(loadState(2)));
}
}
//--------------Roleta 2-------------------------
// Send locally attached sensor data here
if (debouncer3.update()) {
// Get the update value.
int value3 = debouncer3.read();
// Send in the new value.
if((value3 == LOW) && (digitalRead(RELAY_4) == RELAY_OFF)){
saveState(3, !loadState(3));
digitalWrite(RELAY_3, loadState(3)?RELAY_ON:RELAY_OFF);
send(msg3.set(loadState(3)));
}
}
if (debouncer4.update()) {
int value4 = debouncer4.read();
if((value4 == LOW) && (digitalRead(RELAY_3) == RELAY_OFF)){
saveState(4, !loadState(4));
digitalWrite(RELAY_4, loadState(4)?RELAY_ON:RELAY_OFF);
send(msg4.set(loadState(4)));
}
}
//--------------Roleta 3------------------------
if (debouncer5.update()) {
int value5 = debouncer5.read();
if((value5 == LOW && (digitalRead(RELAY_6) == RELAY_OFF))){
saveState(5, !loadState(5));
digitalWrite(RELAY_5, loadState(5)?RELAY_ON:RELAY_OFF);
send(msg5.set(loadState(5)));
}
}
if (debouncer6.update()) {
int value6 = debouncer6.read();
if((value6 == LOW) && (digitalRead(RELAY_5) == RELAY_OFF)){
saveState(6, !loadState(6));
digitalWrite(RELAY_6, loadState(6)?RELAY_ON:RELAY_OFF);
send(msg6.set(loadState(6)));
}
}
//--------------Roleta 4------------------------
if (debouncer7.update()) {
int value7 = debouncer7.read();
if((value7 == LOW) && (digitalRead(RELAY_8) == RELAY_OFF)){
saveState(7, !loadState(7));
digitalWrite(RELAY_7, loadState(7)?RELAY_ON:RELAY_OFF);
send(msg7.set(loadState(7)));
}
}
if (debouncer8.update()) {
int value8 = debouncer8.read();
if((value8 == LOW) && (digitalRead(RELAY_7) == RELAY_OFF)){
saveState(8, !loadState(8));
digitalWrite(RELAY_8, loadState(8)?RELAY_ON:RELAY_OFF);
send(msg8.set(loadState(8)));
}
}
//--------------Roleta 5---------
if (debouncer9.update()) {
int value9 = debouncer9.read();
if((value9 == LOW) && (digitalRead(RELAY_10) == RELAY_OFF)){
saveState(9, !loadState(9));
digitalWrite(RELAY_9, loadState(9)?RELAY_ON:RELAY_OFF);
send(msg9.set(loadState(9)));
}
}
if (debouncer10.update()) {
int value10 = debouncer10.read();
if((value10 == LOW) && (digitalRead(RELAY_9) == RELAY_OFF)){
saveState(10, !loadState(10));
digitalWrite(RELAY_10, loadState(10)?RELAY_ON:RELAY_OFF);
send(msg10.set(loadState(10)));
}
}
//--------------Roleta 6---------
if (debouncer11.update()) {
int value11 = debouncer11.read();
if((value11 == LOW) && (digitalRead(RELAY_12) == RELAY_OFF)){
saveState(11, !loadState(11));
digitalWrite(RELAY_11, loadState(11)?RELAY_ON:RELAY_OFF);
send(msg11.set(loadState(11)));
}
}
if (debouncer12.update()) {
int value12 = debouncer12.read();
if((value12 == LOW) && (digitalRead(RELAY_11) == RELAY_OFF)){
saveState(12, !loadState(12));
digitalWrite(RELAY_12, loadState(12)?RELAY_ON:RELAY_OFF);
send(msg12.set(loadState(12)));
}
}
//--------------Roleta 7--
if (debouncer13.update()) {
int value13 = debouncer13.read();
if((value13 == LOW) && (digitalRead(RELAY_14) == RELAY_OFF)){
saveState(13, !loadState(13));
digitalWrite(RELAY_13, loadState(13)?RELAY_ON:RELAY_OFF);
send(msg13.set(loadState(13)));
}
}
if (debouncer14.update()) {
int value14 = debouncer14.read();
if((value14 == LOW) && (digitalRead(RELAY_13) == RELAY_OFF)){
saveState(14, !loadState(14));
digitalWrite(RELAY_14, loadState(14)?RELAY_ON:RELAY_OFF);
send(msg14.set(loadState(14)));
}
}
//--------------Roleta 8--------------
if (debouncer15.update()) {
int value15 = debouncer15.read();
if((value15 == LOW) && (digitalRead(RELAY_16) == RELAY_OFF)){
saveState(15, !loadState(15));
digitalWrite(RELAY_15, loadState(15)?RELAY_ON:RELAY_OFF);
send(msg15.set(loadState(15)));
}
}
if (debouncer16.update()) {
int value16 = debouncer16.read();
if((value16 == LOW) && (digitalRead(RELAY_15) == RELAY_OFF)){
saveState(16, !loadState(16));
digitalWrite(RELAY_16, loadState(16)?RELAY_ON:RELAY_OFF);
send(msg16.set(loadState(16)));
}
}
//--------------Roleta 9-----------------
if (debouncer17.update()) {
int value17 = debouncer17.read();
if((value17 == LOW) && (digitalRead(RELAY_18) == RELAY_OFF)){
saveState(17, !loadState(17));
digitalWrite(RELAY_17, loadState(17)?RELAY_ON:RELAY_OFF);
send(msg17.set(loadState(17)));
}
}
if (debouncer18.update()) {
int value18 = debouncer18.read();
if((value18 == LOW) && (digitalRead(RELAY_17) == RELAY_OFF)){
saveState(18, !loadState(18));
digitalWrite(RELAY_18, loadState(18)?RELAY_ON:RELAY_OFF);
send(msg18.set(loadState(18)));
}
}
//--------------Roleta 10---------------------------
if (debouncer19.update()) {
int value19 = debouncer19.read();
if((value19 == LOW) && (digitalRead(RELAY_20) == RELAY_OFF)){
saveState(19, !loadState(19));
digitalWrite(RELAY_19, loadState(19)?RELAY_ON:RELAY_OFF);
send(msg19.set(loadState(19)));
}
}
if (debouncer20.update()) {
int value20 = debouncer20.read();
if((value20 == LOW) && (digitalRead(RELAY_19) == RELAY_OFF)){
saveState(20, !loadState(20));
digitalWrite(RELAY_20, loadState(20)?RELAY_ON:RELAY_OFF);
send(msg20.set(loadState(20)));
}
}
//--------------Roleta 11---------------------
if (debouncer21.update()) {
int value21 = debouncer21.read();
if((value21 == LOW) && (digitalRead(RELAY_22) == RELAY_OFF)){
saveState(21, !loadState(21));
digitalWrite(RELAY_21, loadState(21)?RELAY_ON:RELAY_OFF);
send(msg21.set(loadState(21)));
}
}
if (debouncer22.update()) {
int value22 = debouncer22.read();
if((value22 == LOW) && (digitalRead(RELAY_21) == RELAY_OFF)){
saveState(22, !loadState(22));
digitalWrite(RELAY_22, loadState(22)?RELAY_ON:RELAY_OFF);
send(msg22.set(loadState(22)));
}
}
//--------------Roleta 12---------------
if (debouncer23.update()) {
int value23 = debouncer23.read();
if((value23 == LOW) && (digitalRead(RELAY_24) == RELAY_OFF)){
saveState(23, !loadState(23));
digitalWrite(RELAY_23, loadState(23)?RELAY_ON:RELAY_OFF);
send(msg23.set(loadState(23)));
}
}
if (debouncer24.update()) {
int value24 = debouncer24.read();
if((value24 == LOW) && (digitalRead(RELAY_23) == RELAY_OFF)){
saveState(24, !loadState(24));
digitalWrite(RELAY_24, loadState(24)?RELAY_ON:RELAY_OFF);
send(msg24.set(loadState(24)));
}
}
//--------------Roleta 13-----------------------------------
if (debouncer25.update()) {
int value25 = debouncer25.read();
if((value25 == LOW) && (digitalRead(RELAY_26) == RELAY_OFF)){
saveState(25, !loadState(25));
digitalWrite(RELAY_25, loadState(25)?RELAY_ON:RELAY_OFF);
send(msg25.set(loadState(25)));
}
}
if (debouncer26.update()) {
int value26 = debouncer26.read();
if((value26 == LOW) && (digitalRead(RELAY_25) == RELAY_OFF)){
saveState(26, !loadState(26));
digitalWrite(RELAY_26, loadState(26)?RELAY_ON:RELAY_OFF);
send(msg26.set(loadState(26)));
}
}
//--------------Roleta 14------------------------------------
if (debouncer27.update()) {
int value27 = debouncer27.read();
if((value27 == LOW) && (digitalRead(RELAY_28) == RELAY_OFF)){
saveState(27, !loadState(27));
digitalWrite(RELAY_27, loadState(27)?RELAY_ON:RELAY_OFF);
send(msg27.set(loadState(27)));
}
}
if (debouncer28.update()) {
int value28 = debouncer28.read();
if((value28 == LOW) && (digitalRead(RELAY_27) == RELAY_OFF)){
saveState(28, !loadState(28));
digitalWrite(RELAY_28, loadState(28)?RELAY_ON:RELAY_OFF);
send(msg28.set(loadState(28)));
}
}
}
void receive(const MyMessage &message) {
//--------------Roleta 1-------------------------
{
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, LOW);
}
}
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_1, HIGH);
digitalWrite(RELAY_2, HIGH);
}
}
if (message.sensor == ROLETA_1_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_2, HIGH);
digitalWrite(RELAY_1, LOW);
}
}
}
{
//--------------Roleta 2-------------------------
if (message.sensor == ROLETA_2_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_3, HIGH);
digitalWrite(RELAY_4, LOW);
}
}
if (message.sensor == ROLETA_2_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_3, HIGH);
digitalWrite(RELAY_4, HIGH);
}
}
if (message.sensor == ROLETA_2_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_4, HIGH);
digitalWrite(RELAY_3, LOW);
}
}
}
//--------------Roleta 3------------------------
{
if (message.sensor == ROLETA_3_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_5, HIGH);
digitalWrite(RELAY_6, LOW);
}
}
if (message.sensor == ROLETA_3_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_5, HIGH);
digitalWrite(RELAY_6, HIGH);
}
}
if (message.sensor == ROLETA_3_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_6, HIGH);
digitalWrite(RELAY_5, LOW);
}
}
}
//--------------Roleta 4------------------------
{
if (message.sensor == ROLETA_4_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_7, HIGH);
digitalWrite(RELAY_8, LOW);
}
}
if (message.sensor == ROLETA_4_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_7, HIGH);
digitalWrite(RELAY_8, HIGH);
}
}
if (message.sensor == ROLETA_4_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_8, HIGH);
digitalWrite(RELAY_7, LOW);
}
}
}
//--------------Roleta 5---------
{
if (message.sensor == ROLETA_5_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_9, HIGH);
digitalWrite(RELAY_10, LOW);
}
}
if (message.sensor == ROLETA_5_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_9, HIGH);
digitalWrite(RELAY_10, HIGH);
}
}
if (message.sensor == ROLETA_5_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_10, HIGH);
digitalWrite(RELAY_9, LOW);
}
}
}
//--------------Roleta 6---------
{
if (message.sensor == ROLETA_6_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_11, HIGH);
digitalWrite(RELAY_12, LOW);
}
}
if (message.sensor == ROLETA_6_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_11, HIGH);
digitalWrite(RELAY_12, HIGH);
}
}
if (message.sensor == ROLETA_6_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_12, HIGH);
digitalWrite(RELAY_11, LOW);
}
}
}
//--------------Roleta 7--
{
if (message.sensor == ROLETA_7_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_13, HIGH);
digitalWrite(RELAY_14, LOW);
}
}
if (message.sensor == ROLETA_7_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_13, HIGH);
digitalWrite(RELAY_14, HIGH);
}
}
if (message.sensor == ROLETA_7_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_14, HIGH);
digitalWrite(RELAY_13, LOW);
}
}
}
//--------------Roleta 8--------------
{
if (message.sensor == ROLETA_8_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_15, HIGH);
digitalWrite(RELAY_16, LOW);
}
}
if (message.sensor == ROLETA_8_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_15, HIGH);
digitalWrite(RELAY_16, HIGH);
}
}
if (message.sensor == ROLETA_8_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_16, HIGH);
digitalWrite(RELAY_15, LOW);
}
}
}
//--------------Roleta 9-----------------
{
if (message.sensor == ROLETA_9_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_17, HIGH);
digitalWrite(RELAY_18, LOW);
}
}
if (message.sensor == ROLETA_9_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_17, HIGH);
digitalWrite(RELAY_18, HIGH);
}
}
if (message.sensor == ROLETA_9_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_18, HIGH);
digitalWrite(RELAY_17, LOW);
}
}
}
//--------------Roleta 10---------------------------
{
if (message.sensor == ROLETA_10_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_19, HIGH);
digitalWrite(RELAY_20, LOW);
}
}
if (message.sensor == ROLETA_10_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_19, HIGH);
digitalWrite(RELAY_20, HIGH);
}
}
if (message.sensor == ROLETA_10_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_20, HIGH);
digitalWrite(RELAY_19, LOW);
}
}
}
//--------------Roleta 11---------------------
{
if (message.sensor == ROLETA_11_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_21, HIGH);
digitalWrite(RELAY_22, LOW);
}
}
if (message.sensor == ROLETA_11_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_21, HIGH);
digitalWrite(RELAY_22, HIGH);
}
}
if (message.sensor == ROLETA_11_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_22, HIGH);
digitalWrite(RELAY_21, LOW);
}
}
}
{
//--------------Roleta 12---------------
if (message.sensor == ROLETA_12_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_23, HIGH);
digitalWrite(RELAY_24, LOW);
}
}
if (message.sensor == ROLETA_12_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_23, HIGH);
digitalWrite(RELAY_24, HIGH);
}
}
if (message.sensor == ROLETA_12_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_24, HIGH);
digitalWrite(RELAY_23, LOW);
}
}
}
//--------------Roleta 13-----------------------------------
{
if (message.sensor == ROLETA_13_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_25, HIGH);
digitalWrite(RELAY_26, LOW);
}
}
if (message.sensor == ROLETA_13_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_25, HIGH);
digitalWrite(RELAY_26, HIGH);
}
}
if (message.sensor == ROLETA_13_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_26, HIGH);
digitalWrite(RELAY_25, LOW);
}
}
}
//--------------Roleta 14------------------------------------
{
if (message.sensor == ROLETA_14_CHILD){
if (message.type == V_UP) {
digitalWrite(RELAY_27, HIGH);
digitalWrite(RELAY_28, LOW);
}
}
if (message.sensor == ROLETA_14_CHILD){
if (message.type == V_STOP ) {
digitalWrite(RELAY_27, HIGH);
digitalWrite(RELAY_28, HIGH);
}
}
if (message.sensor == ROLETA_14_CHILD){
if (message.type == V_DOWN) {
digitalWrite(RELAY_28, HIGH);
digitalWrite(RELAY_27, LOW);
}
}
}
}
panowie, czy jest konieczniosc wklejania calego konfiga tu jako przyklad?? Moze wystarczy fragment dotyczacy jednej rolety, a nie wszystkich zasmiecajac forum.
Niestety nie pomogę z tym kodem bo już kilka lat temu go porzuciłem. Polecam https://github.com/gryzli133/RollerShutterSplit
Jest to kod do obsługi rolet napisany na Arduino mega, który na pewno działa pod HA i wg opisu działa też pod Domoticzem. Kod ma tylko jedną wadę tzn. nie zawsze wszystkie rolet działają jeżeli należą do grupy rolet. Poza tym kod jest bardzo dobry !

