Asystent AI
Rolety zewnętrzne z...
 
Powiadomienia
Wyczyść wszystko

Domoticz Rolety zewnętrzne zrealizowane na Arduino maysensors

10 Wpisów
5 Użytkownicy
0 Reactions
3,559 Wyświetleń
(@astra1121)
Wpisów: 1
Świeżak
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#2320]

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);
    }
  }
  
}

 
Dodane : 31/03/2021 9:19 pm
(@kuerten)
Wpisów: 9
Bywalec
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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


 
Dodane : 06/04/2021 8:53 pm
(@szmydu)
Wpisów: 72
Pomocny
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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 🙂


 
Dodane : 14/04/2021 12:49 pm
(@kuerten)
Wpisów: 9
Bywalec
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@szmydu

Jasne.

Zapodaj skryptem, chętnie zobaczę jak to jest napisane 🙂


 
Dodane : 14/04/2021 1:18 pm
(@szmydu)
Wpisów: 72
Pomocny
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

 

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. 


 
Dodane : 14/04/2021 2:39 pm
(@kuerten)
Wpisów: 9
Bywalec
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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);
  }
  }
    }
}
  

 
 

 
Dodane : 29/01/2022 12:14 pm
(@grobla_001)
Wpisów: 2
Świeżak
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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);
  }
  }
    }
}

 
Dodane : 20/04/2025 12:42 pm
pawell32
(@pawell32)
Wpisów: 1476
Guru Moderator
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

panowie, czy jest konieczniosc wklejania calego konfiga tu jako przyklad?? Moze wystarczy fragment dotyczacy jednej rolety, a nie wszystkich zasmiecajac forum.


 
Dodane : 21/04/2025 6:57 pm
(@kuerten)
Wpisów: 9
Bywalec
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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 !


 
Dodane : 22/04/2025 3:42 pm
(@grobla_001)
Wpisów: 2
Świeżak
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@Kuerten, dziękuję za odpowiedź.


 
Dodane : 11/05/2025 1:17 pm
Udostępnij: