Advertisement
Guest User

Delayed relays switch

a guest
Nov 15th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. static const byte ident_pins[] = {2, 3, 4, 5, 13, A2, A5}; // poradi a pouzite piny lze samozrejme libovolne menit
  2. byte action_nr = 255;
  3. unsigned long startMillis;
  4. unsigned long currentMillis;
  5. const unsigned int refreshPeriod = 100;
  6. unsigned long startMillisRelay;
  7.  
  8. void setup() {
  9.   Serial.begin(9600);
  10.  
  11.   for (byte i = 0; i < (sizeof(ident_pins) / sizeof(ident_pins[0])); i++) {
  12.     pinMode(ident_pins[i], OUTPUT);
  13.   }
  14.   /// Pouze pro testování ///
  15.   /// Test ALL relay ON
  16.   action_nr = 1;
  17.  
  18. }
  19.  
  20.  
  21. void loop() {
  22.   currentMillis = millis();
  23.   if (currentMillis - startMillis >= refreshPeriod)
  24.   {
  25.     switch (action_nr) {
  26.       case 0:
  27.         change_all_relays(0, 1000); //// dle libosti změnit prodlevu v ms
  28.         break;
  29.  
  30.       case 1:
  31.         change_all_relays(1, 1000); //// dle libosti změnit prodlevu v ms
  32.         break;
  33.     }
  34.     startMillis = currentMillis;
  35.   }
  36. }
  37.  
  38. /// change ALL relays status
  39. void change_all_relays(byte action, unsigned int switch_delay) {
  40.  
  41.   if (action_nr == 255) {
  42.     action_nr = action;
  43.   }
  44.  
  45.   if (currentMillis - startMillisRelay >= switch_delay)
  46.   {
  47.     switch (action) {
  48.       /// Set pins state OFF
  49.       case 0:
  50.         for (byte i = 0; i < (sizeof(ident_pins) / sizeof(ident_pins[0])); i++) {
  51.           if (i == ((sizeof(ident_pins) / sizeof(ident_pins[0])) - 1))
  52.           {
  53.             action_nr = 255;
  54.           }
  55.           if (digitalRead(ident_pins[i]) == 1) {
  56.             digitalWrite(ident_pins[i], 0);
  57.             /// pouze pro debug
  58.             Serial.print(F("Pin:"));
  59.             Serial.print(ident_pins[i]);
  60.             Serial.print(F("\t"));
  61.             Serial.print(F("Stav:"));
  62.             Serial.println(digitalRead(ident_pins[i]));
  63.             //////
  64.             startMillisRelay = currentMillis;
  65.             break;
  66.           }
  67.         }
  68.         break;
  69.  
  70.       /// Set pins state ON
  71.       case 1:
  72.         for (byte i = 0; i < (sizeof(ident_pins) / sizeof(ident_pins[0])); i++) {
  73.           if (i == ((sizeof(ident_pins) / sizeof(ident_pins[0])) - 1))
  74.           {
  75.             action_nr = 255;
  76.           }
  77.           if (digitalRead(ident_pins[i]) == 0) {
  78.             digitalWrite(ident_pins[i], 1);
  79.             /// pouze pro debug
  80.             Serial.print(F("Pin:"));
  81.             Serial.print(ident_pins[i]);
  82.             Serial.print(F("\t"));
  83.             Serial.print(F("Stav:"));
  84.             Serial.println(digitalRead(ident_pins[i]));
  85.             //////
  86.             startMillisRelay = currentMillis;
  87.             break;
  88.           }
  89.         }
  90.         break;
  91.     }
  92.   }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement