PowerTGS440

RGB-MATRIX-CLOCK v0.5

Jul 30th, 2021 (edited)
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 32.94 KB | None | 0 0
  1. // ------------------------------------------------------------------------------------------------------------------- //
  2. //                                                                                                                     //
  3. // Simple ESP8266 NodeMCU 0.5 RGB-MATRIX-CLOCK by TOMASZ MAJCHER (TRANSLINE GROUP POAND)                               //
  4. //                                                                                                                     //
  5. // e-mail  : [email protected]                                                                               //
  6. // licence : OpenSource                                                                                                //
  7. // paypal  : @TomaszMajcher                                                                                            //
  8. // www     : https://esp32dev.blogspot.com/                                                                            //
  9. //                                                                                                                     //
  10. // ------------------------------------------------------------------------------------------------------------------- //
  11. //
  12. // v0.5 Free (30.07.2021) by Tomasz Majcher
  13. //
  14. // ------------------------------------------------------------------------------------------------------------------- //
  15.  
  16. #include <PxMatrix.h>
  17. #include "FreeMonoBold12pt7b.h"
  18. #include "kongtext4pt7b.h"
  19. #include <Ticker.h>
  20.  
  21. Ticker display_ticker;
  22.  
  23. #define P_LAT 16
  24. #define P_A 5
  25. #define P_B 4
  26. #define P_C 15
  27. #define P_D 12
  28. #define P_E 0
  29. #define P_OE 2
  30.  
  31. #define matrix_width 64
  32. #define matrix_height 32
  33.  
  34. uint8_t display_draw_time=10;
  35.  
  36. PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D);
  37.  
  38. // ------------------------------------------------------------------------------------------------------------------- //
  39. // --- my Standard Color --------------------------------------------------------------------------------------------- //
  40. // ------------------------------------------------------------------------------------------------------------------- //
  41.  
  42. uint16_t myRED = display.color565(255, 0, 0);
  43. uint16_t myGREEN = display.color565(0, 255, 0);
  44. uint16_t myBLUE = display.color565(0, 0, 255);
  45. uint16_t myWHITE = display.color565(255, 255, 255);
  46. uint16_t myYELLOW = display.color565(255, 255, 0);
  47. uint16_t myCYAN = display.color565(0, 255, 255);
  48. uint16_t myMAGENTA = display.color565(255, 0, 255);
  49. uint16_t myBLACK = display.color565(0, 0, 0);
  50. uint16_t mySha = display.color565(54,47,36);
  51. uint16_t myROSE = display.color565(255,0,127);
  52.  
  53. uint16_t myCOLORS[8]={myRED,myGREEN,myBLUE,myWHITE,myYELLOW,myCYAN,myMAGENTA,myBLACK};
  54. uint16_t myCOLORS2[9] = {myRED, myGREEN, myWHITE, myMAGENTA, myBLUE, myYELLOW, myCYAN, mySha, myROSE};
  55.  
  56. // ------------------------------------------------------------------------------------------------------------------- //
  57. // --- myBlue Color -------------------------------------------------------------------------------------------------- //
  58. // ------------------------------------------------------------------------------------------------------------------- //
  59.  
  60. uint16_t myBlue0 = display.color565(0,   0, 255);
  61. uint16_t myBlue1 = display.color565(0,  30, 255);
  62. uint16_t myBlue2 = display.color565(0,  60, 255);
  63. uint16_t myBlue3 = display.color565(0,  90, 255);
  64. uint16_t myBlue4 = display.color565(0, 120, 255);
  65. uint16_t myBlue5 = display.color565(0, 150, 255);
  66. uint16_t myBlue6 = display.color565(0, 180, 255);
  67. uint16_t myBlue7 = display.color565(0, 210, 255);
  68. uint16_t myBlue8 = display.color565(0, 250, 255);
  69.  
  70. uint16_t myBlue[9] = {myBlue0, myBlue1, myBlue2, myBlue3, myBlue4, myBlue5, myBlue6, myBlue7, myBlue8};
  71.  
  72. // ------------------------------------------------------------------------------------------------------------------- //
  73.  
  74. const char* Weekday[7] = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};
  75. const char* months []= {"Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
  76. int dow;
  77.  
  78. // ------------------------------------------------------------------------------------------------------------------- //
  79.  
  80. uint8_t r = 0, g = 0, b = 0;
  81.  
  82. // ------------------------------------------------------------------------------------------------------------------- //
  83. // --- MATRIX UPDATE FUNCTION ---------------------------------------------------------------------------------------- //
  84. // ------------------------------------------------------------------------------------------------------------------- //
  85.  
  86. void display_updater()
  87. {
  88.     display.display(display_draw_time);
  89. }
  90.  
  91. void display_update_enable(bool is_enable)
  92. {
  93.     if (is_enable)
  94.       {
  95.           display_ticker.attach(0.004, display_updater);
  96.       }
  97.       else
  98.       {
  99.           display_ticker.detach();
  100.       }
  101. }
  102.  
  103. // ------------------------------------------------------------------------------------------------------------------- //
  104. // --- L A N G U A G E   S E T U P ----------------------------------------------------------------------------------- //
  105. // ------------------------------------------------------------------------------------------------------------------- //
  106.  
  107. #define LANGUAGE 0                                            // 0 (Polish), 1 (English), 2 (Germany)
  108.                                                                
  109. #if LANGUAGE == 0                                                
  110.     #define POLISH 1
  111.     #define ENGLISH 0
  112.     #define GERMANY 0                                          
  113. #endif
  114.    
  115. #if LANGUAGE == 1                                                      
  116.     #define POLISH 0                                        
  117.     #define ENGLISH 1
  118.     #define GERMANY 0
  119. #endif
  120.  
  121. #if LANGUAGE == 2
  122.     #define POLISH 0
  123.     #define ENGLISH 0
  124.     #define GERMANY 1
  125. #endif      
  126.  
  127. // ------------------------------------------------------------------------------------------------------------------- //
  128. // --- M A C R O   D E F I N E --------------------------------------------------------------------------------------- //
  129. // ------------------------------------------------------------------------------------------------------------------- //
  130.  
  131. #define ARRAY_SIZE(a)   (sizeof(a) / sizeof((a)[0]))
  132.  
  133. const char *ssid     = "xxxxxx";                                       // network wifi ssid  
  134. const char *password = "xxxxxxxxxxx";                                  // network wifi password
  135.  
  136. // ------------------------------------------------------------------------------------------------------------------- //
  137. // --- I N C L U D E   L I B R A R Y --------------------------------------------------------------------------------- //
  138. // ------------------------------------------------------------------------------------------------------------------- //
  139.  
  140. extern "C" char* sbrk(int incr);
  141.  
  142. #include <ESP8266WiFi.h>                                         // biblioteka Wi-Fi
  143. #include <TaskScheduler.h>                                       // scheluder
  144. #include <TimeLib.h>
  145. #include <Arduino.h>
  146.  
  147. // ------------------------------------------------------------------------------------------------------------------- //
  148. // --- N T P   T I M E ----------------------------------------------------------------------------------------------- //
  149. // ------------------------------------------------------------------------------------------------------------------- //
  150.  
  151. #include <NTPClient_Generic.h>                                   // NTP klient (Time)
  152. #include <WiFiUdp.h>                                             // UDP dla NTP (Time)
  153.  
  154. WiFiUDP ntpUDP;  
  155.  
  156. char timeServer[] = "0.pl.pool.ntp.org";
  157.    
  158. #define TIME_ZONE_OFFSET_HRS            2                        // Europe, Poland (2)
  159. #define NTP_UPDATE_INTERVAL_MS          60000L                   // update interval
  160.  
  161. NTPClient timeClient(ntpUDP, timeServer, (3600 * TIME_ZONE_OFFSET_HRS), NTP_UPDATE_INTERVAL_MS);                                    
  162.  
  163. bool F_TimeUpdate = false;                                       // flag to update (second)
  164.  
  165. // ------------------------------------------------------------------------------------------------------------------- //
  166. // --- S E R I A L --------------------------------------------------------------------------------------------------- //
  167. // ------------------------------------------------------------------------------------------------------------------- //
  168.  
  169. #define SERIAL true
  170. #define SerialSpeed 57600
  171.  
  172. // ------------------------------------------------------------------------------------------------------------------- //
  173. // --- P R O T O T Y P Y --------------------------------------------------------------------------------------------- //
  174. // ------------------------------------------------------------------------------------------------------------------- //
  175.  
  176. void Task0Callback();                                                     // funkcja dla task_0    
  177. void Task1Callback();                                                     // funkcja dla task_1    
  178. void Task2Callback();                                                     // funkcja dla task_2    
  179. void Task3Callback();                                                     // funkcja dla task_3    
  180.  
  181. // ------------------------------------------------------------------------------------------------------------------- //
  182. // --- Z A D A N I A   S C H E L U D E R ' A ------------------------------------------------------------------------- //
  183. // ------------------------------------------------------------------------------------------------------------------- //
  184.                                                                                                      
  185.   Task task_0(  60000,  TASK_FOREVER, &Task0Callback);                     // task_0 - co 1 minutę
  186.   Task task_1(  60000,  TASK_FOREVER, &Task1Callback);                     // task_1 - co 1 minutę  
  187.   Task task_2(   1000,  TASK_FOREVER, &Task2Callback);                     // task_2 - co 1 sekundę  
  188.   Task task_3(  90000,  TASK_FOREVER, &Task3Callback);                     // task_3 - co 90 sekund
  189.                                                                                                      
  190.   Scheduler runner;    
  191.  
  192. // ------------------------------------------------------------------------------------------------------------------- //
  193. //                                              *** WiFi Reconect ***                                                  //
  194. // ------------------------------------------------------------------------------------------------------------------- //
  195.  
  196. unsigned long previousMillis = 0;
  197. unsigned long interval = 30000;
  198.  
  199. // ------------------------------------------------------------------------------------------------------------------- //
  200. //                                              *** STRUKTURA Time ***                                                 //
  201. // ------------------------------------------------------------------------------------------------------------------- //
  202.  
  203. struct TIME_DATA
  204. {
  205.       int Hour = 0;
  206.       int Minute  = 0;
  207.       int Second = 0;    
  208.       int DayOfTheWeek = 0;
  209.       int DayOfTheMonth = 0;
  210.       int Day = 0;
  211.       int Month = 0;
  212.       int Year = 0;
  213.  
  214.       String ShortTime = "NULL";
  215.  
  216.       String lastH = "NULL";
  217.       String lastM = "NULL";
  218.       String lastS = "NULL";
  219.       String currentH = "NULL";
  220.       String currentM = "NULL";
  221.       String currentS = "NULL";
  222.  
  223.       String lastampm = "NULL";
  224.       String currentampm = "NULL";
  225.  
  226.       String currentD = "NULL";
  227. }
  228. S_Time;
  229.  
  230.  
  231. // ------------------------------------------------------------------------------------------------------------------- //
  232. //                                              *** STRUKTURA DZIEN ***                                                //
  233. // ------------------------------------------------------------------------------------------------------------------- //
  234.  
  235. #if POLISH
  236.       const char Day_0 [] = "Niedziela";
  237.       const char Day_1 [] = "Poniedzialek";
  238.       const char Day_2 [] = "Wtorek";
  239.       const char Day_3 [] = "Sroda";
  240.       const char Day_4 [] = "Czwartek";
  241.       const char Day_5 [] = "Piatek";
  242.       const char Day_6 [] = "Sobota";
  243. #endif
  244.  
  245. #if ENGLISH
  246.       const char Day_0 [] = "Sunday";
  247.       const char Day_1 [] = "Monday";
  248.       const char Day_2 [] = "Tuesday";
  249.       const char Day_3 [] = "Wednesday";
  250.       const char Day_4 [] = "Thursday";
  251.       const char Day_5 [] = "Friday";
  252.       const char Day_6 [] = "Saturday";
  253. #endif
  254.  
  255. #if GERMANY
  256.       const char Day_0 [] = "Sonntag";
  257.       const char Day_1 [] = "Montag";
  258.       const char Day_2 [] = "Dienstag";
  259.       const char Day_3 [] = "Mittwoch";
  260.       const char Day_4 [] = "Donnerstag";
  261.       const char Day_5 [] = "Freitag";
  262.       const char Day_6 [] = "Samstag";
  263. #endif
  264.  
  265. const char * const DAY[] = { Day_0, Day_1, Day_2, Day_3, Day_4, Day_5, Day_6 }; // dni tygodnia [0..6]
  266.  
  267. // ------------------------------------------------------------------------------------------------------------------- //
  268. //                                              *** STRUKTURA MONTH ***                                                //
  269. // ------------------------------------------------------------------------------------------------------------------- //
  270.  
  271. #if POLISH
  272.       const char MONTH_0  [] = "NULL";
  273.       const char MONTH_1  [] = "Styczen";
  274.       const char MONTH_2  [] = "Luty";
  275.       const char MONTH_3  [] = "Marzec";
  276.       const char MONTH_4  [] = "Kwiecien";
  277.       const char MONTH_5  [] = "Maj";
  278.       const char MONTH_6  [] = "Czerwiec";
  279.       const char MONTH_7  [] = "Lipiec";
  280.       const char MONTH_8  [] = "Sierpien";
  281.       const char MONTH_9  [] = "Wrzesien";
  282.       const char MONTH_10 [] = "Pazdziernik";
  283.       const char MONTH_11 [] = "Listopad";
  284.       const char MONTH_12 [] = "Grudzien";
  285. #endif
  286.  
  287. #if ENGLISH
  288.       const char MONTH_0  [] = "NULL";
  289.       const char MONTH_1  [] = "January";
  290.       const char MONTH_2  [] = "February";
  291.       const char MONTH_3  [] = "March";
  292.       const char MONTH_4  [] = "April";
  293.       const char MONTH_5  [] = "May";
  294.       const char MONTH_6  [] = "June";
  295.       const char MONTH_7  [] = "July";
  296.       const char MONTH_8  [] = "August";
  297.       const char MONTH_9  [] = "September";
  298.       const char MONTH_10 [] = "October";
  299.       const char MONTH_11 [] = "November";
  300.       const char MONTH_12 [] = "December";
  301. #endif
  302.  
  303. #if GERMANY
  304.       const char MONTH_0  [] = "NULL";
  305.       const char MONTH_1  [] = "Januar";
  306.       const char MONTH_2  [] = "Februar";
  307.       const char MONTH_3  [] = "März";
  308.       const char MONTH_4  [] = "April";
  309.       const char MONTH_5  [] = "Mai";
  310.       const char MONTH_6  [] = "Juni";
  311.       const char MONTH_7  [] = "Juli";
  312.       const char MONTH_8  [] = "August";
  313.       const char MONTH_9  [] = "September";
  314.       const char MONTH_10 [] = "Oktober";
  315.       const char MONTH_11 [] = "November";
  316.       const char MONTH_12 [] = "Dezember";
  317. #endif
  318.      
  319. const char * const MONTH[] = { MONTH_0, MONTH_1, MONTH_2, MONTH_3, MONTH_4, MONTH_5, MONTH_6,
  320.                                MONTH_7, MONTH_8, MONTH_9, MONTH_10, MONTH_11, MONTH_12 };
  321.  
  322.  
  323. // ------------------------------------------------------------------------------------------------------------------- //
  324. // --- Task0Callback() ----------------------------------------------------------------------------------------------- //
  325. // ------------------------------------------------------------------------------------------------------------------- //
  326.  
  327. void Task0Callback()
  328. {
  329.      
  330. }
  331.  
  332. // ------------------------------------------------------------------------------------------------------------------- //
  333. // --- Task1Callback() ----------------------------------------------------------------------------------------------- //
  334. // ------------------------------------------------------------------------------------------------------------------- //
  335.  
  336. void Task1Callback()
  337. {
  338.     #if SERIAL
  339.         Serial.printf("\n\n[ESP] [TASK1] [Memory Free]     : %u [kB]", ESP.getFreeHeap());      
  340.         Serial.printf("\n[ESP] [TASK1] [CPU frequency]   : %u [MHz]",ESP.getCpuFreqMHz());  
  341.         Serial.printf("\n[ESP] [TASK1] [WiFi IP]         : "); Serial.print(WiFi.localIP() );
  342.        
  343.         Serial.printf("\n[ESP] [TASK1] [Local Time]      : ");
  344.        
  345.         Serial.print(String() + timeClient.getStrHours() + ":"
  346.                                 + timeClient.getStrMinutes() + ":"
  347.                                 + timeClient.getStrSeconds() + " "
  348.                                 + Weekday[timeClient.getWeek()-1] + " "
  349.                                 + timeClient.getDay() + "/"
  350.                                 + timeClient.getMonth() + "/"
  351.                                 + timeClient.getYear());
  352.        #if POLISH
  353.            Serial.printf("\n[ESP] [TASK1] [Local Time]      : ");
  354.            Serial.print(String() + timeClient.getStrHours() + ":"
  355.                                    + timeClient.getStrMinutes() + ":"
  356.                                    + timeClient.getStrSeconds() + " "
  357.                                    + DAY[timeClient.getWeek()-1] + " "
  358.                                    + timeClient.getDay() + "/"
  359.                                    + timeClient.getMonth() + "/"
  360.                                    + timeClient.getYear());          
  361.        #endif        
  362.        #if ENGLISH
  363.            Serial.printf("\n[ESP] [TASK1] [Local Time]      : ");
  364.            Serial.print(String() + timeClient.getStrHours() + ":"
  365.                                    + timeClient.getStrMinutes() + ":"
  366.                                    + timeClient.getStrSeconds() + " "
  367.                                    + DAY[timeClient.getWeek()-1] + " "
  368.                                    + timeClient.getDay() + "/"
  369.                                    + timeClient.getMonth() + "/"
  370.                                    + timeClient.getYear());          
  371.        #endif        
  372.        #if GERMANY
  373.            Serial.printf("\n[ESP] [TASK1] [Local Time]      : ");
  374.            Serial.print(String() + timeClient.getStrHours() + ":"
  375.                                    + timeClient.getStrMinutes() + ":"
  376.                                    + timeClient.getStrSeconds() + " "
  377.                                    + DAY[timeClient.getWeek()-1] + " "
  378.                                    + timeClient.getDay() + "/"
  379.                                    + timeClient.getMonth() + "/"
  380.                                    + timeClient.getYear());          
  381.        #endif                              
  382.     #endif        
  383. }
  384.  
  385. // ------------------------------------------------------------------------------------------------------------------- //
  386. // --- Task2Callback() ----------------------------------------------------------------------------------------------- //
  387. // ------------------------------------------------------------------------------------------------------------------- //
  388.  
  389. void Task2Callback()
  390. {
  391.     timeClient.update();                                        // update time
  392.      
  393.     if (timeClient.updated())
  394.     {
  395.         //Serial.printf("\n********UPDATED********");
  396.         F_TimeUpdate = true;
  397.  
  398.         S_Time.ShortTime = timeClient.getStrHours() + timeClient.getStrMinutes();
  399.         S_Time.currentH = timeClient.getStrHours();
  400.         S_Time.currentM = timeClient.getStrMinutes();
  401.         S_Time.currentS = timeClient.getStrSeconds();
  402.  
  403.         if (timeClient.getHours() < 12) S_Time.currentampm = "AM";    // not use (nie używane)
  404.         if (timeClient.getHours() > 11) S_Time.currentampm = "PM";    // not use (nie używane)
  405.  
  406.         S_Time.currentD = String(timeClient.getDay()) + timeClient.getMonthStr() + " " + timeClient.getYear();
  407.         S_Time.Day = timeClient.getDay();
  408.         S_Time.Month = timeClient.getMonth()-1;
  409.         S_Time.Year = timeClient.getYear();
  410.  
  411.         dow = timeClient.getWeek();
  412.     }
  413.     else
  414.     {
  415.         #if ENGLISH
  416.             Serial.printf("\n[ESP] [TASK2] [Time Update]     : Wait");
  417.         #endif
  418.         #if POLISH
  419.             Serial.printf("\n[ESP] [TASK2] [Time Update]     : Czekaj");
  420.         #endif
  421.         #if GERMANY
  422.             Serial.printf("\n[ESP] [TASK2] [Time Update]     : Warten");
  423.         #endif
  424.         F_TimeUpdate = false;                            
  425.     }
  426.      
  427. }
  428.  
  429. // ------------------------------------------------------------------------------------------------------------------- //
  430. // --- Task3Callback() ----------------------------------------------------------------------------------------------- //
  431. // ------------------------------------------------------------------------------------------------------------------- //
  432.  
  433. void Task3Callback()
  434. {
  435.      
  436. }
  437.  
  438. // ------------------------------------------------------------------------------------------------------------------- //
  439. // --- stat Wi-Fi ---------------------------------------------------------------------------------------------------- //
  440. // ------------------------------------------------------------------------------------------------------------------- //
  441.  
  442. void statWiFi()
  443. {
  444.     switch (WiFi.status())
  445.     {
  446.         case WL_NO_SSID_AVAIL:
  447.                               #if SERIAL
  448.                                   #if ENGLISH
  449.                                       Serial.printf("\nConfigured SSID cannot be reached");
  450.                                   #endif
  451.                                   #if POLISH
  452.                                       Serial.printf("\nNie można osiągnąć skonfigurowanego identyfikatora SSID");
  453.                                   #endif
  454.                                   #if GERMANY
  455.                                       Serial.printf("\nKonfigurierte SSID ist nicht erreichbar");
  456.                                   #endif
  457.                               #endif        
  458.                               break;
  459.                              
  460.         case WL_CONNECTED:
  461.                               #if SERIAL
  462.                                   #if ENGLISH
  463.                                       Serial.printf("\nConnection successfully established");
  464.                                       Serial.printf("\nYour IP : %s", WiFi.localIP().toString().c_str());
  465.                                       Serial.printf("\nReceived Signal Strength Indication : %d", WiFi.RSSI());
  466.                                   #endif
  467.                                   #if POLISH
  468.                                       Serial.printf("\nPomyślnie nawiązano połączenie");
  469.                                       Serial.printf("\nTwój adres IP : %s", WiFi.localIP().toString().c_str());
  470.                                       Serial.printf("\nWskazanie siły odbieranego sygnału : %d", WiFi.RSSI());
  471.                                   #endif
  472.                                   #if GERMANY
  473.                                       Serial.printf("\nVerbindung erfolgreich hergestellt");
  474.                                       Serial.printf("\nDeine IP-Adresse : %s", WiFi.localIP().toString().c_str());
  475.                                       Serial.printf("\nAnzeige der empfangenen Signalstärke : %d", WiFi.RSSI());                                
  476.                                   #endif
  477.                               #endif
  478.                               break;
  479.                              
  480.         case WL_CONNECT_FAILED:
  481.                               #if SERIAL
  482.                                   #if ENGLISH
  483.                                       Serial.printf("\nConnection failed");
  484.                                   #endif
  485.                                   #if POLISH
  486.                                       Serial.printf("\nPołączenie nieudane");
  487.                                   #endif
  488.                                   #if GERMANY
  489.                                       Serial.printf("\nVerbindung fehlgeschlagen");
  490.                                   #endif
  491.                               #endif
  492.                               break;
  493.       }      
  494. }
  495.  
  496. // ------------------------------------------------------------------------------------------------------------------- //
  497. // --- init Wi-Fi ---------------------------------------------------------------------------------------------------- //
  498. // ------------------------------------------------------------------------------------------------------------------- //
  499.  
  500. void initWiFi()
  501. {
  502.     WiFi.mode(WIFI_STA);
  503.     WiFi.begin(ssid, password);
  504.  
  505.     #if SERIAL    
  506.         #if ENGLISH
  507.             Serial.printf("\nConnecting to WiFi ..");
  508.         #endif
  509.         #if POLISH
  510.             Serial.printf("\nŁącze z siecią WiFi ..");
  511.         #endif
  512.         #if GERMANY
  513.             Serial.printf("\nNetzwerkverbindung mit WLAN ..");
  514.         #endif
  515.     #endif
  516.      
  517.     while (WiFi.status() != WL_CONNECTED)
  518.     {
  519.         Serial.print('.');
  520.         delay(200);
  521.     }
  522.  
  523.     statWiFi();
  524.          
  525.     WiFi.setAutoReconnect(true);
  526.     WiFi.persistent(true);
  527. }
  528.  
  529. // ------------------------------------------------------------------------------------------------------------------- //
  530. // --- reconect Wi-Fi ------------------------------------------------------------------------------------------------ //
  531. // ------------------------------------------------------------------------------------------------------------------- //
  532.  
  533. void reconectWifi()
  534. {
  535.     unsigned long currentMillis = millis();
  536.      
  537.     if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval))
  538.     {
  539.         #if SERIAL
  540.             #if ENGLISH
  541.                 Serial.println("Reconnecting to WiFi...");
  542.             #endif
  543.             #if POLISH
  544.                 Serial.println("Ponowne łączenie z Wi-Fi...");
  545.             #endif
  546.             #if GERMANY
  547.                 Serial.println("Erneut mit WLAN verbinden...");
  548.             #endif
  549.         #endif
  550.          
  551.         WiFi.disconnect();
  552.         WiFi.begin(ssid, password);
  553.          
  554.         statWiFi();
  555.          
  556.         previousMillis = currentMillis;
  557.     }
  558. }
  559.  
  560. // ------------------------------------------------------------------------------------------------------------------- //
  561. // --- SerialTypeWriter ---------------------------------------------------------------------------------------------- //
  562. // ------------------------------------------------------------------------------------------------------------------- //
  563.  
  564. void SerialTypeWriter(const String & message, unsigned int wait)
  565. {
  566.     for(const char c : message)
  567.     {
  568.         Serial.print(c);    
  569.         delay(wait);  
  570.     }
  571. }
  572.  
  573. // ------------------------------------------------------------------------------------------------------------------- //
  574. // --- S E T U P ----------------------------------------------------------------------------------------------------- //
  575. // ------------------------------------------------------------------------------------------------------------------- //
  576.  
  577. void setup()
  578. {
  579.     #if SERIAL
  580.         Serial.begin(SerialSpeed);
  581.     #endif
  582.    
  583.      
  584.     initWiFi();
  585.  
  586.     timeClient.begin();    
  587.     runner.init();                                       // inicjalizuj scheluder                                                                                    
  588.     runner.addTask(task_0);                              // dodaj zadanie do scheluder
  589.     task_0.enable();                                     // włącz zadanie do scheluder
  590.     runner.addTask(task_1);                              // dodaj zadanie do scheluder
  591.     task_1.enable();                                     // włącz zadanie do scheluder
  592.     runner.addTask(task_2);                              // dodaj zadanie do scheluder
  593.     task_2.enable();                                     // włącz zadanie do scheluder
  594.     runner.addTask(task_3);                              // dodaj zadanie do scheluder
  595.     task_3.enable();                                     // włącz zadanie do scheluder
  596.      
  597.      // --- WYWOŁAJ TERAZ --------------------- //
  598.      
  599.     Task1Callback();  
  600.     Task2Callback();  
  601.     Task3Callback();
  602.     Task0Callback();
  603.  
  604.     // --------------------------------------- //
  605.  
  606.     display.begin(16);
  607.     display_update_enable(true);
  608.    
  609.     display.fillScreen(display.color565(0, 0, 0));
  610. }
  611.  
  612. // ------------------------------------------------------------------------------------------------------------------- //
  613. // --- L O O P ------------------------------------------------------------------------------------------------------- //
  614. // ------------------------------------------------------------------------------------------------------------------- //
  615.  
  616. void loop()
  617. {
  618.     runner.execute();     // scheluder init
  619.     reconectWifi();       // check Wi-Fi status
  620.  
  621.     if(F_TimeUpdate)    
  622.     {
  623.         if(S_Time.currentH != S_Time.lastH)                               // if new hour
  624.         {
  625.             display.setCursor(0, 16);
  626.             display.setFont(&FreeMonoBold12pt7b);
  627.             display.setTextColor(myGREEN);
  628.             display.fillRect(0, 8, 24, 15, myBLACK);
  629.             display.print(S_Time.currentH);
  630.             display.setFont();
  631.             S_Time.lastH = S_Time.currentH;            
  632.         }
  633.  
  634.         if(S_Time.currentM != S_Time.lastM)                               // if new minute
  635.         {
  636.             display.setCursor(26, 16);
  637.             display.setFont(&FreeMonoBold12pt7b);
  638.             display.setTextColor(myGREEN);
  639.             display.fillRect(26, 8, 25, 15, myBLACK);
  640.             display.print(S_Time.currentM);
  641.             display.setFont();
  642.             S_Time.lastM = S_Time.currentM;
  643.          }  
  644.  
  645.          if (S_Time.currentS != S_Time.lastS)
  646.          {  
  647.             display.fillRect(51, 17, 13, 6, myBLACK);
  648.             display.setCursor(51, 16);
  649.             display.setTextSize(1);
  650.             display.setTextColor(myYELLOW);
  651.             display.setFont(&kongtext4pt7b);
  652.             display.print(S_Time.currentS);
  653.             display.setFont();
  654.             S_Time.lastS = S_Time.currentS;
  655.          }
  656.  
  657.          static int c = 0;      
  658.  
  659.          display.setCursor(20, 8);
  660.          display.setTextSize(2);
  661.  
  662.          if(c)
  663.          {
  664.             display.setTextColor(myGREEN);
  665.             display.print(":");
  666.             display.setTextSize(1);
  667.             c = 0;
  668.             display.setCursor(54, 9);
  669.             display.setTextSize(1);
  670.             display.setFont(&kongtext4pt7b);
  671.             display.setTextColor(myROSE);
  672.             display.print("*");
  673.             display.setFont();
  674.          }
  675.          else
  676.          {
  677.             display.setTextColor(myBLACK);
  678.             display.print(":");
  679.             display.setTextSize(1);
  680.             c = 1;
  681.             display.setCursor(54, 9);
  682.             display.setTextSize(1);
  683.             display.setFont(&kongtext4pt7b);
  684.             display.setTextColor(myBLACK);
  685.             display.print("*");
  686.             display.setFont();
  687.           }
  688.  
  689.           ShowDay();                                    // show day on screen (pokaz dzien na wyswietlaczu)
  690.           ShowDate();                                   // show date on screen (pokaz date na wyswietlaczu)
  691.          
  692.           F_TimeUpdate = false;        
  693.       }
  694. }
  695.  
  696. // ------------------------------------------------------------------------------------------------------------------- //
  697. // --- Show Day------------------------------------------------------------------------------------------------------- //
  698. // ------------------------------------------------------------------------------------------------------------------- //
  699.  
  700. void ShowDay()
  701. {
  702.     String text = Weekday[dow-1];
  703.     uint16_t text_length = text.length();
  704.     int xpo = (64 - text_length * 7) / 2;
  705.     display.setCursor(xpo, 0);
  706.     display.fillRect(0, 0, 64, 8, myBLACK);
  707.     display.setFont(&kongtext4pt7b);
  708.     for (int y = 0; y < 9; y++)
  709.     {
  710.         r = random(0,8);
  711.         display.setTextColor(myBlue[r]);
  712.         display.print(text[y]);
  713.     }
  714.     display.setFont();
  715. }
  716.  
  717. // ------------------------------------------------------------------------------------------------------------------- //
  718. // --- Show Date ----------------------------------------------------------------------------------------------------- //
  719. // ------------------------------------------------------------------------------------------------------------------- //
  720.  
  721. void ShowDate()
  722. {
  723.     display.setCursor(1, 23);
  724.     display.fillRect(0, 23, 64, 8, myBLACK);
  725.     display.setFont(&kongtext4pt7b);
  726.     display.setTextColor(myRED);
  727.     display.printf("%02d", S_Time.Day);
  728.     display.setTextColor(myBLUE);
  729.     display.printf("%s", months[S_Time.Month]);
  730.     display.setTextColor(myRED);
  731.     display.printf("%04d", S_Time.Year);
  732.     display.setFont();
  733. }
  734. // ------------------------------------------------------------------------------------------------------------------- //
Add Comment
Please, Sign In to add comment