PowerTGS440

NANO CLOCK

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