PowerTGS440

Project_Dzialka_v0.2

May 17th, 2021
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.24 KB | None | 0 0
  1. // --------------------------------------------------------------------------------------------------------------------------------- //
  2. //
  3. // Projekt   :   Działka Project 1 coś z tym badziewiem w szufladzie trzeba zrobić...
  4. // Autor     :   Tomasz Majcher
  5. //
  6. //
  7. // --------------------------------------------------------------------------------------------------------------------------------- //
  8. //
  9. //  wersja 0.2    :   wyświetlacz TM1637
  10. //  wersja 0.1    :   zegar RTC
  11. //
  12. // --------------------------------------------------------------------------------------------------------------------------------- //
  13.  
  14.  
  15. #include <virtuabotixRTC.h>             // biblioteka zegar RTC  
  16. #include <TM1637Display.h>              // wyświetlacz TM1637
  17.  
  18. #define SerialSpeed 9600                // serial prędkość
  19. #define SERIAL      true                // serial wyświetl tak (true) / nie (false)
  20. #define RTC_SET     false               // aktualizacja manualna zegara RTC
  21.  
  22. #define CLK 2
  23. #define DIO 3
  24.  
  25.  
  26. virtuabotixRTC myRTC(A0, A1, A2);                         // obiekt myRTC
  27. TM1637Display display = TM1637Display(CLK, DIO);          // obiekt DISPLAY
  28.  
  29. // --------------------------------------------------------------------------------------------------------------------------------- //
  30. // --- Zmienne globalne ------------------------------------------------------------------------------------------------------------ //
  31. // --------------------------------------------------------------------------------------------------------------------------------- //
  32.  
  33. struct RTC
  34. {
  35.     uint8_t   godzina = 0;
  36.     uint8_t   minuta  = 0;
  37.     uint8_t   sekunda = 0;
  38.     uint8_t   dzien_tygodnia = 0;
  39.     uint8_t   dzien = 0;
  40.     uint8_t   miesiac = 0;
  41.     uint16_t  rok = 0;
  42. }
  43. zegar;
  44.  
  45.  
  46. unsigned long aktualnyCzas = 0;    
  47.  
  48. unsigned long zapamietanyCzas1 = 0;    // dla millis
  49. unsigned long roznicaCzasu1 = 0;       // dla millis
  50.  
  51. unsigned long zapamietanyCzas2 = 0;    // dla millis
  52. unsigned long roznicaCzasu2 = 0;       // dla millis
  53.  
  54. bool F_sec = false;                    // sekundnik wyświetlacza TM1637 (:)
  55.  
  56. // --------------------------------------------------------------------------------------------------------------------------------- //
  57. // --- Aktualizuj Czas do Strukrury zegar ------------------------------------------------------------------------------------------ //
  58. // --------------------------------------------------------------------------------------------------------------------------------- //
  59.  
  60. void AktualizujCzas()
  61. {
  62.     myRTC.updateTime();                               // pobierz czas z zegara
  63.  
  64.     zegar.godzina         =   myRTC.hours;            // pobierz i zapisz godzinę
  65.     zegar.minuta          =   myRTC.minutes;          // pobierz i zapisz minutę
  66.     zegar.sekunda         =   myRTC.seconds;          // pobierz i zapisz sekundę
  67.     zegar.dzien           =   myRTC.dayofmonth;       // pobierz i zapisz dzień miesiąca
  68.     zegar.dzien_tygodnia  =   myRTC.dayofweek;        // pobierz i zapisz dzień tygodnia
  69.     zegar.miesiac         =   myRTC.month;            // pobierz i zapisz miesiąc
  70.     zegar.rok             =   myRTC.year;             // pobierz i zapisz rok    
  71.  
  72.     #if SERIAL
  73.         Serial.print(F("\n[AktualizujCzas] aktualizacja struktury : zegar"));          
  74.     #endif
  75. }
  76. // --------------------------------------------------------------------------------------------------------------------------------- //
  77. // --- Aktualizuj Czas do Strukrury zegar ------------------------------------------------------------------------------------------ //
  78. // --------------------------------------------------------------------------------------------------------------------------------- //
  79.  
  80. void WyswietlCzas()
  81. {
  82.     int clock;
  83.     byte bufor;
  84.  
  85.     bufor = zegar.godzina / 10;       // (HH / 10)    - podziel, wyznacz część całkowitą (dziesiątki) godziny
  86.     clock = 1000 * bufor;             // (Hh * 1000)  - zapisz Hx:xx
  87.  
  88.     bufor = zegar.godzina % 10;       // (HH % 10)    - reszcza z dzielenia, wyznacz część całkowitą (jedności) godziny
  89.     clock = clock + (bufor * 100);    // (hH * 100)   - zapisz xH:xx
  90.  
  91.     bufor = zegar.minuta / 10;        // (MM / 10)    - podziel, wyznacz część całkowitą (dziesiątki) minuty
  92.     clock = clock + (bufor * 10);     // (Mm * 10)    - zapisz xx:Mx
  93.  
  94.     bufor = zegar.minuta % 10;        // (MM % 10)    - reszcza z dzielenia, wyznacz część całkowitą (jedności) minuty
  95.     clock = clock + (bufor * 1);      // (mM * 1)     - zapisz xx:xM
  96.  
  97.     if (F_sec)                                                           // jeśli flaga jest prawdziwa (true)
  98.     {
  99.         display.showNumberDecEx(clock, 0b11100000, true, 4, 0);          // wyświetl dwukropek między godziną a minutą
  100.         F_sec = false;                                                   // przestaw flagę na fałszywą (false)
  101.     }
  102.     else                                                                 // jeśli flaga jest fałszywa (false)
  103.     {
  104.         display.showNumberDecEx(clock, 0b00000000, true, 4, 0);          // nie wyświetlaj dwukropka między godziną a minutą      
  105.         F_sec = true;                                                    // przestaw flagę na prawdziwą (true)
  106.     }
  107. }
  108.  
  109. // --------------------------------------------------------------------------------------------------------------------------------- //
  110. // --- S E T    R T C -------------------------------------------------------------------------------------------------------------- //
  111. // --------------------------------------------------------------------------------------------------------------------------------- //
  112.  
  113. void setRTC()
  114. {
  115.     myRTC.setDS1302Time(0, 36, 9, 1, 17, 5, 2021);
  116. }
  117.  
  118. // --------------------------------------------------------------------------------------------------------------------------------- //
  119. // --- S E T U P ------------------------------------------------------------------------------------------------------------------- //
  120. // --------------------------------------------------------------------------------------------------------------------------------- //
  121.  
  122. void setup()
  123. {
  124.     #if SERIAL
  125.         Serial.begin(SerialSpeed);
  126.         Serial.print(F("[SETUP] [SERIAL] Serial Speed : "));
  127.         Serial.print(SerialSpeed);
  128.     #endif
  129.  
  130.     pinMode(A0,OUTPUT);                   // RTC Clock -> pin CLK
  131.     pinMode(A1,OUTPUT);                   // RTC Clock -> pin DAT
  132.     pinMode(A2,OUTPUT);                   // RTC Clock -> pin RST
  133.  
  134.     display.clear();
  135.     display.setBrightness(7);  
  136.  
  137.     #if RTC_SET
  138.         setRTC();
  139.     #endif
  140.  
  141.    
  142. }
  143.  
  144. // --------------------------------------------------------------------------------------------------------------------------------- //
  145. // --- L O O P --------------------------------------------------------------------------------------------------------------------- //
  146. // --------------------------------------------------------------------------------------------------------------------------------- //
  147.  
  148. void loop()
  149. {
  150.  
  151.     aktualnyCzas = millis();                                    
  152.  
  153.     roznicaCzasu1 = aktualnyCzas - zapamietanyCzas1;            
  154.     roznicaCzasu2 = aktualnyCzas - zapamietanyCzas2;    
  155.  
  156.     // --- warunek wykonywany co 1 minutę ------------------------------------------------------- //
  157.  
  158.     if (roznicaCzasu2 >= 60000UL)                                 // wykonuj co minutę
  159.     {                                                            
  160.         AktualizujCzas();                                         // zapisz z zegara do struktury
  161.         zapamietanyCzas2 = aktualnyCzas;                          // resetuj warunek                    
  162.     }          
  163.  
  164.     // --- warunek wykonywany co 1 sekundę ------------------------------------------------------ //
  165.  
  166.     if (roznicaCzasu1 >= 1000UL)                                 // wykonuj co 1 sekundę
  167.     {  
  168.         WyswietlCzas();                                           // wyświetl czas na TM1637        
  169.         zapamietanyCzas1 = aktualnyCzas;                          // resetuj warunek
  170.     }          
  171.  
  172.     // ------------------------------------------------------------------------------------------ //
  173. }
  174.  
  175.  
Advertisement
Add Comment
Please, Sign In to add comment