PowerTGS440

Project_Dzialka_v1.3

May 22nd, 2021 (edited)
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 28.46 KB | None | 0 0
  1. // --------------------------------------------------------------------------------------------------------------------------------- //
  2. //
  3. // Projekt   :   Działka Project 1 - Zegar NANO :-) coś z tym badziewiem w szufladzie trzeba zrobić...
  4. // Autor     :   Tomasz Majcher
  5. //
  6. //
  7. // --------------------------------------------------------------------------------------------------------------------------------- //
  8.  
  9. //  wersja 1.3    :   DHT - AI
  10. //  wersja 1.2    :   DHT
  11. //  wersja 1.1    :   LDR - AI
  12. //  wersja 1.0    :   LDR
  13. //  wersja 0.9    :   DIODY (RED,ORANGE,GREEN) dla czujnika PIR
  14. //  wersja 0.8    :   PIR - AI
  15. //  wersja 0.7    :   PIR
  16. //  wersja 0.6    :   zmiana biblioteki PCF8574
  17. //  wersja 0.5    :   relay test ( O.K. ) power 5V 1A
  18. //  wersja 0.4    :   relay test ( fall ) no more power :-)
  19. //  wersja 0.3    :   led & key
  20. //  wersja 0.2    :   wyświetlacz TM1637
  21. //  wersja 0.1    :   zegar RTC
  22. //
  23. // --------------------------------------------------------------------------------------------------------------------------------- //
  24.  
  25.  
  26. #include <virtuabotixRTC.h>             // biblioteka zegar RTC  
  27. #include <TM1637Display.h>              // wyświetlacz TM1637
  28. #include "wiring_shift_mod.h"           // wiring
  29. #include "PCF8574.h"                    // expander'y1
  30. #include "DHT.h"
  31.  
  32. #define SerialSpeed 9600                // serial prędkość
  33. #define SERIAL      true                // serial wyświetl tak (true) / nie (false)
  34. #define RTC_SET     false               // aktualizacja manualna zegara RTC
  35.  
  36. // ----------------- expander'y ------------------------------- //
  37.  
  38. #define exp1_adres    0x20
  39. #define exp2_adres    0x27
  40.  
  41. // ------------------------------------------------------------ //
  42. // ----------------- P I R ------------------------------------ //
  43. // ------------------------------------------------------------ //
  44. //        !!! NANO piny A6 i A7 są tylko analogowe !!!          //
  45. // ------------------------------------------------------------ //
  46. //
  47. //   pirAI_Time   ---> czas auto wyłączenie przekaźnika
  48. //   pirAI_Relay  ---> numer przekaznika podpiętego pod PIR
  49. //   pirPin       ---> pin I/O gdzie wpięty jest czujnik PIR
  50. //
  51.  
  52. #define pirPin A3  
  53. #define pirAI_Time  180000UL
  54. #define pirAI_Relay 0
  55.  
  56. // ----------------- wyswietlacz TM1637 ----------------------- //
  57.  
  58. #define CLK 2
  59. #define DIO 3
  60.  
  61. // ----------------- CZUJNIK LDR ----------------------------- //
  62.  
  63. #define LDR A5
  64. #define ldrAI_Relay 1
  65. #define ldrAI_Time  300000UL
  66. #define minLight 35
  67. int Oswietlenie;
  68.  
  69. // ----------------- CZUJNIK DHT ----------------------------- //
  70.  
  71. #define DHTTYPE DHT11
  72. #define DHTPIN 7
  73. #define dhtAI_Time 600000UL
  74. #define dhtAI_Relay 2
  75. #define maxTemp 23
  76.  
  77. float temperatura = 0;     // temperatura
  78. float wilgotnosc = 0;      // wilgotnosc
  79.  
  80. // ----------------- SYGNALIZATOR ---------------------------- //
  81.  
  82. #define ORANGE 9
  83. #define GREEN  10
  84. #define RED    8
  85.  
  86. bool OrangeLed = true;    // stan logiczny diody ORANGE
  87.  
  88. // ----------------- panel LED & KEY -------------------------- //
  89.  
  90. #define str_pin   4
  91. #define clk_pin   5
  92. #define dat_pin   6
  93.  
  94. #define CLOCK_TYPE CLOCK_INVERT
  95. #define CLOCK_DELAY_US 1
  96.  
  97. uint8_t przycisk = 0;
  98.  
  99. const uint8_t LED_adres[] = { 0xC1, 0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF};                   // adresy LED moduły LED & KEY
  100.  
  101. const uint8_t DIGIT_adres[] = { 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE};                 // adresy DIGIT moduły LED & KEY
  102.  
  103.                                 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/ /*8*/ /*9*/
  104. const uint8_t digits[] =      { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };    // cyfry bez kropki
  105.  
  106.                                 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/ /*8*/ /*9*/
  107. const uint8_t digits_dots[] = { 0xBF, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef };    // cyfry z kropką
  108.  
  109. // ----------------- PRZEKAZNIKI -------------------------- //
  110.  
  111. bool R_Status [8];        // stan logiczny przekaźników
  112.  
  113. // --------------------------------------------------------------------------------------------------------------------------------- //
  114. // --- O B I E K T Y --------------------------------------------------------------------------------------------------------------- //
  115. // --------------------------------------------------------------------------------------------------------------------------------- //
  116.  
  117.  
  118. virtuabotixRTC myRTC(A0, A1, A2);                         // obiekt myRTC
  119. TM1637Display display = TM1637Display(CLK, DIO);          // obiekt DISPLAY
  120. PCF8574 expander1(exp1_adres);                            // expander 1                            
  121. PCF8574 expander2(exp2_adres);                            // expander 2
  122. DHT dht(DHTPIN, DHTTYPE);
  123.  
  124. // --------------------------------------------------------------------------------------------------------------------------------- //
  125. // --- Zmienne globalne ------------------------------------------------------------------------------------------------------------ //
  126. // --------------------------------------------------------------------------------------------------------------------------------- //
  127.  
  128. struct RTC
  129. {
  130.     uint8_t   godzina = 0;
  131.     uint8_t   minuta  = 0;
  132.     uint8_t   sekunda = 0;
  133.     uint8_t   dzien_tygodnia = 0;
  134.     uint8_t   dzien = 0;
  135.     uint8_t   miesiac = 0;
  136.     uint16_t  rok = 0;
  137. }
  138. zegar;
  139.  
  140.  
  141. unsigned long aktualnyCzas = 0;    
  142.  
  143. unsigned long zapamietanyCzas1 = 0;    // dla millis
  144. unsigned long roznicaCzasu1 = 0;       // dla millis
  145.  
  146. unsigned long zapamietanyCzas2 = 0;    // dla millis
  147. unsigned long roznicaCzasu2 = 0;       // dla millis
  148.  
  149. unsigned long zapamietanyCzas3 = 0;    // dla millis
  150. unsigned long roznicaCzasu3 = 0;       // dla millis
  151.  
  152. unsigned long zapamietanyCzas4 = 0;    // dla millis
  153. unsigned long roznicaCzasu4 = 0;       // dla millis
  154.  
  155. unsigned long zapamietanyCzas5 = 0;    // dla millis
  156. unsigned long roznicaCzasu5 = 0;       // dla millis
  157.  
  158. bool F_sec = false;                    // sekundnik wyświetlacza TM1637 (:)
  159.  
  160. // --------------------------------------------------------------------------------------------------------------------------------- //
  161. // --- P I R ----------------------------------------------------------------------------------------------------------------------- //
  162. // --------------------------------------------------------------------------------------------------------------------------------- //
  163.  
  164. int                 calibrationTime = 30;
  165. long unsigned int   lowIn;
  166. long unsigned int   pause = 5000;
  167. boolean             lockLow = true;
  168. boolean             takeLowTime;
  169. int                 PIRValue = 0;
  170.  
  171. // --------------------------------------------------------------------------------------------------------------------------------- //
  172. // --- Aktualizuj Czas do Strukrury zegar ------------------------------------------------------------------------------------------ //
  173. // --------------------------------------------------------------------------------------------------------------------------------- //
  174.  
  175. void AktualizujCzas()
  176. {
  177.     myRTC.updateTime();                               // pobierz czas z zegara
  178.  
  179.     zegar.godzina         =   myRTC.hours;            // pobierz i zapisz godzinę
  180.     zegar.minuta          =   myRTC.minutes;          // pobierz i zapisz minutę
  181.     zegar.sekunda         =   myRTC.seconds;          // pobierz i zapisz sekundę
  182.     zegar.dzien           =   myRTC.dayofmonth;       // pobierz i zapisz dzień miesiąca
  183.     zegar.dzien_tygodnia  =   myRTC.dayofweek;        // pobierz i zapisz dzień tygodnia
  184.     zegar.miesiac         =   myRTC.month;            // pobierz i zapisz miesiąc
  185.     zegar.rok             =   myRTC.year;             // pobierz i zapisz rok      
  186. }
  187. // --------------------------------------------------------------------------------------------------------------------------------- //
  188. // --- Aktualizuj Czas do Strukrury zegar ------------------------------------------------------------------------------------------ //
  189. // --------------------------------------------------------------------------------------------------------------------------------- //
  190.  
  191. void WyswietlCzas()
  192. {
  193.     int clock;
  194.     byte bufor;
  195.  
  196.     bufor = zegar.godzina / 10;       // (HH / 10)    - podziel, wyznacz część całkowitą (dziesiątki) godziny
  197.     clock = 1000 * bufor;             // (Hh * 1000)  - zapisz Hx:xx
  198.  
  199.     bufor = zegar.godzina % 10;       // (HH % 10)    - reszcza z dzielenia, wyznacz część całkowitą (jedności) godziny
  200.     clock = clock + (bufor * 100);    // (hH * 100)   - zapisz xH:xx
  201.  
  202.     bufor = zegar.minuta / 10;        // (MM / 10)    - podziel, wyznacz część całkowitą (dziesiątki) minuty
  203.     clock = clock + (bufor * 10);     // (Mm * 10)    - zapisz xx:Mx
  204.  
  205.     bufor = zegar.minuta % 10;        // (MM % 10)    - reszcza z dzielenia, wyznacz część całkowitą (jedności) minuty
  206.     clock = clock + (bufor * 1);      // (mM * 1)     - zapisz xx:xM
  207.  
  208.     if (F_sec)                                                           // jeśli flaga jest prawdziwa (true)
  209.     {
  210.         display.showNumberDecEx(clock, 0b11100000, true, 4, 0);          // wyświetl dwukropek między godziną a minutą
  211.         F_sec = false;                                                   // przestaw flagę na fałszywą (false)
  212.         if (OrangeLed) digitalWrite(ORANGE, LOW);
  213.     }
  214.     else                                                                 // jeśli flaga jest fałszywa (false)
  215.     {
  216.         display.showNumberDecEx(clock, 0b00000000, true, 4, 0);          // nie wyświetlaj dwukropka między godziną a minutą      
  217.         F_sec = true;                                                    // przestaw flagę na prawdziwą (true)
  218.         if (OrangeLed) digitalWrite(ORANGE, HIGH);
  219.     }
  220. }
  221.  
  222. // --------------------------------------------------------------------------------------------------------------------------------- //
  223. // --- S E T    R T C -------------------------------------------------------------------------------------------------------------- //
  224. // --------------------------------------------------------------------------------------------------------------------------------- //
  225.  
  226. void setRTC()
  227. {
  228.     myRTC.setDS1302Time(0, 36, 9, 1, 17, 5, 2021);
  229. }
  230.  
  231. // --------------------------------------------------------------------------------------------------------------------------------- //
  232. // --- E X P A N D E R   I N I T    1 ---------------------------------------------------------------------------------------------- //
  233. // --------------------------------------------------------------------------------------------------------------------------------- //
  234.  
  235. void ExpanderInit_1()
  236. {
  237.     expander1.begin();
  238.     expander1.pinMode(P0, OUTPUT);
  239.     expander1.pinMode(P1, OUTPUT);
  240.     expander1.pinMode(P2, OUTPUT);
  241.     expander1.pinMode(P3, OUTPUT);
  242.     expander1.pinMode(P4, OUTPUT);
  243.     expander1.pinMode(P5, OUTPUT);
  244.     expander1.pinMode(P6, OUTPUT);
  245.     expander1.pinMode(P7, OUTPUT);    
  246. }
  247.  
  248. // --------------------------------------------------------------------------------------------------------------------------------- //
  249. // --- E X P A N D E R   I N I T    2 ---------------------------------------------------------------------------------------------- //
  250. // --------------------------------------------------------------------------------------------------------------------------------- //
  251.  
  252. void ExpanderInit_2()
  253. {
  254.     expander2.begin();
  255.  
  256.    
  257. }
  258.  
  259. // --------------------------------------------------------------------------------------------------------------------------------- //
  260. // ---P I R   I N I T    ----------------------------------------------------------------------------------------------------------- //
  261. // --------------------------------------------------------------------------------------------------------------------------------- //
  262.  
  263. void PirInit()
  264. {
  265.     pinMode(pirPin, INPUT);        // czujnik ruchu
  266. }
  267.  
  268. // --------------------------------------------------------------------------------------------------------------------------------- //
  269. // --- S E T U P ------------------------------------------------------------------------------------------------------------------- //
  270. // --------------------------------------------------------------------------------------------------------------------------------- //
  271.  
  272. void setup()
  273. {
  274.     #if SERIAL
  275.         Serial.begin(SerialSpeed);
  276.         Serial.print(F("[SETUP] [SERIAL] Serial Speed : "));
  277.         Serial.print(SerialSpeed);
  278.     #endif
  279.  
  280.     pinMode(A0,OUTPUT);                   // RTC Clock -> pin CLK
  281.     pinMode(A1,OUTPUT);                   // RTC Clock -> pin DAT
  282.     pinMode(A2,OUTPUT);                   // RTC Clock -> pin RST
  283.    
  284.  
  285.     display.clear();
  286.     display.setBrightness(7);  
  287.  
  288.     #if RTC_SET
  289.         setRTC();
  290.     #endif
  291.  
  292.     pinMode(str_pin, OUTPUT);              // digital 4 OUT dla strobe (LED & KEY)
  293.     pinMode(clk_pin, OUTPUT);              // digital 3 OUT dla clock (LED & KEY)
  294.     pinMode(dat_pin, OUTPUT);              // digital 2 OIT dla data (LED & KEY)
  295.        
  296.     sendCommand(0x8f);                     // activate LED & KEY
  297.     reset();                               // reset LED & KEY
  298.     flash_LEDKEY();
  299.     flash_LEDKEY();
  300.     flash_LEDKEY();
  301.  
  302.     for(byte i = 0; i < 8; i++)
  303.     {
  304.         RelayTurnOff(i);                   // diody i wyświetlacz dla przekaźników OFF
  305.         R_Status[i] = false;               // status przekaźników FALSE ( OFF )
  306.     }
  307.  
  308.     ExpanderInit_1();                      // inicjuj EXPANDER 1 (adres 0x20)        
  309.     ExpanderInit_2();                      // inicjuj EXPANDER 2 (adres 0x27)
  310.  
  311.     PirInit();
  312.  
  313.     pinMode(RED, OUTPUT);  
  314.     pinMode(ORANGE, OUTPUT);  
  315.     pinMode(GREEN, OUTPUT);  
  316.  
  317.     dht.begin();                          // moduł DHT
  318.    
  319. }
  320.  
  321. // --------------------------------------------------------------------------------------------------------------------------------- //
  322. // --- L O O P --------------------------------------------------------------------------------------------------------------------- //
  323. // --------------------------------------------------------------------------------------------------------------------------------- //
  324.  
  325. void loop()
  326. {
  327.  
  328.     aktualnyCzas = millis();                                    
  329.  
  330.     roznicaCzasu1 = aktualnyCzas - zapamietanyCzas1;            
  331.     roznicaCzasu2 = aktualnyCzas - zapamietanyCzas2;    
  332.     roznicaCzasu3 = aktualnyCzas - zapamietanyCzas3;    // czujnik PIR
  333.     roznicaCzasu4 = aktualnyCzas - zapamietanyCzas4;    // czujnik LDR
  334.     roznicaCzasu5 = aktualnyCzas - zapamietanyCzas5;    // czujnik DHT
  335.  
  336.     PIRSensor();
  337.  
  338.     // --- warunek wykonywany co 1 minutę ------------------------------------------------------- //
  339.  
  340.     if (roznicaCzasu2 >= 10000UL)                                 // wykonuj co minutę
  341.     {                                                            
  342.         AktualizujCzas();                                         // zapisz z zegara do struktury
  343.         LDRSensor();                                              // zrób pomiar oświetlenia
  344.         DHTSensor();                                              // zrób pomiar temperatury i wilgotnosci
  345.         zapamietanyCzas2 = aktualnyCzas;                          // resetuj warunek                    
  346.     }          
  347.  
  348.     // --- warunek wykonywany co 1 sekundę ------------------------------------------------------ //
  349.  
  350.     if (roznicaCzasu1 >= 1000UL)                                 // wykonuj co 1 sekundę
  351.     {  
  352.         WyswietlCzas();                                           // wyświetl czas na TM1637        
  353.         zapamietanyCzas1 = aktualnyCzas;                          // resetuj warunek
  354.     }          
  355.  
  356.     // ------------------------------------------------------------------------------------------ //    
  357.  
  358.     if (roznicaCzasu3 >= pirAI_Time)                              // wejdz po 3 minutach
  359.     {  
  360.         RelayTurnOff(pirAI_Relay);                                // wyłącz przekaźnik (PIR Time Out)
  361.         OrangeLed = true;
  362.         digitalWrite(RED, LOW);
  363.         digitalWrite(GREEN, LOW);
  364.         zapamietanyCzas3 = aktualnyCzas;                          // resetuj warunek
  365.     }          
  366.  
  367.     // ------------------------------------------------------------------------------------------ //    
  368.  
  369.     if (roznicaCzasu4 >= ldrAI_Time)                              // wejdz po 3 minutach
  370.     {  
  371.         RelayTurnOff(ldrAI_Relay);                                // wyłącz przekaźnik (LDR Time Out)        
  372.         zapamietanyCzas4 = aktualnyCzas;                          // resetuj warunek
  373.     }          
  374.  
  375.     // ------------------------------------------------------------------------------------------ //    
  376.  
  377.     if (roznicaCzasu5 >= dhtAI_Time)                              // wejdz po 5 minutach
  378.     {  
  379.         RelayTurnOff(dhtAI_Relay);                                // wyłącz przekaźnik (DHT Time Out)        
  380.         zapamietanyCzas5 = aktualnyCzas;                          // resetuj warunek
  381.     }          
  382.  
  383.     // ------------------------------------------------------------------------------------------ //
  384.  
  385.     przycisk = readButtons();
  386.  
  387.     switch (przycisk)
  388.     {
  389.         case      1   :   RelaySwitch(0);   break;
  390.         case      2   :   RelaySwitch(1);   break;
  391.         case      4   :   RelaySwitch(2);   break;
  392.         case      8   :   RelaySwitch(3);   break;
  393.         case     16   :   RelaySwitch(4);   break;
  394.         case     32   :   RelaySwitch(5);   break;
  395.         case     64   :   RelaySwitch(6);   break;
  396.         case    128   :   RelaySwitch(7);   break;
  397.         default       : break;
  398.  
  399.     }
  400.    
  401.     // ------------------------------------------------------------------------------------------ //
  402. }
  403.  
  404. ///////////////////////////////////////////////////////////////////////////////////////////////
  405. //  RelaySwitch
  406. ///////////////////////////////////////////////////////////////////////////////////////////////
  407.  
  408. void RelaySwitch(byte nr)
  409. {
  410.     if ( R_Status[nr])
  411.     {
  412.         RelayTurnOff(nr);
  413.         R_Status[nr] = false;
  414.     }
  415.     else
  416.     if (!R_Status[nr])
  417.     {
  418.         RelayTurnOn(nr);
  419.         R_Status[nr] = true;
  420.     }
  421. }
  422.  
  423. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  424. //  *** L E D   &   K E Y   C O M M A N D ***                                                                              //
  425. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  426.  
  427. void sendCommand(uint8_t value)
  428. {
  429.     digitalWrite(str_pin, LOW);
  430.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, value);
  431.     digitalWrite(str_pin, HIGH);
  432. }
  433.  
  434.  
  435. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  436. //   *** R E S E T   L E D   &   K E Y ***                                                                                 //
  437. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  438.  
  439. void reset()
  440. {
  441.     sendCommand(0x40);
  442.     digitalWrite(str_pin, LOW);
  443.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0xc0);       // reset od adresu 0
  444.  
  445.     for (uint8_t i = 0; i < 16; i++)                                                 // petla 16x
  446.     {
  447.         shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x00);   // 8x LED + 8x DIGIT reset
  448.     }
  449.     digitalWrite(str_pin, HIGH);
  450. }
  451.  
  452. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  453. //   *** D E M O   N A   S T A R C I E   A R D U I N O ***                                                                 //
  454. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  455.  
  456. void flash_LEDKEY()          
  457. {
  458.     for (uint8_t i = 0; i < 16; i++)                                   // zapal diody 1-8 z przerwą 100ms
  459.     {
  460.         if (i < 8) setLed(1, i);                                       // zapal diodę na pozycji i jesli i<8
  461.         else setLed(0, i - 8);                                         // zgas diodę na pozycji i jeśli i>8
  462.         delay(100);
  463.     }
  464. }
  465.  
  466. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  467. //   *** Z A P A L   L U B   Z G A Ś   D I O D Ę   N A   L E D   &   K E Y ***                                             //
  468. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  469.  
  470. void setLed(uint8_t flaga, uint8_t adres)
  471. {
  472.     pinMode(dat_pin, OUTPUT);                                                              
  473.     sendCommand(0x44);
  474.     digitalWrite(str_pin, LOW);
  475.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, LED_adres[adres]);
  476.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, flaga);
  477.     digitalWrite(str_pin, HIGH);
  478. }
  479.  
  480. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  481. //  *** O D C Z Y T A J   P R Z Y C I S K   Z    L E D   &   K E Y ***                                                     //
  482. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  483.  
  484. uint8_t readButtons(void)
  485. {
  486.     uint8_t buttons = 0;
  487.     digitalWrite(str_pin, LOW);
  488.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x42);
  489.  
  490.     pinMode(dat_pin, INPUT);
  491.  
  492.     for (uint8_t i = 0; i < 4; i++)
  493.     {
  494.         uint8_t v = shiftInMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US) << i;
  495.         buttons |= v;
  496.     }
  497.  
  498.     pinMode(dat_pin, OUTPUT);
  499.     digitalWrite(str_pin, HIGH);  
  500.     delay(200);
  501.  
  502.     return buttons;                                               // zwróć kod przycisku
  503. }
  504.  
  505. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  506. // ***  W Y Ł Ą C Z   P R Z E K A Ź N I K  ***                                                                             //
  507. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  508.  
  509. void RelayTurnOff(byte adres)
  510. {
  511.     digitalWrite(str_pin, LOW);                                                                 // pin strobe na OFF
  512.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_adres[adres]);    // ustaw adres
  513.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x5c);                  // ustaw 0 (0x3f)
  514.     digitalWrite(str_pin, HIGH);                                                                // zapal OFF na wyświetlaczu
  515.     setLed(0, adres);                                                                           // wyłącz diodę dla przekaźnika
  516.     expander1.digitalWrite(adres, HIGH);                                                        // wyłącz przekaźnik na expander1
  517.     R_Status[adres] = false;                                                                    // ustaw status przekaźnika na OFF
  518. }
  519.  
  520. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  521. //   *** W Ł Ą C Z   P R Z E K A Ź N I K ***                                                                               //
  522. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  523.  
  524. void RelayTurnOn(byte adres)
  525. {
  526.     digitalWrite(str_pin, LOW);                                                                 // pin strobe na OFF
  527.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_adres[adres]);    // ustaw adres
  528.     shiftOutMod(dat_pin, clk_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x63);                  // ustaw 1 (0x3f)
  529.     digitalWrite(str_pin, HIGH);                                                                // zapal ON na wyświetlaczu
  530.     setLed(1, adres);                                                                           // włącz diodę dla przekaźnika
  531.     expander1.digitalWrite(adres, LOW);                                                         // włącz przekaźnik na expander1
  532.     R_Status[adres] = true;                                                                     // ustaw status przekaźnika na ON
  533. }
  534.  
  535. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  536. //   *** P I R   S E N S O R  ***                                                                                          //
  537. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  538.  
  539. void PIRSensor()
  540. {
  541.    if(digitalRead(pirPin) == HIGH)
  542.    {
  543.         if(lockLow)
  544.         {
  545.             PIRValue = 1;
  546.             lockLow = false;
  547.  
  548.             zapamietanyCzas3 = aktualnyCzas;
  549.             RelayTurnOn(pirAI_Relay);
  550.  
  551.             #if SERIAL
  552.                 Serial.print(F("\n[PIR] Wykryto ruch..."));
  553.             #endif
  554.  
  555.             digitalWrite(RED,LOW);        // wyłącz diodę czerwoną
  556.             digitalWrite(GREEN,HIGH);     // włącz diodę zieloną
  557.             digitalWrite(ORANGE,LOW);     // zgas diode pomaranczowa
  558.  
  559.             OrangeLed = false;            // wylacz syngalizacje czuwania            
  560.          
  561.           delay(50);
  562.       }
  563.  
  564.       takeLowTime = true;
  565.    }
  566.    
  567.    if(digitalRead(pirPin) == LOW)
  568.    {
  569.         if(takeLowTime)
  570.         {
  571.             lowIn = millis();
  572.             takeLowTime = false;
  573.         }
  574.      
  575.         if(!lockLow && millis() - lowIn > pause)
  576.         {
  577.             PIRValue = 0;
  578.             lockLow = true;
  579.  
  580.             #if SERIAL
  581.                 Serial.print(F("\n[PIR} Brak ruchu..."));
  582.             #endif
  583.  
  584.             digitalWrite(RED,HIGH);       // zapal diodę czerwoną
  585.             digitalWrite(GREEN,LOW);      // zgaś diodę zieloną
  586.             digitalWrite(ORANGE,LOW);     // zgas diode pomaranczowa
  587.  
  588.             OrangeLed = false;            // wylacz syngalizacje czuwania
  589.  
  590.             delay(50);            
  591.         }
  592.     }
  593. }
  594.  
  595. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  596. // LDR
  597. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  598.  
  599. void LDRSensor()
  600. {              
  601.       int analog_value = analogRead(LDR);
  602.       Serial.print("\nanalog : ");
  603.       Serial.print(analog_value);
  604.       Oswietlenie = map(analog_value, 0, 1025, 99, 0);         // mapuj odczyt do wartości (0-100) i odwróć wartości  
  605.  
  606.       #if SERIAL
  607.           Serial.print(F("\n[LDR] Oswietlenie [%] "));
  608.           Serial.print(Oswietlenie);
  609.       #endif  
  610.  
  611.       if (Oswietlenie < minLight)                              // jeśli oświetlenie < minLight włącz przekaźnik ldrAI_Relay
  612.       {
  613.             zapamietanyCzas4 = aktualnyCzas;
  614.             RelayTurnOn(ldrAI_Relay);          
  615.       }
  616. }
  617.  
  618. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  619. // DHT 11
  620. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  621.  
  622. void DHTSensor()
  623. {              
  624.     wilgotnosc   = dht.readHumidity();
  625.     temperatura  = dht.readTemperature();
  626.  
  627.     if ( isnan(wilgotnosc) || isnan(temperatura) )
  628.     {
  629.         #if SERIAL
  630.             Serial.print(F("\n[DHT] Blad odczytu z czujnika DHT11 !"));
  631.         #endif
  632.  
  633.         return;
  634.     }
  635.     else
  636.     {
  637.         #if SERIAL
  638.             Serial.print(F("\n[DHT] Temperatura : "));
  639.             Serial.print(temperatura);
  640.             Serial.print(F(" st.C"));
  641.             Serial.print(F("\n[DHT] Wilgotnosc  : "));
  642.             Serial.print(wilgotnosc);
  643.             Serial.print(F(" %rH"));
  644.         #endif
  645.  
  646.         if (temperatura > maxTemp)                              // jeśli temperatura < maxTemp włącz przekaźnik dhtAI_Relay
  647.         {
  648.             zapamietanyCzas5 = aktualnyCzas;
  649.             RelayTurnOn(dhtAI_Relay);          
  650.         }
  651.     }
  652. }
Add Comment
Please, Sign In to add comment