PowerTGS440

ESP32-WeatherStation_tft_0.04

Mar 27th, 2021
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 48.17 KB | None | 0 0
  1. extern TFT_eSPI tft;
  2.  
  3. // =========================================================================================================== //
  4. //
  5. // Plik        : esp32_tft.h                                                                
  6. // Wersja      : 0.04 Beta                                                                      
  7. // Data        : 27.03.2021                                                                    
  8. // Autor       : TRANSLINE GROUP, Tomasz Majcher, Lubin                                        
  9. //
  10. //
  11. // E-Mail      : [email protected]    
  12. //  
  13. //                                                        
  14. // Licencja v1 : Donationware. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane    
  15. //               i dystrybuowane pod warunkiem, że licencjobiorca zapłaci autorowi symboliczną kwotę.      
  16. //               Wielkość opłaty zależy od licencjobiorcy.
  17. //                                                
  18. //                                                                                                        
  19. // Licencja v2 : OpenSource. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane      
  20. //               i dystrybuowane pod warenkiem, że licencjobiorca jest członkiem grupy: ESP Projekty      
  21. //               oraz ESP Polska                                                                          
  22. //                                                                                                        
  23. // =========================================================================================================== //
  24. // === H I S T O R I A   W E R S J I ========================================================================= //
  25. // =========================================================================================================== //
  26. //
  27. // wersja 0.04 SIMPLE - BETA (27.03.2021) - rozbudowa Panel_v1
  28. // wersja 0.03 SIMPLE - BETA (27.03.2021) - dodano panel Zegar RTC
  29. // wersja 0.02 SIMPLE - BETA (26.03.2021) - dodano panele Temperatura / Wilgotnosc
  30. // wersja 0.01 SIMPLE - BETA (26.03.2021) - budowa klasy TFTPanel          
  31. //                                                                                                             //
  32. // =========================================================================================================== //
  33. // === D E F I N I C J E ===================================================================================== //
  34. // =========================================================================================================== //
  35.  
  36. #define Color_Bakground   TFT_BLACK    
  37. #define Color_Line        tft.color565(37, 205, 245)
  38. #define TFT_kolor_zegara  tft.color565(37, 205, 245)
  39. #define TFT_BLUE2         tft.color565(0, 128, 255)
  40. #define TFT_tlo_zegara    TFT_BLACK    
  41.  
  42. // =========================================================================================================== //
  43. // === P R O T O T Y P Y ===================================================================================== //
  44. // =========================================================================================================== //
  45.  
  46. struct OKNO_v1
  47. {
  48.     int       value_min   = 0;
  49.     int       value_max   = 0;
  50.     int       value_step  = 0;
  51.     String    value_name;
  52.  
  53.     int pos_y = 0;
  54.  
  55.     float ltx = 0;                
  56.     uint16_t osx = 120, osy = 120;
  57.     int old_analog =  -999;      
  58.     int old_value = 0;
  59.     int d = 0;  
  60. }
  61. Window_TFT_up, Window_TFT_down;
  62.  
  63. // =========================================================================================================== //
  64. // === K L A S A   T F T P a n e l =========================================================================== //
  65. // =========================================================================================================== //
  66.  
  67. class TFTPanel
  68. {
  69.     private: // metody i zmienne prywatne -------------------------------------------------------------------- //
  70.  
  71.         TFT_eSPI & tft;
  72.  
  73.         uint16_t  screen_min_x   =  0;                                      // minimalny punkt x
  74.         uint16_t  screen_min_y   =  0;                                      // minimalny punkt y
  75.         uint16_t  screen_max_x   =  240;                                    // maksymalny punkt x
  76.         uint16_t  screen_max_y   =  320;                                    // maksymalny punkt y
  77.         uint16_t  window_min_x   =  1;                                      // minimalny punkt x OKNA
  78.         uint16_t  window_min_y   =  1;                                      // minimalny punkt y OKNA
  79.         uint16_t  window_max_x   =  239;                                    // maksymalny punkt x OKNA
  80.         uint16_t  window_max_y   =  319;                                    // maksymalny punkt y OKNA
  81.        
  82.         uint16_t  window_size_x  =  window_max_x - window_min_x;            // maksymalna szerokość OKNA
  83.         uint16_t  window_size_y  =  window_max_y - window_min_y;            // maksymalna wysokość OKNA
  84.  
  85.         uint16_t  window_up_v1   =  70;                                     // pozycja y dla OKNA górnego v1
  86.         uint16_t  window_down_v1 = 190;                                     // pozycja y dla OKNA dolnego v1            
  87.  
  88.         uint8_t   Godzina        = 0;                                       // czas z zegara RTC
  89.         uint8_t   Minuta         = 0;                                       // czas z zegara RTC
  90.         uint8_t   Sekunda        = 0;                                       // czas z zegara RTC
  91.         String    AmPm           = "";                                      // AM / PM
  92.         String    Data           = "";                                      // data z RTC
  93.        
  94.         // ---------------------------------------------------------------------------------------------------- //
  95.         // --- F U N K C J E   P R Y W A T N E ---------------------------------------------------------------- //
  96.         // ---------------------------------------------------------------------------------------------------- //
  97.  
  98.         inline void DrawMaxWindow();            // rysuj maksymalne okno (-1px) na wyświetlaczu
  99.         inline void DrawDownWindow126();        // rysuj dolne okno o wysokości 126 punktów
  100.         inline void DrawUpWindow126();          // rysuj górne okno o wysokości 126 punktów
  101.         void DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step);
  102.         void ShowAnalogWindow126();
  103.         inline void SetupUpAnalogWindow126( int v_min, int v_step, String v_name);
  104.         inline void SetupDownAnalogWindow126( int v_min, int v_step, String v_name);
  105.         void AnalogPanelUp_v1_Show126(int value);
  106.         void AnalogPanelDown_v1_Show126(int value);
  107.  
  108.        
  109.  
  110.     public:  // metody i zmienne publiczne ------------------------------------------------------------------- //
  111.  
  112.           TFTPanel(TFT_eSPI & adresTFT) : tft (adresTFT) { }            // konstruktor klasy TFTPanel
  113.          
  114.           void PanelInit();                                             // funkcja konfigurująca dla klasy TFTPanel                
  115.           void AnalogPanel_v1_Create();                                 // funkcja tworząca panel wyświetlacza v1  
  116.           void AnalogPanel_v1_Show(int Wilgotnosc, int Temperatura);    // funkcja pokazująca panel wyświetlacza v1
  117.           void DigitalClock_v1_Show(ESP32Time & clock, uint8_t x, uint8_t y);    // pokaz zegar dla Panel v1
  118.           void DigitalDate_v1_Show(ESP32Time & clock, uint8_t x, uint8_t y);     // pokaz datę  dla Panel v1
  119. };
  120.  
  121. // =========================================================================================================== //
  122. // === M E T O D Y   P R Y W A T N E ========================================================================= //
  123. // =========================================================================================================== //
  124. //
  125. // --- S P I S   M E T O D    P R Y W A T N Y C H ---
  126. //
  127. // inline void TFTPanel :: DrawMaxWindow()
  128. // inline void TFTPanel :: DrawDownWindow126()
  129. // inline void TFTPanel :: DrawUpWindow126()
  130. // void DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step)
  131. // inline void SetupUpAnalogWindow126( int v_min, int v_step, String v_name)
  132. // inline void SetupDownAnalogWindow126( int v_min, int v_step, String v_name)
  133. // void AnalogPanel_v1_Show(int Wilgotnosc, int Temperatura)
  134. //
  135. //
  136. // *********************************************************************************************************** //
  137. // ***                                 Narysuj maksymalne okno                                             *** //
  138. // *********************************************************************************************************** //
  139. //
  140. inline void TFTPanel :: DrawMaxWindow()
  141. {
  142.     tft.drawRect(window_min_x, window_min_y, window_size_x, window_size_y, Color_Line);       // ramka ekranu
  143.     tft.drawFastHLine(window_min_x, window_min_y + 35, window_size_y, Color_Line);            // rysuj linię
  144. }
  145. //
  146. // *********************************************************************************************************** //
  147. // ***                                 Narysuj ramkę dolną                                                 *** //
  148. // *********************************************************************************************************** //
  149. //
  150. inline void TFTPanel :: DrawDownWindow126()
  151. {
  152.     tft.drawRect(window_min_x, window_max_y - 126, window_size_x, 126, Color_Line);           // ramka dolna    
  153. }
  154. //
  155. // *********************************************************************************************************** //
  156. // ***                                 Narysuj ramkę górną                                                 *** //
  157. // *********************************************************************************************************** //
  158. //
  159. inline void TFTPanel :: DrawUpWindow126()
  160. {
  161.     tft.drawRect(window_min_x, window_max_y - (2 * 126) + 2, window_size_x, 126, Color_Line);   // ramka górna
  162. }
  163. //
  164. // *********************************************************************************************************** //
  165. // ***                             Zapamiętaj ustawienia okna UP                                           *** //
  166. // *********************************************************************************************************** //
  167. //
  168. inline void TFTPanel :: SetupUpAnalogWindow126( int v_min, int v_step, String v_name)
  169. {
  170.     Window_TFT_up.value_min = v_min;                          // minimalna wartość ANALOG METER          
  171.     Window_TFT_up.value_step = v_step;                        // zwiekszaj wartość ANALOG METER o V_STEP
  172.     Window_TFT_up.value_max = v_min + ( 4 * v_step );         // maksymalna wartość ANALOG METER
  173.     Window_TFT_up.value_name = v_name;                        // przypisz nazwę dla ANALOG METER
  174. }
  175. //
  176. // *********************************************************************************************************** //
  177. // ***                             Zapamiętaj ustawienia okna DOWN                                         *** //
  178. // *********************************************************************************************************** //
  179. //
  180. inline void TFTPanel :: SetupDownAnalogWindow126( int v_min, int v_step, String v_name)
  181. {
  182.     Window_TFT_down.value_min = v_min;                        // minimalna wartość ANALOG METER            
  183.     Window_TFT_down.value_step = v_step;                      // zwiększaj wartość ANALOG METER o V_STEP
  184.     Window_TFT_down.value_max = v_min + ( 4 * v_step );       // maksymalna wartość ANALOG METER
  185.     Window_TFT_down.value_name = v_name;                      // przypisz nazwę dla ANALOG METER
  186. }
  187. //
  188. // *********************************************************************************************************** //
  189. // ***                                 Narysuj miernik analogowy                                           *** //
  190. // *********************************************************************************************************** //
  191. //
  192. void TFTPanel :: DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step)
  193. {
  194.     tft.setTextColor(TFT_WHITE);        
  195.    
  196.    
  197.     if ( window_up_v1 == start_y )  
  198.     {
  199.         tft.drawRightString ( Window_TFT_up.value_name, 220, 119 - 20 + start_y, 2);
  200.         Window_TFT_up.pos_y = start_y;
  201.     }
  202.     else
  203.     if (window_down_v1 == start_y)  
  204.     {
  205.         tft.drawRightString ( Window_TFT_down.value_name, 220, 119 - 20 + start_y, 2);        
  206.         Window_TFT_down.pos_y = start_y;
  207.     }
  208.  
  209.     for (int i = -50; i < 51; i += 5)                                               // pętla od - 50 do 50
  210.     {                                                                               // początek FOR
  211.         int tl = 15;                                                                // tl równa się 15
  212.         float sx = cos((i - 90) * 0.0174532925);                                    // wyznacz sx
  213.         float sy = sin((i - 90) * 0.0174532925);                                    // wyznacz sy
  214.         uint16_t x0 = sx * (100 + tl) + 120;                                        // wyznacz x0
  215.         uint16_t y0 = sy * (100 + tl) + 140+start_y;                                // wyznacz y0
  216.         uint16_t x1 = sx * 100 + 120;                                               // wyznacz x1
  217.         uint16_t y1 = sy * 100 + 140+start_y;                                       // wyznacz y1
  218.         float sx2 = cos((i + 5 - 90) * 0.0174532925);                               // wyznacz sx2
  219.         float sy2 = sin((i + 5 - 90) * 0.0174532925);                               // wyznacz sy2
  220.         int x2 = sx2 * (100 + tl) + 120;                                            // wyznacz x2
  221.         int y2 = sy2 * (100 + tl) + 140+start_y;                                    // wyznacz y2
  222.         int x3 = sx2 * 100 + 120;                                                   // wyznacz x3
  223.         int y3 = sy2 * 100 + 140+start_y;                                           // wyznacz y3
  224.                                                                                     // fake line auto-generater
  225.         if (i >= -50 && i < -45)                                                    // początek IF
  226.         {
  227.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 191, 255));
  228.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 191, 255));
  229.         }                                                                           // koniec IF
  230.         else                                                                        // lub
  231.         if (i >= -45 && i < -40)                                                    // początek IF
  232.         {
  233.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 220, 255));
  234.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 220, 255));      
  235.         }                                                                           // koniec IF
  236.         else                                                                        // lub
  237.         if (i >= -40 && i < -35)                                                    // początek IF
  238.         {
  239.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 255));
  240.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 255));      
  241.         }                                                                           // koniec IF
  242.         else                                                                        // lub
  243.         if (i >= -35 && i < -30)                                                    // początek IF
  244.         {
  245.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 191));
  246.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 191));      
  247.         }                                                                           // koniec IF
  248.         else                                                                        // lub
  249.         if (i >= -30 && i < -25)                                                    // początek IF
  250.         {
  251.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 128));
  252.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 128));      
  253.         }                                                                           // koniec IF
  254.         else                                                                        // lub
  255.         if (i >= -25 && i < -20)                                                    // początek IF
  256.         {
  257.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 64));
  258.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 64));      
  259.         }
  260.         else                                                                        // lub    
  261.         if (i >= -20 && i < -15)                                                    // początek IF
  262.         {
  263.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 0));
  264.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 0));
  265.         }                                                                           // koniec IF
  266.         else                                                                        // lub
  267.         if (i >= -15 && i < -10)                                                    // początek IF
  268.         {
  269.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(20, 255, 0));
  270.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(20, 255, 0));
  271.         }                                                                           // koniec IF
  272.         else                                                                        // lub
  273.         if (i >= -10 && i < -5)                                                     // początek IF
  274.         {
  275.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(40, 255, 0));
  276.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(40, 255, 0));
  277.         }                                                                           // koniec IF
  278.         else                                                                        // lub
  279.         if (i >= -5 && i < 0)                                                       // początek IF
  280.         {
  281.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(64, 255, 0));
  282.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(64, 255, 0));
  283.         }                                                                           // koniec IF
  284.         else                                                                        // lub
  285.         if (i >= 0 && i < 5)                                                        // początek IF
  286.         {
  287.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(128, 255, 0));
  288.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(128, 255, 0));
  289.         }                                                                           // koniec IF
  290.         else                                                                        // lub
  291.         if (i >= 5 && i < 10)                                                       // początek IF
  292.         {
  293.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(191, 255, 0));
  294.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(191, 255, 0));
  295.         }                                                                           // koniec IF
  296.         else                                                                        // lub
  297.         if (i >= 10 && i < 15)                                                      // początek IF
  298.         {
  299.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 235, 0));
  300.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 235, 0));
  301.         }                                                                           // koniec IF
  302.         else                                                                        // lub
  303.         if (i >= 15 && i < 20)                                                      // początek IF
  304.         {
  305.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 230, 0));
  306.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 230, 0));
  307.         }                                                                           // koniec IF
  308.         else                                                                        // lub
  309.         if (i >= 20 && i < 25)                                                      // początek IF
  310.         {
  311.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 200, 0));
  312.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 200, 0));
  313.         }                                                                           // koniec IF
  314.         else                                                                        // lub
  315.         if (i >= 25 && i < 30)                                                      // początek IF
  316.         {
  317.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 170, 0));
  318.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 170, 0));
  319.         }                                                                           // koniec IF
  320.         else                                                                        // lub
  321.         if (i >= 30 && i < 35)                                                      // początek IF
  322.         {
  323.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 140, 0));
  324.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 140, 0));
  325.         }                                                                           // koniec IF
  326.         else                                                                        // lub
  327.         if (i >= 35 && i < 40)                                                      // początek IF
  328.         {
  329.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 110, 0));
  330.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 110, 0));
  331.         }                                                                           // koniec IF
  332.         else                                                                        // lub
  333.         if (i >= 40 && i < 45)                                                      // początek IF
  334.         {
  335.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 64, 0));
  336.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 64, 0));
  337.         }                                                                           // koniec IF
  338.         else                                                                        // lub
  339.         if (i >= 45 && i < 50)                                                      // początek IF
  340.         {
  341.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 0, 0));
  342.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 0, 0));
  343.         }                                                                           // koniec IF
  344.                                                                                     // fake line auto-generate
  345.         if (i % 25 != 0) tl = 8;                                                    // jeśli reszta z dzielenia rózna od 0
  346.                                                                                     // fake line auto-generate
  347.         x0 = sx * (100 + tl) + 120;                                                 // oblicz x0
  348.         y0 = sy * (100 + tl) + 140+start_y;                                         // oblicz y0
  349.         x1 = sx * 100 + 120;                                                        // oblicz x1
  350.         y1 = sy * 100 + 140+start_y;                                                // oblicz y1
  351.                                                                                     // fake line auto-generate
  352.         tft.drawLine(x0, y0, x1, y1, TFT_BLACK);                                    // drukuj ticka
  353.                                                                                     // fake line auto-generate
  354.         if (i % 25 == 0)                                                            // jeśli reszta z dzielenia to 0
  355.         {                                                                           // to
  356.             x0 = sx * (100 + tl + 10) + 120;                                        // wyznacz x0
  357.             y0 = sy * (100 + tl + 10) + 140+start_y;                                // wyznacz y0
  358.                                                                                     // fake line auto-generate
  359.             int    FValue;                                                          // zapisz tu skok skali
  360.                                                                                     // fake line auto-generate
  361.             switch (i / 25)                                                         // liczba całkowita z dzielenia / 25
  362.             {                                                                       // przełącznik logiczny
  363.                 case -2:  FValue = value_start + ( 0 * value_step );                // oblicz dla -2 wartość FVALUE
  364.                           tft.drawCentreString(String(FValue), x0, y0 - 12, 2);     // konwertuj do STRING pokaż na TFT
  365.                           break;                                                    // przerwij
  366.                 case -1:  FValue = value_start + ( 1 * value_step );                // oblicz dla -1 wartość FVALUE
  367.                           tft.drawCentreString(String(FValue), x0, y0 - 9, 2);      // konwertuj do STRING pokaż na TFT
  368.                           break;                                                    // przerwij
  369.                 case 0:   FValue = value_start + ( 2 * value_step );                // oblicz dla  0 wartość FVALUE
  370.                           tft.drawCentreString(String(FValue), x0, y0 - 6, 2);      // konwertuj do STRING pokaż na TFT
  371.                           break;                                                    // przerwij
  372.                 case 1:   FValue = value_start + ( 3 * value_step );                // oblicz dla +1 wartość FVALUE
  373.                           tft.drawCentreString(String(FValue), x0, y0 - 9, 2);      // konwertuj do STRING pokaż na TFT
  374.                           break;                                                    // przerwij
  375.                 case 2:   FValue = value_start + ( 4 * value_step );                // oblicz dla +2 wartość FVALUE
  376.                           tft.drawCentreString(String(FValue), x0, y0 - 12, 2);     // konwertuj do STRING pokaż na TFT
  377.                           break;                                                    // przerwij
  378.             }                                                                       // K O N I E C   P R Z E Ł A C Z N I K
  379.         }                                                                           // K O N I E C   R E S Z T A   %   0
  380.                                                                                     // fake line auto-generate
  381.         sx = cos((i + 5 - 90) * 0.0174532925);                                      // wyznacz sx z cosinusa DT I 0.1714
  382.         sy = sin((i + 5 - 90) * 0.0174532925);                                      // wyznacz sy z sinusa   DT I 0.1714
  383.         x0 = sx * 100 + 120;                                                        // podstaw pod x0
  384.         y0 = sy * 100 + 140+start_y;                                                // podstaw pod y0
  385.         if (i < 50) tft.drawLine(x0, y0, x1, y1, TFT_BLACK);                        // drukuj skalę
  386.     }                                                                               // K O N I E C   P Ę T L I   F O R    
  387. }                                                                                   // K O N I E C   F U N K C J I
  388. //
  389. // *********************************************************************************************************** //
  390. // ***                                 Pokaz miernik analogowy UP                                          *** //
  391. // *********************************************************************************************************** //
  392. //
  393. void TFTPanel :: AnalogPanelUp_v1_Show126(int value)
  394. {
  395.     int y = Window_TFT_up.pos_y;                                              // wyznacz oś y ze struktury UP
  396.     int ms_delay = 0;
  397.     char buf[8];                                                              // bufor tekstowy
  398.     dtostrf(value, 4, 0, buf);                                                // kopiuj wartość typu INT do CHAR
  399.                                                                               // fake line auto-generated
  400.     tft.setTextColor(TFT_WHITE, TFT_BLACK);                                   // ustaw kolor czcionki / tła
  401.     tft.drawRightString(buf, 40, 119 - 20+y, 2);                              // drukuj zawartość bufora CHAR
  402.     tft.drawRightString(Window_TFT_up.value_name, 220, 119 - 20+y, 2);        // drukuj zawartość dla UP
  403.                                                                               // fake line auto-generated
  404.     if (value < Window_TFT_up.value_min) value = Window_TFT_up.value_min;     // ustaw wartość minimalną
  405.     if (value > Window_TFT_up.value_max) value = Window_TFT_up.value_max;     // ustaw wartość maxymalną
  406.                                                                               // fake line auto-generated
  407.     while (!(value == Window_TFT_up.old_analog))                              // jesli wartości się zmieniły
  408.     {                                                                         // początek pętli WHILE
  409.         if (Window_TFT_up.old_analog < value) Window_TFT_up.old_analog++;     // sprawdź
  410.         else Window_TFT_up.old_analog--;                                      // jeśli FAŁSZ odejmij 1
  411.                                                                               // fake line auto-generated
  412.         if (ms_delay == 0) Window_TFT_up.old_analog = value;                  // fake flicker
  413.                                                                               // fake line auto-generated
  414.         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
  415.                                                                               // fale line auto-generated      
  416.         float sx = cos(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla sx
  417.         float sy = sin(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla xy
  418.         float tx = tan((sdeg + 90) * 0.0174532925);                           // oblicz DELTĘ
  419.                                                                               // fake line auto-generated
  420.         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ę
  421.         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ę
  422.         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ę
  423.         tft.setTextColor(TFT_WHITE);                                          // ustaw kolor znaków / pikseli
  424.                                                                               // fake line auto-generated  
  425.         Window_TFT_up.ltx = tx;                                               // zapisz nowe tx
  426.         Window_TFT_up.osx = sx * 98 + 120;                                    // zapisz nowe sx
  427.         Window_TFT_up.osy = sy * 98 + 140;                                    // zapisz nowe sy
  428.                                                                               // fake line auto-generated
  429.         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ę
  430.         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ę
  431.         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ę
  432.                                                                                     // fake line auto-generated
  433.         if (abs(Window_TFT_up.old_analog - value) < 10) ms_delay += ms_delay / 5;   // fake flicker
  434.         delay(ms_delay);                                                            // fake flicker
  435.     }                                                                               // K O N I E C   W H I L E
  436. }
  437. //
  438. // *********************************************************************************************************** //
  439. // ***                                 Narysuj miernik analogowy DOWN                                      *** //
  440. // *********************************************************************************************************** //
  441. //
  442. void TFTPanel :: AnalogPanelDown_v1_Show126(int value)
  443. {
  444.  int y = Window_TFT_down.pos_y;                                               // wyznacz oś y ze struktury UP
  445.     int ms_delay = 0;
  446.     char buf[8];                                                              // bufor tekstowy
  447.     dtostrf(value, 4, 0, buf);                                                // kopiuj wartość typu INT do CHAR
  448.                                                                               // fake line auto-generated
  449.     tft.setTextColor(TFT_WHITE, TFT_BLACK);                                   // ustaw kolor czcionki / tła
  450.     tft.drawRightString(buf, 40, 119 - 20+y, 2);                              // drukuj zawartość bufora CHAR
  451.     tft.drawRightString(Window_TFT_down.value_name, 220, 119 - 20+y, 2);      // drukuj zawartość dla UP
  452.                                                                               // fake line auto-generated
  453.     if (value < Window_TFT_down.value_min) value = Window_TFT_down.value_min; // ustaw wartość minimalną
  454.     if (value > Window_TFT_down.value_max) value = Window_TFT_down.value_max; // ustaw wartość maxymalną
  455.                                                                               // fake line auto-generated
  456.     while (!(value == Window_TFT_down.old_analog))                            // jesli wartości się zmieniły
  457.     {                                                                         // początek pętli WHILE
  458.         if (Window_TFT_down.old_analog < value) Window_TFT_down.old_analog++; // sprawdź
  459.         else Window_TFT_down.old_analog--;                                    // jeśli FAŁSZ odejmij 1
  460.                                                                               // fake line auto-generated
  461.         if (ms_delay == 0) Window_TFT_down.old_analog = value;                // fake flicker
  462.                                                                               // fake line auto-generated
  463.         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
  464.                                                                               // fale line auto-generated      
  465.         float sx = cos(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla sx
  466.         float sy = sin(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla xy
  467.         float tx = tan((sdeg + 90) * 0.0174532925);                           // oblicz DELTĘ
  468.                                                                               // fake line auto-generated
  469.         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ę
  470.         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ę
  471.         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ę
  472.         tft.setTextColor(TFT_WHITE);                                          // ustaw kolor znaków / pikseli
  473.                                                                               // fake line auto-generated  
  474.         Window_TFT_down.ltx = tx;                                             // zapisz nowe tx
  475.         Window_TFT_down.osx = sx * 98 + 120;                                  // zapisz nowe sx
  476.         Window_TFT_down.osy = sy * 98 + 140;                                  // zapisz nowe sy
  477.                                                                               // fake line auto-generated
  478.         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ę
  479.         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ę
  480.         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ę
  481.                                                                                        // fake line auto-generated
  482.         if (abs(Window_TFT_down.old_analog - value) < 10) ms_delay += ms_delay / 5;    // fake flicker
  483.         delay(ms_delay);                                                               // fake flicker
  484.     }                
  485. }
  486.  
  487.  
  488. // =========================================================================================================== //
  489. // === M E T O D Y   P U B L I C Z N E ======================================================================= //
  490. // =========================================================================================================== //
  491. //
  492. //
  493. // --- S P I S   M E T O D    P R Y W A T N Y C H ---
  494. //
  495. // void TFTPanel :: PanelInit()
  496. // void TFTPanel :: AnalogPanel_v1_Create()
  497. // void TFTPanel :: AnalogPanel_v1_Show(int Temperatura, int Wilgotnosc)
  498. // void TFTPanel :: DigitalClock_v1_Show(ESP32Time & clock, uint8_t x = 10, uint8_t y = 10)
  499. // void TFTPanel :: DigitalDate_v1_Show(ESP32Time & clock, uint8_t x = 5, uint8_t y = 8)
  500. //
  501. //
  502. // *********************************************************************************************************** //
  503. // ***                       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                     *** //
  504. // *********************************************************************************************************** //
  505. //
  506. void TFTPanel :: PanelInit()
  507. {
  508.     tft.init();                                // inicjalizuj ekran
  509.     tft.setRotation(0);                        // ustaw rotację
  510.     tft.fillScreen(Color_Bakground);           // ustaw tło okna    
  511. }
  512. //
  513. // *********************************************************************************************************** //
  514. // ***                           A N A L O G   P A N E L   C R E A T E     V 1                             *** //
  515. // *********************************************************************************************************** //
  516. //
  517. void TFTPanel :: AnalogPanel_v1_Create()
  518. {
  519.     DrawMaxWindow();                                  // rysuj ramkę dla maksymalnego okna głównego
  520.     DrawDownWindow126();                              // rysuj ramkę dolną dla modułu ANALOG METER ( DOWN )
  521.     SetupDownAnalogWindow126( 0, 25, "Wilgotnosc");   // ustaw parametry dla ANALOG METER ( DOWN )
  522.     DrawUpWindow126();                                // rysuj ramkę górną dla modułu ANALOG METER (  UP  )
  523.     SetupUpAnalogWindow126( -10, 10, "Temperatura");  // ustaw parametry dla ANALOG METER (  UP  )    
  524.     DrawAnalogWindow126( window_up_v1,   -10,  10);   // rysuj analogowy wskaźnik (  UP  ) ( min value ) ( max value )
  525.     DrawAnalogWindow126( window_down_v1,   0,  25);   // rysuj analogowy wskaźnik ( DOWN ) ( min value ) ( max value )
  526. }
  527. //
  528. // *********************************************************************************************************** //
  529. // ***                           A N A L O G   P A N E L   S H O W     V 1                                 *** //
  530. // *********************************************************************************************************** //
  531. //
  532. void TFTPanel :: AnalogPanel_v1_Show(int Temperatura, int Wilgotnosc)
  533. {
  534.     AnalogPanelUp_v1_Show126(Temperatura);
  535.     AnalogPanelDown_v1_Show126(Wilgotnosc);
  536. }
  537. //
  538. // *********************************************************************************************************** //
  539. // ***                                 D I G I T A L   C L O C K     V 1                                   *** //
  540. // *********************************************************************************************************** //
  541. //
  542. void TFTPanel :: DigitalClock_v1_Show(ESP32Time & clock, uint8_t x = 40, uint8_t y = 8)
  543. {
  544.     // położenie x - wartość domyślna to : 5
  545.     // położenie y - wartość domyślna to : 8
  546.    
  547.     char showBufor[4];                // buforek typu char    
  548.     char tempBufor[4];                // buforek typu char
  549.     static bool FlagaZmiany = false;  // flaga do zmiany co 1 sekundę
  550.  
  551.     // sprawdź warunki czy coś do zrobienia (optymalizacja) ----------------------------------
  552.  
  553.     if ( AmPm != clock.getAmPm() )                          // jeśli zmienił się AM i PM
  554.     {                                                       // początek IF
  555.         AmPm = clock.getAmPm(false);                        // zapisz nowy AM/PM pod zmienną
  556.     }                                                       // ten warunek ma być pierwszy !!!
  557.    
  558.     if ( Godzina != clock.getHour(true) )                   // jeśli zmieniła się godzina
  559.     {                                                       // początek IF
  560.         Godzina = clock.getHour(true);                      // zapisz nową godzinę pod zmienną
  561.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła        
  562.         tft.drawString(String(Godzina), x, y, 4);           // drukuj Godzinę jeśli się zmieniła
  563.         tft.setTextColor(TFT_BLUE2, TFT_tlo_zegara);      // ustaw kolor czcionki / tła        
  564.         tft.drawString(AmPm, x + 115, y, 4);                // wyświetl na TFT
  565.     }                                                       // koniec IF
  566.  
  567.     if ( Minuta != clock.getMinute() )                      // jeśli zmieniła się minuta
  568.     {                                                       // początek IF
  569.         Minuta  = clock.getMinute();                        // zapisz nową minutę pod zmienną  
  570.        
  571.         if ( Minuta < 10 )                                  // jeśli minuta mniejsze niz 10
  572.         {                                                   // początek IF
  573.             strcpy(showBufor, "0");                         // kopiuj do showBufor 0
  574.             sprintf(tempBufor, "%d", Minuta);               // konwersja do char
  575.             strcat(showBufor, tempBufor);                   // doklej do showBufor tempBufor
  576.         }                                                   // koniec IF
  577.         else                                                // jeśli minuta większa niz 10
  578.         {                                                   // początek IF
  579.             sprintf( tempBufor, "%d", Minuta );             // konwersja do char
  580.             strcpy( showBufor, tempBufor );                 // skopiuj do showBufor tempBufor
  581.         }                                                   // koniec IF
  582.        
  583.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  584.         tft.drawString(showBufor, x + 40, y, 4);            // drukuj Minutę jeśli się zmieniła                          
  585.     }                                                       // koniec IF
  586.  
  587.     if ( Sekunda != clock.getSecond() )                     // jeśli zmieniła się sekunda        
  588.     {                                                       // początek IF
  589.         Sekunda = clock.getSecond();                        // zapisz nową sekundę pod zmienną
  590.  
  591.         if ( Sekunda < 10 )                                 // jeśli minuta mniejsze niz 10
  592.         {                                                   // początek IF
  593.             strcpy(showBufor, "0");                         // kopiuj do showBufor 0
  594.             sprintf(tempBufor, "%d", Sekunda);              // konwersja do char
  595.             strcat(showBufor, tempBufor);                   // doklej do showBufor tempBufor
  596.         }                                                   // koniec IF
  597.         else                                                // jeśli minuta większa niz 10
  598.         {                                                   // początek IF
  599.             sprintf( tempBufor, "%d", Sekunda );            // konwersja do char
  600.             strcpy( showBufor, tempBufor );                 // skopiuj do showBufor tempBufor
  601.         }                                                   // koniec IF
  602.        
  603.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  604.         tft.drawString(showBufor, x + 80, y, 4);            // drukuj Minutę jeśli się zmieniła
  605.  
  606.         if ( FlagaZmiany ) FlagaZmiany = false;             // zmien wartosc flagi co 1 sekunde
  607.         else                                                // lub
  608.         if (!FlagaZmiany ) FlagaZmiany = true;              // zmien wartosc flagi co 1 sekunde
  609.     }                                                       // koniec IF
  610.                                                      
  611.     // koniec sprawdzania warunków RTC -------------------------------------------------------
  612.  
  613.     if( FlagaZmiany )
  614.     {
  615.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  616.         tft.drawString(":", x + 30, y, 4);                  // drukuj dwukropek zegara
  617.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła                
  618.         tft.drawString(".", x + 70, y, 4);                  // drukuj dwukropek zegara
  619.     }
  620.     else
  621.     {
  622.         tft.setTextColor(TFT_BLUE, TFT_tlo_zegara);         // ustaw kolor czcionki / tła                
  623.         tft.drawString(":", x + 30, y, 4);                  // zamaż dwukropke zegara
  624.         tft.setTextColor(TFT_BLUE, TFT_tlo_zegara);         // ustaw kolor czcionki / tła                
  625.         tft.drawString(".", x + 70, y, 4);                  // drukuj dwukropek zegara
  626.     }  
  627. }
  628.  
  629. // *********************************************************************************************************** //
  630. // ***                                 D I G I T A L   C L O C K     V 1                                   *** //
  631. // *********************************************************************************************************** //
  632. //
  633. void TFTPanel :: DigitalDate_v1_Show(ESP32Time & clock, uint8_t x = 5, uint8_t y = 42)
  634. {
  635.     // położenie x - wartość domyślna to : 5
  636.     // położenie y - wartość domyślna to : 8
  637.    
  638.     if ( Data != clock.getDate(false) )                     // sprawdź czy data się zmieniła (optymalizacja)
  639.     {                                                       // początek IF
  640.         tft.setTextColor(TFT_kolor_zegara, TFT_tlo_zegara); // ustaw kolor czcionki / tła    
  641.         Data = clock.getDate(false);                        // zapisz pod zmienną Data nową datę z RTC
  642.         tft.drawCentreString(Data, 120, y, 4);                      // pokaż datę (angielska wersja)
  643.     }                                                       // koniec IF
  644.    
  645. }
  646. // *********************************************************************************************************** //
  647. // ***                                 E N D                                                               *** //
  648. // *********************************************************************************************************** //
  649.  
Advertisement
Add Comment
Please, Sign In to add comment