PowerTGS440

ESP32-WeatherStation_tft_0.16

Mar 27th, 2021
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 72.74 KB | None | 0 0
  1. extern TFT_eSPI tft;
  2. extern TPogoda pogoda;
  3. extern Tools tools;
  4.  
  5. // =========================================================================================================== //
  6. //
  7. // Plik        : esp32_tft.h                                                                
  8. // Wersja      : 0.16 Beta                                                                      
  9. // Data        : 27.03.2021                                                                    
  10. // Autor       : TRANSLINE GROUP, Tomasz Majcher, Lubin                                        
  11. //
  12. //
  13. // E-Mail      : [email protected]    
  14. //  
  15. //                                                        
  16. // Licencja v1 : Donationware. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane    
  17. //               i dystrybuowane pod warunkiem, że licencjobiorca zapłaci autorowi symboliczną kwotę.      
  18. //               Wielkość opłaty zależy od licencjobiorcy.
  19. //                                                
  20. //                                                                                                        
  21. // Licencja v2 : OpenSource. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane      
  22. //               i dystrybuowane pod warenkiem, że licencjobiorca jest członkiem grupy: ESP Projekty      
  23. //               oraz ESP Polska                                                                          
  24. //                                                                                                        
  25. // =========================================================================================================== //
  26. // === H I S T O R I A   W E R S J I ========================================================================= //
  27. // =========================================================================================================== //
  28. //
  29. // wersja 0.16 STABLE - BETA (27.03.2021) - zmieniono kolory dla Wilgotnosc
  30. // wersja 0.15 STABLE - BETA (27.03.2021) - dodano DrawWilgotnoscColor
  31. // wersja 0.14 STABLE - BETA (27.03.2021) - dodano DrawTemperatureColor
  32. // wersja 0.13 STABLE - BETA (27.03.2021) - dodano panel v1 Pokaz Lokalizacje
  33. // wersja 0.12 STABLE - BETA (27.03.2021) - dodano panel v1 Zachód Słońca
  34. // wersja 0.11 STABLE - BETA (27.03.2021) - dodano panel v1 Wschod Słońca
  35. // wersja 0.10 STABLE - BETA (27.03.2021) - dodano panel v1 Predkosc Wiatru
  36. // wersja 0.09 STABLE - BETA (27.03.2021) - dodano panel v1 Wilgotnosc
  37. // wersja 0.08 STABLE - BETA (27.03.2021) - dodano panel v1 Zachmurzenie
  38. // wersja 0.07 STABLE - BETA (27.03.2021) - dodano panel v1 Code MSG
  39. // wersja 0.06 STABLE - BETA (27.03.2021) - dodano panel v1 Cisnienie
  40. // wersja 0.05 STABLE - BETA (27.03.2021) - dodano obsługę Terminal
  41. // wersja 0.04 SIMPLE - BETA (27.03.2021) - rozbudowa panel v1
  42. // wersja 0.03 SIMPLE - BETA (27.03.2021) - dodano panel Zegar RTC
  43. // wersja 0.02 SIMPLE - BETA (26.03.2021) - dodano panel v1 Temperatura
  44. // wersja 0.01 SIMPLE - BETA (26.03.2021) - budowa klasy TFTPanel          
  45. //                                                                                                             //
  46. // =========================================================================================================== //
  47. // === D E F I N I C J E ===================================================================================== //
  48. // =========================================================================================================== //
  49.  
  50. #define Color_Bakground   TFT_BLACK    
  51. #define Color_Line        tft.color565(37, 205, 245)
  52. #define TFT_kolor_zegara  tft.color565(37, 205, 245)
  53. #define TFT_BLUE2         tft.color565(0, 128, 255)
  54. #define TFT_GREEN1        tft.color565(51, 255, 153)
  55. #define TFT_tlo_zegara    TFT_BLACK    
  56.  
  57. #define Terminal          1                                         // terminal USB
  58.  
  59. // =========================================================================================================== //
  60. // === P R O T O T Y P Y ===================================================================================== //
  61. // =========================================================================================================== //
  62.  
  63. struct OKNO_v1
  64. {
  65.     int       value_min   = 0;
  66.     int       value_max   = 0;
  67.     int       value_step  = 0;
  68.     String    value_name;
  69.  
  70.     int pos_y = 0;
  71.  
  72.     float ltx = 0;                
  73.     uint16_t osx = 120, osy = 120;
  74.     int old_analog =  -999;      
  75.     int old_value = 0;
  76.     int d = 0;  
  77. }
  78. Window_TFT_up, Window_TFT_down;
  79.  
  80. // =========================================================================================================== //
  81. // === K L A S A   T F T P a n e l =========================================================================== //
  82. // =========================================================================================================== //
  83.  
  84. class TFTPanel
  85. {
  86.     private: // metody i zmienne prywatne -------------------------------------------------------------------- //
  87.  
  88.         TFT_eSPI & tft;
  89.  
  90.         uint16_t  screen_min_x   =  0;                                      // minimalny punkt x
  91.         uint16_t  screen_min_y   =  0;                                      // minimalny punkt y
  92.         uint16_t  screen_max_x   =  240;                                    // maksymalny punkt x
  93.         uint16_t  screen_max_y   =  320;                                    // maksymalny punkt y
  94.         uint16_t  window_min_x   =  1;                                      // minimalny punkt x OKNA
  95.         uint16_t  window_min_y   =  1;                                      // minimalny punkt y OKNA
  96.         uint16_t  window_max_x   =  239;                                    // maksymalny punkt x OKNA
  97.         uint16_t  window_max_y   =  319;                                    // maksymalny punkt y OKNA
  98.        
  99.         uint16_t  window_size_x  =  window_max_x - window_min_x;            // maksymalna szerokość OKNA
  100.         uint16_t  window_size_y  =  window_max_y - window_min_y;            // maksymalna wysokość OKNA
  101.  
  102.         uint16_t  window_up_v1   =  70;                                     // pozycja y dla OKNA górnego v1
  103.         uint16_t  window_down_v1 = 190;                                     // pozycja y dla OKNA dolnego v1            
  104.  
  105.         uint8_t   Godzina        = 0;                                       // czas z zegara RTC
  106.         uint8_t   Minuta         = 0;                                       // czas z zegara RTC
  107.         uint8_t   Sekunda        = 0;                                       // czas z zegara RTC
  108.         String    AmPm           = "";                                      // AM / PM
  109.         String    Data           = "";                                      // data z RTC
  110.        
  111.         // ---------------------------------------------------------------------------------------------------- //
  112.         // --- F U N K C J E   P R Y W A T N E ---------------------------------------------------------------- //
  113.         // ---------------------------------------------------------------------------------------------------- //
  114.  
  115.           inline void DrawMaxWindow();            // rysuj maksymalne okno (-1px) na wyświetlaczu
  116.           inline void DrawDownWindow126();        // rysuj dolne okno o wysokości 126 punktów
  117.           inline void DrawUpWindow126();          // rysuj górne okno o wysokości 126 punktów
  118.           void DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step, byte color_mode);
  119.           void ShowAnalogWindow126();
  120.           inline void SetupUpAnalogWindow126( int v_min, int v_step, String v_name);
  121.           inline void SetupDownAnalogWindow126( int v_min, int v_step, String v_name);
  122.           void AnalogPanelUp_v1_Show126(int value);
  123.           void AnalogPanelDown_v1_Show126(int value);  
  124.           void DrawTemperatureColor(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int i);    
  125.           void DrawWilgotnoscColor(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int i);    
  126.  
  127.     public:  // metody i zmienne publiczne ------------------------------------------------------------------- //
  128.  
  129.           TFTPanel(TFT_eSPI & adresTFT) : tft (adresTFT) { }            // konstruktor klasy TFTPanel
  130.          
  131.           void PanelInit();                                             // funkcja konfigurująca dla klasy TFTPanel                
  132.           void AnalogPanel_v1_Create();                                 // funkcja tworząca panel wyświetlacza v1  
  133.           void AnalogPanel_v1_Show(int Wilgotnosc, int Temperatura);    // funkcja pokazująca panel wyświetlacza v1
  134.           void DigitalClock_v1_Show(ESP32Time & clock, uint8_t x, uint8_t y);    // pokaz zegar dla Panel v1
  135.           void DigitalDate_v1_Show(ESP32Time & clock, uint8_t x, uint8_t y);     // pokaz datę  dla Panel v1
  136.           void DigitalTemperature_v1_Show(uint8_t x, uint8_t y);                 // pokaż temperaturę dla Panel v1
  137.           void DigitalCisnienie_v1_Show(uint8_t x, uint8_t y);                   // pokaż ciśnienie dla Panel v1
  138.           void DigitalWilgotnosc_v1_Show(uint8_t x, uint8_t y);                  // pokaż wilgotność dla Panel v1
  139.           void DigitalZachmurzenie_v1_Show(uint8_t x, uint8_t y);                // pokaż zachmurzenie dla Panel v1
  140.           void DigitalPredkoscWiatru_v1_Show(uint8_t x, uint8_t y);              // pokaż predkosc wiatru dla Panel v1
  141.           void DigitalWschodSlonca_v1_Show(uint8_t x, uint8_t y);                // pokaż wschód słońca dla Panel v1
  142.           void DigitalZachodSlonca_v1_Show(uint8_t x, uint8_t y);                // pokaż zachód słońca dla Panel v1
  143.           void DigitalLokalizacja_v1_Show(uint8_t x, uint8_t y);                 // pokaż lokalizację dla Panel v1
  144.           void CodeMsg_v1_Show(uint8_t x, uint8_t y);                            // pokaż info o Autorze Panel v1
  145.           void MultiSwitchPanel_v1(ESP32Time & clock, uint8_t x, uint8_t y);     // multi przełącznik
  146. };
  147.  
  148. // =========================================================================================================== //
  149. // === M E T O D Y   P R Y W A T N E ========================================================================= //
  150. // =========================================================================================================== //
  151. //
  152. // --- S P I S   M E T O D    P R Y W A T N Y C H ---
  153. //
  154. // inline void TFTPanel :: DrawMaxWindow()
  155. // inline void TFTPanel :: DrawDownWindow126()
  156. // inline void TFTPanel :: DrawUpWindow126()
  157. // void DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step, byte color_mode)
  158. // inline void SetupUpAnalogWindow126( int v_min, int v_step, String v_name)
  159. // inline void SetupDownAnalogWindow126( int v_min, int v_step, String v_name)
  160. // void AnalogPanel_v1_Show(int Wilgotnosc, int Temperatura)
  161. // void DrawTemperatureColor(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int i)
  162. // void DrawWilgotnoscColor(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int i);  
  163. //
  164. //
  165. // *********************************************************************************************************** //
  166. // ***                                 Narysuj maksymalne okno                                             *** //
  167. // *********************************************************************************************************** //
  168. //
  169. inline void TFTPanel :: DrawMaxWindow()
  170. {
  171.     tft.drawRect(window_min_x, window_min_y, window_size_x, window_size_y, Color_Line);       // ramka ekranu
  172.     tft.drawFastHLine(window_min_x, window_min_y + 35, window_size_y, Color_Line);            // rysuj linię
  173. }
  174. //
  175. // *********************************************************************************************************** //
  176. // ***                                 Narysuj ramkę dolną                                                 *** //
  177. // *********************************************************************************************************** //
  178. //
  179. inline void TFTPanel :: DrawDownWindow126()
  180. {
  181.     tft.drawRect(window_min_x, window_max_y - 126, window_size_x, 126, Color_Line);           // ramka dolna    
  182. }
  183. //
  184. // *********************************************************************************************************** //
  185. // ***                                 Narysuj ramkę górną                                                 *** //
  186. // *********************************************************************************************************** //
  187. //
  188. inline void TFTPanel :: DrawUpWindow126()
  189. {
  190.     tft.drawRect(window_min_x, window_max_y - (2 * 126) + 2, window_size_x, 126, Color_Line);   // ramka górna
  191. }
  192. //
  193. // *********************************************************************************************************** //
  194. // ***                             Zapamiętaj ustawienia okna UP                                           *** //
  195. // *********************************************************************************************************** //
  196. //
  197. inline void TFTPanel :: SetupUpAnalogWindow126( int v_min, int v_step, String v_name)
  198. {
  199.     Window_TFT_up.value_min = v_min;                          // minimalna wartość ANALOG METER          
  200.     Window_TFT_up.value_step = v_step;                        // zwiekszaj wartość ANALOG METER o V_STEP
  201.     Window_TFT_up.value_max = v_min + ( 4 * v_step );         // maksymalna wartość ANALOG METER
  202.     Window_TFT_up.value_name = v_name;                        // przypisz nazwę dla ANALOG METER
  203. }
  204. //
  205. // *********************************************************************************************************** //
  206. // ***                             Zapamiętaj ustawienia okna DOWN                                         *** //
  207. // *********************************************************************************************************** //
  208. //
  209. inline void TFTPanel :: SetupDownAnalogWindow126( int v_min, int v_step, String v_name)
  210. {
  211.     Window_TFT_down.value_min = v_min;                        // minimalna wartość ANALOG METER            
  212.     Window_TFT_down.value_step = v_step;                      // zwiększaj wartość ANALOG METER o V_STEP
  213.     Window_TFT_down.value_max = v_min + ( 4 * v_step );       // maksymalna wartość ANALOG METER
  214.     Window_TFT_down.value_name = v_name;                      // przypisz nazwę dla ANALOG METER
  215. }
  216. //
  217. // *********************************************************************************************************** //
  218. // ***                                 Temperatura color mode                                              *** //
  219. // *********************************************************************************************************** //
  220. //
  221. void TFTPanel :: DrawTemperatureColor(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int i)
  222. {
  223.         if (i >= -50 && i < -45)                                                    // początek IF
  224.         {
  225.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 191, 255));
  226.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 191, 255));
  227.         }                                                                           // koniec IF
  228.         else                                                                        // lub
  229.         if (i >= -45 && i < -40)                                                    // początek IF
  230.         {
  231.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 220, 255));
  232.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 220, 255));      
  233.         }                                                                           // koniec IF
  234.         else                                                                        // lub
  235.         if (i >= -40 && i < -35)                                                    // początek IF
  236.         {
  237.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 255));
  238.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 255));      
  239.         }                                                                           // koniec IF
  240.         else                                                                        // lub
  241.         if (i >= -35 && i < -30)                                                    // początek IF
  242.         {
  243.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 191));
  244.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 191));      
  245.         }                                                                           // koniec IF
  246.         else                                                                        // lub
  247.         if (i >= -30 && i < -25)                                                    // początek IF
  248.         {
  249.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 128));
  250.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 128));      
  251.         }                                                                           // koniec IF
  252.         else                                                                        // lub
  253.         if (i >= -25 && i < -20)                                                    // początek IF
  254.         {
  255.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 64));
  256.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 64));      
  257.         }
  258.         else                                                                        // lub    
  259.         if (i >= -20 && i < -15)                                                    // początek IF
  260.         {
  261.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 0));
  262.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 0));
  263.         }                                                                           // koniec IF
  264.         else                                                                        // lub
  265.         if (i >= -15 && i < -10)                                                    // początek IF
  266.         {
  267.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(20, 255, 0));
  268.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(20, 255, 0));
  269.         }                                                                           // koniec IF
  270.         else                                                                        // lub
  271.         if (i >= -10 && i < -5)                                                     // początek IF
  272.         {
  273.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(40, 255, 0));
  274.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(40, 255, 0));
  275.         }                                                                           // koniec IF
  276.         else                                                                        // lub
  277.         if (i >= -5 && i < 0)                                                       // początek IF
  278.         {
  279.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(64, 255, 0));
  280.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(64, 255, 0));
  281.         }                                                                           // koniec IF
  282.         else                                                                        // lub
  283.         if (i >= 0 && i < 5)                                                        // początek IF
  284.         {
  285.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(128, 255, 0));
  286.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(128, 255, 0));
  287.         }                                                                           // koniec IF
  288.         else                                                                        // lub
  289.         if (i >= 5 && i < 10)                                                       // początek IF
  290.         {
  291.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(191, 255, 0));
  292.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(191, 255, 0));
  293.         }                                                                           // koniec IF
  294.         else                                                                        // lub
  295.         if (i >= 10 && i < 15)                                                      // początek IF
  296.         {
  297.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 235, 0));
  298.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 235, 0));
  299.         }                                                                           // koniec IF
  300.         else                                                                        // lub
  301.         if (i >= 15 && i < 20)                                                      // początek IF
  302.         {
  303.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 230, 0));
  304.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 230, 0));
  305.         }                                                                           // koniec IF
  306.         else                                                                        // lub
  307.         if (i >= 20 && i < 25)                                                      // początek IF
  308.         {
  309.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 200, 0));
  310.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 200, 0));
  311.         }                                                                           // koniec IF
  312.         else                                                                        // lub
  313.         if (i >= 25 && i < 30)                                                      // początek IF
  314.         {
  315.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 170, 0));
  316.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 170, 0));
  317.         }                                                                           // koniec IF
  318.         else                                                                        // lub
  319.         if (i >= 30 && i < 35)                                                      // początek IF
  320.         {
  321.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 140, 0));
  322.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 140, 0));
  323.         }                                                                           // koniec IF
  324.         else                                                                        // lub
  325.         if (i >= 35 && i < 40)                                                      // początek IF
  326.         {
  327.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 110, 0));
  328.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 110, 0));
  329.         }                                                                           // koniec IF
  330.         else                                                                        // lub
  331.         if (i >= 40 && i < 45)                                                      // początek IF
  332.         {
  333.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 64, 0));
  334.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 64, 0));
  335.         }                                                                           // koniec IF
  336.         else                                                                        // lub
  337.         if (i >= 45 && i < 50)                                                      // początek IF
  338.         {
  339.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 0, 0));
  340.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 0, 0));
  341.         }        
  342. }
  343. //
  344. // *********************************************************************************************************** //
  345. // ***                                 Temperatura color mode                                              *** //
  346. // *********************************************************************************************************** //
  347. //
  348. void TFTPanel :: DrawWilgotnoscColor(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int i)
  349. {
  350.         if (i >= -50 && i < -45)                                                    // początek IF
  351.         {
  352.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(230, 255, 242));
  353.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(230, 255, 242));
  354.         }                                                                           // koniec IF
  355.         else                                                                        // lub
  356.         if (i >= -45 && i < -40)                                                    // początek IF
  357.         {
  358.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(204, 255, 230));
  359.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(204, 255, 230));      
  360.         }                                                                           // koniec IF
  361.         else                                                                        // lub
  362.         if (i >= -40 && i < -35)                                                    // początek IF
  363.         {
  364.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(179, 255, 217));
  365.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(179, 255, 217));      
  366.         }                                                                           // koniec IF
  367.         else                                                                        // lub
  368.         if (i >= -35 && i < -30)                                                    // początek IF
  369.         {
  370.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(153, 255, 204));
  371.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(153, 255, 204));      
  372.         }                                                                           // koniec IF
  373.         else                                                                        // lub
  374.         if (i >= -30 && i < -25)                                                    // początek IF
  375.         {
  376.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(128, 255, 191));
  377.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(128, 255, 191));      
  378.         }                                                                           // koniec IF
  379.         else                                                                        // lub
  380.         if (i >= -25 && i < -20)                                                    // początek IF
  381.         {
  382.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(102, 255, 179));
  383.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(102, 255, 179));      
  384.         }
  385.         else                                                                        // lub    
  386.         if (i >= -20 && i < -15)                                                    // początek IF
  387.         {
  388.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(77, 255, 166));
  389.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(77, 255, 166));
  390.         }                                                                           // koniec IF
  391.         else                                                                        // lub
  392.         if (i >= -15 && i < -10)                                                    // początek IF
  393.         {
  394.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(51, 255, 153));
  395.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(51, 255, 153));
  396.         }                                                                           // koniec IF
  397.         else                                                                        // lub
  398.         if (i >= -10 && i < -5)                                                     // początek IF
  399.         {
  400.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(26, 255, 140));
  401.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(26, 255, 140));
  402.         }                                                                           // koniec IF
  403.         else                                                                        // lub
  404.         if (i >= -5 && i < 0)                                                       // początek IF
  405.         {
  406.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(51, 255, 153));
  407.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(51, 255, 153));
  408.         }                                                                           // koniec IF
  409.         else                                                                        // lub
  410.         if (i >= 0 && i < 5)                                                        // początek IF
  411.         {
  412.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(26, 255, 140));
  413.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(26, 255, 140));
  414.         }                                                                           // koniec IF
  415.         else                                                                        // lub
  416.         if (i >= 5 && i < 10)                                                       // początek IF
  417.         {
  418.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 128));
  419.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 128));
  420.         }                                                                           // koniec IF
  421.         else                                                                        // lub
  422.         if (i >= 10 && i < 15)                                                      // początek IF
  423.         {
  424.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 230, 115));
  425.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 230, 115));
  426.         }                                                                           // koniec IF
  427.         else                                                                        // lub
  428.         if (i >= 15 && i < 20)                                                      // początek IF
  429.         {
  430.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 204, 102));
  431.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 204, 102));
  432.         }                                                                           // koniec IF
  433.         else                                                                        // lub
  434.         if (i >= 20 && i < 25)                                                      // początek IF
  435.         {
  436.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 179, 89));
  437.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 179, 89));
  438.         }                                                                           // koniec IF
  439.         else                                                                        // lub
  440.         if (i >= 25 && i < 30)                                                      // początek IF
  441.         {
  442.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 153, 77));
  443.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 153, 77));
  444.         }                                                                           // koniec IF
  445.         else                                                                        // lub
  446.         if (i >= 30 && i < 35)                                                      // początek IF
  447.         {
  448.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 128, 64));
  449.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 128, 64));
  450.         }                                                                           // koniec IF
  451.         else                                                                        // lub
  452.         if (i >= 35 && i < 40)                                                      // początek IF
  453.         {
  454.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 102, 51));
  455.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 102, 51));
  456.         }                                                                           // koniec IF
  457.         else                                                                        // lub
  458.         if (i >= 40 && i < 45)                                                      // początek IF
  459.         {
  460.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 77, 38));
  461.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 77, 38));
  462.         }                                                                           // koniec IF
  463.         else                                                                        // lub
  464.         if (i >= 45 && i < 50)                                                      // początek IF
  465.         {
  466.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 51, 26));
  467.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 51, 26));
  468.         }        
  469. }
  470. //
  471. // *********************************************************************************************************** //
  472. // ***                                 Narysuj miernik analogowy                                           *** //
  473. // *********************************************************************************************************** //
  474. //
  475. void TFTPanel :: DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step, byte color_mode)
  476. {
  477.     tft.setTextColor(TFT_WHITE);        
  478.    
  479.    
  480.     if ( window_up_v1 == start_y )  
  481.     {
  482.         tft.drawRightString ( Window_TFT_up.value_name, 220, 119 - 20 + start_y, 2);
  483.         Window_TFT_up.pos_y = start_y;
  484.     }
  485.     else
  486.     if (window_down_v1 == start_y)  
  487.     {
  488.         tft.drawRightString ( Window_TFT_down.value_name, 220, 119 - 20 + start_y, 2);        
  489.         Window_TFT_down.pos_y = start_y;
  490.     }
  491.  
  492.     for (int i = -50; i < 51; i += 5)                                               // pętla od - 50 do 50
  493.     {                                                                               // początek FOR
  494.         int tl = 15;                                                                // tl równa się 15
  495.         float sx = cos((i - 90) * 0.0174532925);                                    // wyznacz sx
  496.         float sy = sin((i - 90) * 0.0174532925);                                    // wyznacz sy
  497.         uint16_t x0 = sx * (100 + tl) + 120;                                        // wyznacz x0
  498.         uint16_t y0 = sy * (100 + tl) + 140+start_y;                                // wyznacz y0
  499.         uint16_t x1 = sx * 100 + 120;                                               // wyznacz x1
  500.         uint16_t y1 = sy * 100 + 140+start_y;                                       // wyznacz y1
  501.         float sx2 = cos((i + 5 - 90) * 0.0174532925);                               // wyznacz sx2
  502.         float sy2 = sin((i + 5 - 90) * 0.0174532925);                               // wyznacz sy2
  503.         int x2 = sx2 * (100 + tl) + 120;                                            // wyznacz x2
  504.         int y2 = sy2 * (100 + tl) + 140+start_y;                                    // wyznacz y2
  505.         int x3 = sx2 * 100 + 120;                                                   // wyznacz x3
  506.         int y3 = sy2 * 100 + 140+start_y;                                           // wyznacz y3
  507.                                                                                     // fake line auto-generater
  508.         switch ( color_mode )
  509.         {
  510.             case  0 :  DrawTemperatureColor(x0, y0, x1, y1, x2, y2, x3, y3, i); break;
  511.             case  1 :  DrawWilgotnoscColor(x0, y0, x1, y1, x2, y2, x3, y3, i);  break;
  512.         }                                                                                
  513.                                                                                     // fake line auto-generate
  514.         if (i % 25 != 0) tl = 8;                                                    // jeśli reszta z dzielenia rózna od 0
  515.                                                                                     // fake line auto-generate
  516.         x0 = sx * (100 + tl) + 120;                                                 // oblicz x0
  517.         y0 = sy * (100 + tl) + 140+start_y;                                         // oblicz y0
  518.         x1 = sx * 100 + 120;                                                        // oblicz x1
  519.         y1 = sy * 100 + 140+start_y;                                                // oblicz y1
  520.                                                                                     // fake line auto-generate
  521.         tft.drawLine(x0, y0, x1, y1, TFT_BLACK);                                    // drukuj ticka
  522.                                                                                     // fake line auto-generate
  523.         if (i % 25 == 0)                                                            // jeśli reszta z dzielenia to 0
  524.         {                                                                           // to
  525.             x0 = sx * (100 + tl + 10) + 120;                                        // wyznacz x0
  526.             y0 = sy * (100 + tl + 10) + 140+start_y;                                // wyznacz y0
  527.                                                                                     // fake line auto-generate
  528.             int    FValue;                                                          // zapisz tu skok skali
  529.                                                                                     // fake line auto-generate
  530.             switch (i / 25)                                                         // liczba całkowita z dzielenia / 25
  531.             {                                                                       // przełącznik logiczny
  532.                 case -2:  FValue = value_start + ( 0 * value_step );                // oblicz dla -2 wartość FVALUE
  533.                           tft.drawCentreString(String(FValue), x0, y0 - 12, 2);     // konwertuj do STRING pokaż na TFT
  534.                           break;                                                    // przerwij
  535.                 case -1:  FValue = value_start + ( 1 * value_step );                // oblicz dla -1 wartość FVALUE
  536.                           tft.drawCentreString(String(FValue), x0, y0 - 9, 2);      // konwertuj do STRING pokaż na TFT
  537.                           break;                                                    // przerwij
  538.                 case 0:   FValue = value_start + ( 2 * value_step );                // oblicz dla  0 wartość FVALUE
  539.                           tft.drawCentreString(String(FValue), x0, y0 - 6, 2);      // konwertuj do STRING pokaż na TFT
  540.                           break;                                                    // przerwij
  541.                 case 1:   FValue = value_start + ( 3 * value_step );                // oblicz dla +1 wartość FVALUE
  542.                           tft.drawCentreString(String(FValue), x0, y0 - 9, 2);      // konwertuj do STRING pokaż na TFT
  543.                           break;                                                    // przerwij
  544.                 case 2:   FValue = value_start + ( 4 * value_step );                // oblicz dla +2 wartość FVALUE
  545.                           tft.drawCentreString(String(FValue), x0, y0 - 12, 2);     // konwertuj do STRING pokaż na TFT
  546.                           break;                                                    // przerwij
  547.             }                                                                       // K O N I E C   P R Z E Ł A C Z N I K
  548.         }                                                                           // K O N I E C   R E S Z T A   %   0
  549.                                                                                     // fake line auto-generate
  550.         sx = cos((i + 5 - 90) * 0.0174532925);                                      // wyznacz sx z cosinusa DT I 0.1714
  551.         sy = sin((i + 5 - 90) * 0.0174532925);                                      // wyznacz sy z sinusa   DT I 0.1714
  552.         x0 = sx * 100 + 120;                                                        // podstaw pod x0
  553.         y0 = sy * 100 + 140+start_y;                                                // podstaw pod y0
  554.         if (i < 50) tft.drawLine(x0, y0, x1, y1, TFT_BLACK);                        // drukuj skalę
  555.     }                                                                               // K O N I E C   P Ę T L I   F O R    
  556. }                                                                                   // K O N I E C   F U N K C J I
  557. //
  558. // *********************************************************************************************************** //
  559. // ***                                 Pokaz miernik analogowy UP                                          *** //
  560. // *********************************************************************************************************** //
  561. //
  562. void TFTPanel :: AnalogPanelUp_v1_Show126(int value)
  563. {
  564.     int y = Window_TFT_up.pos_y;                                              // wyznacz oś y ze struktury UP
  565.     int ms_delay = 0;
  566.     char buf[8];                                                              // bufor tekstowy
  567.     dtostrf(value, 4, 0, buf);                                                // kopiuj wartość typu INT do CHAR
  568.                                                                               // fake line auto-generated
  569.     tft.setTextColor(TFT_WHITE, TFT_BLACK);                                   // ustaw kolor czcionki / tła
  570.     tft.drawRightString(buf, 40, 119 - 20+y, 2);                              // drukuj zawartość bufora CHAR
  571.     tft.drawRightString(Window_TFT_up.value_name, 220, 119 - 20+y, 2);        // drukuj zawartość dla UP
  572.                                                                               // fake line auto-generated
  573.     if (value < Window_TFT_up.value_min) value = Window_TFT_up.value_min;     // ustaw wartość minimalną
  574.     if (value > Window_TFT_up.value_max) value = Window_TFT_up.value_max;     // ustaw wartość maxymalną
  575.                                                                               // fake line auto-generated
  576.     while (!(value == Window_TFT_up.old_analog))                              // jesli wartości się zmieniły
  577.     {                                                                         // początek pętli WHILE
  578.         if (Window_TFT_up.old_analog < value) Window_TFT_up.old_analog++;     // sprawdź
  579.         else Window_TFT_up.old_analog--;                                      // jeśli FAŁSZ odejmij 1
  580.                                                                               // fake line auto-generated
  581.         if (ms_delay == 0) Window_TFT_up.old_analog = value;                  // fake flicker
  582.                                                                               // fake line auto-generated
  583.         float sdeg = map(Window_TFT_up.old_analog, Window_TFT_up.value_min, Window_TFT_up.value_max, -150, -30);  // skalowanie to wartości MIN / MAX
  584.                                                                               // fale line auto-generated      
  585.         float sx = cos(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla sx
  586.         float sy = sin(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla xy
  587.         float tx = tan((sdeg + 90) * 0.0174532925);                           // oblicz DELTĘ
  588.                                                                               // fake line auto-generated
  589.         tft.drawLine(120 + 20 * Window_TFT_up.ltx - 1, 140 - 20+y, Window_TFT_up.osx - 1, Window_TFT_up.osy+y,   TFT_BLACK); // skasuj starą wskazówkę
  590.         tft.drawLine(120 + 20 * Window_TFT_up.ltx,     140 - 20+y, Window_TFT_up.osx,     Window_TFT_up.osy+y,   TFT_BLACK); // skasuj starą wskazówkę
  591.         tft.drawLine(120 + 20 * Window_TFT_up.ltx + 1, 140 - 20+y, Window_TFT_up.osx + 1, Window_TFT_up.osy+y,   TFT_BLACK); // skasuj starą wskazówkę
  592.         tft.setTextColor(TFT_WHITE);                                          // ustaw kolor znaków / pikseli
  593.                                                                               // fake line auto-generated  
  594.         Window_TFT_up.ltx = tx;                                               // zapisz nowe tx
  595.         Window_TFT_up.osx = sx * 98 + 120;                                    // zapisz nowe sx
  596.         Window_TFT_up.osy = sy * 98 + 140;                                    // zapisz nowe sy
  597.                                                                               // fake line auto-generated
  598.         tft.drawLine(120 + 20 * Window_TFT_up.ltx - 1, 140 - 20+y,   Window_TFT_up.osx - 1, Window_TFT_up.osy +y, TFT_WHITE); // pokaz nową wskazówkę
  599.         tft.drawLine(120 + 20 * Window_TFT_up.ltx,     140 - 20+y,   Window_TFT_up.osx,     Window_TFT_up.osy +y, TFT_WHITE); // pokaz nową wskazówkę
  600.         tft.drawLine(120 + 20 * Window_TFT_up.ltx + 1, 140 - 20+y,   Window_TFT_up.osx + 1, Window_TFT_up.osy +y, TFT_WHITE); // pokaz nową wskazówkę
  601.                                                                                     // fake line auto-generated
  602.         if (abs(Window_TFT_up.old_analog - value) < 10) ms_delay += ms_delay / 5;   // fake flicker
  603.         delay(ms_delay);                                                            // fake flicker
  604.     }                                                                               // K O N I E C   W H I L E
  605. }
  606. //
  607. // *********************************************************************************************************** //
  608. // ***                                 Narysuj miernik analogowy DOWN                                      *** //
  609. // *********************************************************************************************************** //
  610. //
  611. void TFTPanel :: AnalogPanelDown_v1_Show126(int value)
  612. {
  613.  int y = Window_TFT_down.pos_y;                                               // wyznacz oś y ze struktury UP
  614.     int ms_delay = 0;
  615.     char buf[8];                                                              // bufor tekstowy
  616.     dtostrf(value, 4, 0, buf);                                                // kopiuj wartość typu INT do CHAR
  617.                                                                               // fake line auto-generated
  618.     tft.setTextColor(TFT_WHITE, TFT_BLACK);                                   // ustaw kolor czcionki / tła
  619.     tft.drawRightString(buf, 40, 119 - 20+y, 2);                              // drukuj zawartość bufora CHAR
  620.     tft.drawRightString(Window_TFT_down.value_name, 220, 119 - 20+y, 2);      // drukuj zawartość dla UP
  621.                                                                               // fake line auto-generated
  622.     if (value < Window_TFT_down.value_min) value = Window_TFT_down.value_min; // ustaw wartość minimalną
  623.     if (value > Window_TFT_down.value_max) value = Window_TFT_down.value_max; // ustaw wartość maxymalną
  624.                                                                               // fake line auto-generated
  625.     while (!(value == Window_TFT_down.old_analog))                            // jesli wartości się zmieniły
  626.     {                                                                         // początek pętli WHILE
  627.         if (Window_TFT_down.old_analog < value) Window_TFT_down.old_analog++; // sprawdź
  628.         else Window_TFT_down.old_analog--;                                    // jeśli FAŁSZ odejmij 1
  629.                                                                               // fake line auto-generated
  630.         if (ms_delay == 0) Window_TFT_down.old_analog = value;                // fake flicker
  631.                                                                               // fake line auto-generated
  632.         float sdeg = map(Window_TFT_down.old_analog, Window_TFT_down.value_min, Window_TFT_down.value_max, -150, -30);  // skalowanie to wartości MIN / MAX
  633.                                                                               // fale line auto-generated      
  634.         float sx = cos(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla sx
  635.         float sy = sin(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla xy
  636.         float tx = tan((sdeg + 90) * 0.0174532925);                           // oblicz DELTĘ
  637.                                                                               // fake line auto-generated
  638.         tft.drawLine(120 + 20 * Window_TFT_down.ltx - 1, 140 - 20+y, Window_TFT_down.osx - 1, Window_TFT_down.osy+y,   TFT_BLACK); // skasuj starą wskazówkę
  639.         tft.drawLine(120 + 20 * Window_TFT_down.ltx,     140 - 20+y, Window_TFT_down.osx,     Window_TFT_down.osy+y,   TFT_BLACK); // skasuj starą wskazówkę
  640.         tft.drawLine(120 + 20 * Window_TFT_down.ltx + 1, 140 - 20+y, Window_TFT_down.osx + 1, Window_TFT_down.osy+y,   TFT_BLACK); // skasuj starą wskazówkę
  641.         tft.setTextColor(TFT_WHITE);                                          // ustaw kolor znaków / pikseli
  642.                                                                               // fake line auto-generated  
  643.         Window_TFT_down.ltx = tx;                                             // zapisz nowe tx
  644.         Window_TFT_down.osx = sx * 98 + 120;                                  // zapisz nowe sx
  645.         Window_TFT_down.osy = sy * 98 + 140;                                  // zapisz nowe sy
  646.                                                                               // fake line auto-generated
  647.         tft.drawLine(120 + 20 * Window_TFT_down.ltx - 1, 140 - 20+y,   Window_TFT_down.osx - 1, Window_TFT_down.osy +y, TFT_WHITE); // pokaz nową wskazówkę
  648.         tft.drawLine(120 + 20 * Window_TFT_down.ltx,     140 - 20+y,   Window_TFT_down.osx,     Window_TFT_down.osy +y, TFT_WHITE); // pokaz nową wskazówkę
  649.         tft.drawLine(120 + 20 * Window_TFT_down.ltx + 1, 140 - 20+y,   Window_TFT_down.osx + 1, Window_TFT_down.osy +y, TFT_WHITE); // pokaz nową wskazówkę
  650.                                                                                        // fake line auto-generated
  651.         if (abs(Window_TFT_down.old_analog - value) < 10) ms_delay += ms_delay / 5;    // fake flicker
  652.         delay(ms_delay);                                                               // fake flicker
  653.     }                
  654. }
  655.  
  656.  
  657. // =========================================================================================================== //
  658. // === M E T O D Y   P U B L I C Z N E ======================================================================= //
  659. // =========================================================================================================== //
  660. //
  661. //
  662. // --- S P I S   M E T O D    P R Y W A T N Y C H ---
  663. //
  664. // void TFTPanel :: PanelInit()
  665. // void TFTPanel :: AnalogPanel_v1_Create()
  666. // void TFTPanel :: AnalogPanel_v1_Show(int Temperatura, int Wilgotnosc)
  667. // void TFTPanel :: DigitalClock_v1_Show(ESP32Time & clock, uint8_t x = 10, uint8_t y = 10)
  668. // void TFTPanel :: DigitalDate_v1_Show(ESP32Time & clock, uint8_t x = 5, uint8_t y = 8)
  669. // void TFTPanel :: MultiSwitchPanel_v1(ESP32Time & clock, uint8_t x = 5, uint8_t y = 42)
  670. // void TFTPanel :: DigitalTemperature_v1_Show(uint8_t x = 120, uint8_t y = 42)
  671. // void TFTPanel :: CodeMsg_v1_Show(uint8_t x = 120, uint8_t y = 42)
  672. // void TFTPanel :: DigitalCisnienie_v1_Show(uint8_t x = 120, uint8_t y = 42)
  673. // void TFTPanel :: DigitalWilgotnosc_v1_Show(uint8_t x = 120, uint8_t y = 42)
  674. // void TFTPanel :: DigitalZachmurzenie_v1_Show(uint8_t x = 120, uint8_t y = 42)
  675. // void TFTPanel :: DigitalPredkoscWiatru_v1_Show(uint8_t x = 120, uint8_t y = 42);
  676. // void TFTPanel :: DigitalWschodSlonca_v1_Show(uint8_t x = 120, uint8_t y = 42);
  677. // void TFTPanel :: DigitalZachodSlonca_v1_Show(uint8_t x = 120, uint8_t y = 42);
  678. // void TFTPanel :: DigitalLokalizacja_v1_Show(uint8_t x = 120, uint8_t y = 42);
  679. //
  680. // *********************************************************************************************************** //
  681. // ***                       G ł ó w n a   F u n k c j a   K o n f i g u r a c y j n a                     *** //
  682. // *********************************************************************************************************** //
  683. //
  684. void TFTPanel :: PanelInit()
  685. {
  686.     tft.init();                                // inicjalizuj ekran
  687.     tft.setRotation(0);                        // ustaw rotację
  688.     tft.fillScreen(Color_Bakground);           // ustaw tło okna    
  689. }
  690. //
  691. // *********************************************************************************************************** //
  692. // ***                           A N A L O G   P A N E L   C R E A T E     V 1                             *** //
  693. // *********************************************************************************************************** //
  694. //
  695. void TFTPanel :: AnalogPanel_v1_Create()
  696. {
  697.     DrawMaxWindow();                                  // rysuj ramkę dla maksymalnego okna głównego
  698.     DrawDownWindow126();                              // rysuj ramkę dolną dla modułu ANALOG METER ( DOWN )
  699.     SetupDownAnalogWindow126( 0, 25, "Wilgotnosc");   // ustaw parametry dla ANALOG METER ( DOWN )
  700.     DrawUpWindow126();                                // rysuj ramkę górną dla modułu ANALOG METER (  UP  )
  701.     SetupUpAnalogWindow126( -10, 10, "Temperatura");  // ustaw parametry dla ANALOG METER (  UP  )    
  702.     DrawAnalogWindow126( window_up_v1,   -10,  10, 0);   // rysuj analogowy wskaźnik (  UP  ) ( min value ) ( max value )
  703.     DrawAnalogWindow126( window_down_v1,   0,  25, 1);   // rysuj analogowy wskaźnik ( DOWN ) ( min value ) ( max value )
  704. }
  705. //
  706. // *********************************************************************************************************** //
  707. // ***                           A N A L O G   P A N E L   S H O W     V 1                                 *** //
  708. // *********************************************************************************************************** //
  709. //
  710. void TFTPanel :: AnalogPanel_v1_Show(int Temperatura, int Wilgotnosc)
  711. {
  712.     AnalogPanelUp_v1_Show126(Temperatura);
  713.     AnalogPanelDown_v1_Show126(Wilgotnosc);
  714. }
  715. //
  716. // *********************************************************************************************************** //
  717. // ***                                 D I G I T A L   C L O C K     V 1                                   *** //
  718. // *********************************************************************************************************** //
  719. //
  720. void TFTPanel :: DigitalClock_v1_Show(ESP32Time & clock, uint8_t x = 40, uint8_t y = 8)
  721. {
  722.     // położenie x - wartość domyślna to : 40
  723.     // położenie y - wartość domyślna to : 8
  724.    
  725.     char showBufor[4];                // buforek typu char    
  726.     char tempBufor[4];                // buforek typu char
  727.     static bool FlagaZmiany = false;  // flaga do zmiany co 1 sekundę
  728.  
  729.     // sprawdź warunki czy coś do zrobienia (optymalizacja) ----------------------------------
  730.  
  731.     if ( AmPm != clock.getAmPm() )                          // jeśli zmienił się AM i PM
  732.     {                                                       // początek IF
  733.         AmPm = clock.getAmPm(false);                        // zapisz nowy AM/PM pod zmienną
  734.     }                                                       // ten warunek ma być pierwszy !!!
  735.    
  736.     if ( Godzina != clock.getHour(true) )                   // jeśli zmieniła się godzina
  737.     {                                                       // początek IF
  738.         Godzina = clock.getHour(true);                      // zapisz nową godzinę pod zmienną
  739.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła        
  740.         tft.drawString(String(Godzina), x, y, 4);           // drukuj Godzinę jeśli się zmieniła
  741.         tft.setTextColor(TFT_BLUE2, TFT_tlo_zegara);        // ustaw kolor czcionki / tła        
  742.         tft.drawString(AmPm, x + 115, y, 4);                // wyświetl na TFT
  743.     }                                                       // koniec IF
  744.  
  745.     if ( Minuta != clock.getMinute() )                      // jeśli zmieniła się minuta
  746.     {                                                       // początek IF
  747.         Minuta  = clock.getMinute();                        // zapisz nową minutę pod zmienną  
  748.        
  749.         if ( Minuta < 10 )                                  // jeśli minuta mniejsze niz 10
  750.         {                                                   // początek IF
  751.             strcpy(showBufor, "0");                         // kopiuj do showBufor 0
  752.             sprintf(tempBufor, "%d", Minuta);               // konwersja do char
  753.             strcat(showBufor, tempBufor);                   // doklej do showBufor tempBufor
  754.         }                                                   // koniec IF
  755.         else                                                // jeśli minuta większa niz 10
  756.         {                                                   // początek IF
  757.             sprintf( tempBufor, "%d", Minuta );             // konwersja do char
  758.             strcpy( showBufor, tempBufor );                 // skopiuj do showBufor tempBufor
  759.         }                                                   // koniec IF
  760.        
  761.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  762.         tft.drawString(showBufor, x + 40, y, 4);            // drukuj Minutę jeśli się zmieniła                          
  763.     }                                                       // koniec IF
  764.  
  765.     if ( Sekunda != clock.getSecond() )                     // jeśli zmieniła się sekunda        
  766.     {                                                       // początek IF
  767.         Sekunda = clock.getSecond();                        // zapisz nową sekundę pod zmienną
  768.  
  769.         if ( Sekunda < 10 )                                 // jeśli minuta mniejsze niz 10
  770.         {                                                   // początek IF
  771.             strcpy(showBufor, "0");                         // kopiuj do showBufor 0
  772.             sprintf(tempBufor, "%d", Sekunda);              // konwersja do char
  773.             strcat(showBufor, tempBufor);                   // doklej do showBufor tempBufor
  774.         }                                                   // koniec IF
  775.         else                                                // jeśli minuta większa niz 10
  776.         {                                                   // początek IF
  777.             sprintf( tempBufor, "%d", Sekunda );            // konwersja do char
  778.             strcpy( showBufor, tempBufor );                 // skopiuj do showBufor tempBufor
  779.         }                                                   // koniec IF
  780.        
  781.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  782.         tft.drawString(showBufor, x + 80, y, 4);            // drukuj Minutę jeśli się zmieniła
  783.  
  784.         if ( FlagaZmiany ) FlagaZmiany = false;             // zmien wartosc flagi co 1 sekunde
  785.         else                                                // lub
  786.         if (!FlagaZmiany ) FlagaZmiany = true;              // zmien wartosc flagi co 1 sekunde
  787.     }                                                       // koniec IF
  788.                                                      
  789.     // koniec sprawdzania warunków RTC -------------------------------------------------------
  790.  
  791.     if( FlagaZmiany )
  792.     {
  793.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  794.         tft.drawString(":", x + 30, y, 4);                  // drukuj dwukropek zegara
  795.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  796.         tft.drawString(".", x + 70, y, 4);                  // drukuj dwukropek zegara
  797.     }
  798.     else
  799.     {
  800.         tft.setTextColor(TFT_BLUE, TFT_tlo_zegara);         // ustaw kolor czcionki / tła                
  801.         tft.drawString(":", x + 30, y, 4);                  // zamaż dwukropke zegara
  802.         tft.setTextColor(TFT_BLUE, TFT_tlo_zegara);         // ustaw kolor czcionki / tła                
  803.         tft.drawString(".", x + 70, y, 4);                  // drukuj dwukropek zegara
  804.     }  
  805. }
  806. //
  807. // *********************************************************************************************************** //
  808. // ***                                 D I G I T A L   D A T E     V 1                                     *** //
  809. // *********************************************************************************************************** //
  810. //
  811. void TFTPanel :: DigitalDate_v1_Show(ESP32Time & clock, uint8_t x = 120, uint8_t y = 42)
  812. {
  813.     // położenie x - wartość domyślna to : 120
  814.     // położenie y - wartość domyślna to : 42
  815.        
  816.     if ( Data != clock.getDate(false) )                     // sprawdź czy data się zmieniła (optymalizacja)
  817.     {                                                       // początek IF      
  818.         Data = clock.getDate(false);                        // zapisz pod zmienną Data nową datę z RTC        
  819.     }                                                       // koniec IF
  820.     else
  821.     {
  822.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła    
  823.         tft.drawCentreString(Data, x, y, 4);                // pokaż datę (angielska wersja)
  824.     }    
  825.  
  826.     #if Terminal
  827.         tools.PokazWiadomosc("TFT","DigitalDate_v1 Wyswietlam",Data.c_str());
  828.     #endif  
  829. }
  830. //
  831. // *********************************************************************************************************** //
  832. // ***                        D I G I T A L   T E M P E R A T U R A     V 1                                *** //
  833. // *********************************************************************************************************** //
  834. //
  835. void TFTPanel :: DigitalTemperature_v1_Show(uint8_t x = 120, uint8_t y = 42)
  836. {
  837.     String bufor = "Temp.Out " + String(pogoda.PublicPobierzTemperature()) + " C";  // załaduj do bufora    
  838.     tft.drawCentreString(bufor, x, y, 4);                                           // wyświetl tekst
  839.  
  840.     #if Terminal
  841.         tools.PokazWiadomosc("TFT","DigitalTemperature_v1 Wyswietlam",bufor.c_str());
  842.     #endif  
  843. }
  844. //
  845. // *********************************************************************************************************** //
  846. // ***                          D I G I T A L   W I L G O T N O S C     V 1                                *** //
  847. // *********************************************************************************************************** //
  848. //
  849. void TFTPanel :: DigitalWilgotnosc_v1_Show(uint8_t x = 120, uint8_t y = 42)
  850. {
  851.     String bufor = "Wilgotnosc " + String(pogoda.PublicPobierzWilgotnosc()) + " %";  // załaduj do bufora    
  852.     tft.drawCentreString(bufor, x, y, 4);                                            // wyświetl tekst
  853.  
  854.     #if Terminal
  855.         tools.PokazWiadomosc("TFT","DigitalWilgotnosc_v1 Wyswietlam",bufor.c_str());
  856.     #endif  
  857. }
  858. //
  859. // *********************************************************************************************************** //
  860. // ***                      D I G I T A L   Z A C H M U R Z E N I E     V 1                                *** //
  861. // *********************************************************************************************************** //
  862. //
  863. void TFTPanel :: DigitalZachmurzenie_v1_Show(uint8_t x = 120, uint8_t y = 42)
  864. {
  865.     String bufor = "Zachmurzenie " + String(pogoda.PublicPobierzZachmurzenie()) + " %";  // załaduj do bufora    
  866.     tft.drawCentreString(bufor, x, y, 4);                                                // wyświetl tekst
  867.  
  868.     #if Terminal
  869.         tools.PokazWiadomosc("TFT","DigitalZachmurzenie_v1 Wyswietlam",bufor.c_str());
  870.     #endif  
  871. }
  872. //
  873. // *********************************************************************************************************** //
  874. // ***                D I G I T A L   P R Ę D K O Ś Ć   W I A T R U     V 1                                *** //
  875. // *********************************************************************************************************** //
  876. //
  877. void TFTPanel :: DigitalPredkoscWiatru_v1_Show(uint8_t x = 120, uint8_t y = 42)
  878. {
  879.     String bufor = "Wiatr " + String(pogoda.PublicPobierzPredkoscWiatru()) + " km/h";  // załaduj do bufora    
  880.     tft.drawCentreString(bufor, x, y, 4);                                              // wyświetl tekst
  881.  
  882.     #if Terminal
  883.         tools.PokazWiadomosc("TFT","DigitalPredkoscWiatru_v1 Wyswietlam",bufor.c_str());
  884.     #endif  
  885. }
  886. //
  887. // *********************************************************************************************************** //
  888. // ***                           D I G I T A L   C I S N I E N I E     V 1                                 *** //
  889. // *********************************************************************************************************** //
  890. //
  891. void TFTPanel :: DigitalCisnienie_v1_Show(uint8_t x = 120, uint8_t y = 42)
  892. {
  893.     String bufor = "Cisnienie " + String(pogoda.PublicPobierzCisnienie()) + " mPa"; // załaduj do bufora      
  894.     tft.drawCentreString(bufor, x, y, 4);                                           // wyświetl tekst
  895.  
  896.     #if Terminal
  897.         tools.PokazWiadomosc("TFT","DigitalCisnienie_v1 Wyswietlam",bufor.c_str());
  898.     #endif  
  899. }
  900. //
  901. // *********************************************************************************************************** //
  902. // ***                           D I G I T A L   W S C H O D   S L O N C A     V 1                         *** //
  903. // *********************************************************************************************************** //
  904. //
  905. void TFTPanel :: DigitalWschodSlonca_v1_Show(uint8_t x = 120, uint8_t y = 42)
  906. {
  907.     String bufor = "Wschod " + String(pogoda.PublicPobierzWschodSlonca());          // załaduj do bufora      
  908.     tft.drawCentreString(bufor, x, y, 4);                                           // wyświetl tekst
  909.  
  910.     #if Terminal
  911.         tools.PokazWiadomosc("TFT","DigitalWschodSlonca_v1 Wyswietlam",bufor.c_str());
  912.     #endif  
  913. }
  914. //
  915. // *********************************************************************************************************** //
  916. // ***                           D I G I T A L   Z A C H O D   S L O N C A     V 1                         *** //
  917. // *********************************************************************************************************** //
  918. //
  919. void TFTPanel :: DigitalZachodSlonca_v1_Show(uint8_t x = 120, uint8_t y = 42)
  920. {
  921.     String bufor = "Zachod " + String(pogoda.PublicPobierzZachodSlonca());          // załaduj do bufora      
  922.     tft.drawCentreString(bufor, x, y, 4);                                           // wyświetl tekst
  923.  
  924.     #if Terminal
  925.         tools.PokazWiadomosc("TFT","DigitalZachodSlonca_v1 Wyswietlam",bufor.c_str());
  926.     #endif  
  927. }
  928. //
  929. // *********************************************************************************************************** //
  930. // ***                               D I G I T A L   L O K A L I Z A C J E     V 1                         *** //
  931. // *********************************************************************************************************** //
  932. //
  933. void TFTPanel :: DigitalLokalizacja_v1_Show(uint8_t x = 120, uint8_t y = 42)
  934. {    
  935.     tft.drawCentreString(pogoda.PublicPobierzLokalizacje(), x, y, 4);                       // wyświetl tekst
  936.  
  937.     #if Terminal
  938.         tools.PokazWiadomosc("TFT","DigitalZachodSlonca_v1 Wyswietlam",pogoda.PublicPobierzLokalizacje().c_str());
  939.     #endif  
  940. }
  941. //
  942. // *********************************************************************************************************** //
  943. // ***                                         C O D E   M S G   V 1                                       *** //
  944. // *********************************************************************************************************** //
  945. //
  946. void TFTPanel :: CodeMsg_v1_Show(uint8_t x = 120, uint8_t y = 42)
  947. {
  948.     tft.drawCentreString("Code by Transline", x, y, 4);                             // wyświetl tekst
  949.    
  950.     #if Terminal
  951.         tools.PokazWiadomosc("TFT","CodeMsg v1 Wyswietlam","Code by Transline");
  952.     #endif  
  953. }
  954.  
  955. //
  956. // *********************************************************************************************************** //
  957. // ***                         D I G I T A L   M U L T I   S W I T C H     V 1                             *** //
  958. // *********************************************************************************************************** //
  959. //
  960. void TFTPanel :: MultiSwitchPanel_v1(ESP32Time & clock, uint8_t x = 5, uint8_t y = 42)
  961. {
  962.     static byte przelacznik = 0;                                      // przelacznik dla switch
  963.  
  964.     #if Terminal
  965.         tools.PokazWiadomosc("TFT","MultiSwitchPanel v1 - Przelacznik",String(przelacznik).c_str());
  966.     #endif
  967.  
  968.     tft.fillRect(window_min_x+1, window_min_y + 36, window_size_x - 2, 30, TFT_BLACK);  // posprzątaj
  969.     tft.setTextColor(TFT_GREEN1, TFT_tlo_zegara);                     // ustaw kolor czcionki / tła
  970.  
  971.     switch ( przelacznik )                                            // przelacznik komunikatow
  972.     {                                                                 // początek SWITCH
  973.      
  974.         case    0 :   DigitalDate_v1_Show(clock);                     // wyświetl DATĘ
  975.                       przelacznik ++;                                 // dodaj 1 do przelacznik
  976.                       break;                                          // przerwij warunek 0
  977.  
  978.         case    1 :   DigitalTemperature_v1_Show();                   // wyświetl CZAS
  979.                       przelacznik ++;                                 // dodaj 1 do przelacznik
  980.                       break;                                          // przerwij warunek 1
  981.  
  982.         case    2 :   DigitalCisnienie_v1_Show();                     // wyświetl CIŚNIENIE
  983.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  984.                       break;                                          // przerwij warunek 2
  985.  
  986.         case    3 :   DigitalWilgotnosc_v1_Show();                    // wyświetl WILGOTNOŚĆ
  987.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  988.                       break;                                          // przerwij warunek 3
  989.  
  990.         case    4 :   DigitalZachmurzenie_v1_Show();                  // wyświetl ZACHMURZENIE
  991.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  992.                       break;                                          // przerwij warunek 4
  993.                      
  994.         case    5 :   DigitalPredkoscWiatru_v1_Show();                // wyświetl PREDKOSC WIATRU
  995.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  996.                       break;                                          // przerwij warunek 5
  997.  
  998.         case    6 :   DigitalWschodSlonca_v1_Show();                  // wyświetl WSCHÓD SŁOŃCA
  999.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  1000.                       break;                                          // przerwij warunek 6                  
  1001.  
  1002.         case    7 :   DigitalZachodSlonca_v1_Show();                  // wyświetl ZACHÓD SŁOŃCA
  1003.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  1004.                       break;                                          // przerwij warunek 7                                            
  1005.  
  1006.         case    8 :   DigitalLokalizacja_v1_Show();                   // wyświetl LOKALIZACJE
  1007.                       przelacznik ++;                                 // dodaj 1 do przełącznik
  1008.                       break;                                          // przerwij warunek 7              
  1009.                      
  1010.         default   :   CodeMsg_v1_Show();                              // wyświetl MSG
  1011.                       przelacznik = 0;                                // dodaj 1 do przelacznik
  1012.                       break;                                          // przerwij warunek DEFAULT
  1013.                        
  1014.     }                                                                 // koniec SWITCH                                              
  1015.    
  1016. }                                                                     // koniec MultiSwitchPanel_v1
  1017. //
  1018. // *********************************************************************************************************** //
  1019. // ***                                 E N D                                                               *** //
  1020. // *********************************************************************************************************** //
  1021.  
Advertisement
Add Comment
Please, Sign In to add comment