PowerTGS440

esp32_tft.h

Mar 26th, 2021 (edited)
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 39.55 KB | None | 0 0
  1. extern TFT_eSPI tft;
  2.  
  3. // =========================================================================================================== //
  4. //
  5. // Plik        : esp32_tft.h                                                                
  6. // Wersja      : 0.01 Beta                                                                      
  7. // Data        : 26.03.2021    
  8. // Licencja    : Donationware 3 EURO (no members group) & OpenSource (only members group ESP32 Projekty & ESP32 Polska)                                                                
  9. // Autor       : TRANSLINE GROUP, Tomasz Majcher, Lubin                                        
  10. //
  11. //
  12. // E-Mail      : [email protected]    
  13. //  
  14. //                                                        
  15. // Licencja v1 : Donationware 3 EURO. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane    
  16. //               i dystrybuowane pod warunkiem, że licencjobiorca zapłaci autorowi kwotę w wysokości 3 EURO na      
  17. //               wskazane konto PayPal
  18. //                                                
  19. //                                                                                                        
  20. // Licencja v2 : OpenSource. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane      
  21. //               i dystrybuowane pod warunkiem, że licencjobiorca jest członkiem grupy: ESP32 Projekty      
  22. //               oraz ESP32 Polska należących do TransLine Group Tomasz Majcher                                                                        
  23. //
  24. //
  25. // Kod źródłowy jest prawnie chroniony. Jedynym jego twórcą i właścicielem jest firma:
  26. // TRANSLINE Tomasz Majcher z siedzibą w Lubin, Polska. NIP: 692-201-09-78, REGON : 390576500
  27. // Tylko członkowie grupy ESP32 Polska i ESP32 Projekty mają pełne prawo do jego modyfikacji
  28. // i rozpowszechniania bez zgody twórcy kodu także w celach komercyjnych i zarobkowych.
  29. //                                                                                                        
  30. // =========================================================================================================== //
  31. // === H I S T O R I A   W E R S J I ========================================================================= //
  32. // =========================================================================================================== //
  33. //
  34. //
  35. // wersja 0.01 SIMPLE - BETA (26.03.2021) - budowa klasy TFTPanel          
  36. //                                                                                                             //
  37. // =========================================================================================================== //
  38. // === P R O T O T Y P Y ===================================================================================== //
  39. // =========================================================================================================== //
  40.  
  41. #define Color_Bakground   TFT_BLACK    
  42. #define Color_Line        tft.color565(37, 205, 245)
  43.  
  44. struct OKNO_v1
  45. {
  46.     int       value_min   = 0;
  47.     int       value_max   = 0;
  48.     int       value_step  = 0;
  49.     String    value_name;
  50.  
  51.     int pos_y = 0;
  52.  
  53.     float ltx = 0;                   // zapisz ltx
  54.     uint16_t osx = 120, osy = 120;   // startowe x i y
  55.     int old_analog =  -999;          // ostatnia wartość analogowa
  56.     int old_value = 0;               // ostatnia zapamiętana analogowa
  57.     int d = 0;                       // pomocnicza
  58. }
  59. Window_TFT_up, Window_TFT_down;
  60.  
  61. // =========================================================================================================== //
  62. // === K L A S A   T F T P a n e l =========================================================================== //
  63. // =========================================================================================================== //
  64.  
  65. class TFTPanel
  66. {
  67.     private: // metody i zmienne prywatne -------------------------------------------------------------------- //
  68.  
  69.         TFT_eSPI & tft;
  70.  
  71.         uint16_t  screen_min_x   =  0;                                      // minimalny punkt x
  72.         uint16_t  screen_min_y   =  0;                                      // minimalny punkt y
  73.         uint16_t  screen_max_x   =  240;                                    // maksymalny punkt x
  74.         uint16_t  screen_max_y   =  320;                                    // maksymalny punkt y
  75.         uint16_t  window_min_x   =  1;                                      // minimalny punkt x OKNA
  76.         uint16_t  window_min_y   =  1;                                      // minimalny punkt y OKNA
  77.         uint16_t  window_max_x   =  239;                                    // maksymalny punkt x OKNA
  78.         uint16_t  window_max_y   =  319;                                    // maksymalny punkt y OKNA
  79.        
  80.         uint16_t  window_size_x  =  window_max_x - window_min_x;            // maksymalna szerokość OKNA
  81.         uint16_t  window_size_y  =  window_max_y - window_min_y;            // maksymalna wysokość OKNA
  82.  
  83.         uint16_t  window_up_v1   =  70;                                     // pozycja y dla OKNA górnego v1
  84.         uint16_t  window_down_v1 = 190;                                     // pozycja y dla OKNA dolnego v1            
  85.        
  86.         // ---------------------------------------------------------------------------------------------------- //
  87.         // --- F U N K C J E   P R Y W A T N E ---------------------------------------------------------------- //
  88.         // ---------------------------------------------------------------------------------------------------- //
  89.  
  90.         inline void DrawMaxWindow();            // rysuj maksymalne okno (-1px) na wyświetlaczu
  91.         inline void DrawDownWindow126();        // rysuj dolne okno o wysokości 126 punktów
  92.         inline void DrawUpWindow126();          // rysuj górne okno o wysokości 126 punktów
  93.         void DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step);
  94.         void ShowAnalogWindow126();
  95.         inline void SetupUpAnalogWindow126( int v_min, int v_step, String v_name);
  96.         inline void SetupDownAnalogWindow126( int v_min, int v_step, String v_name);
  97.         void AnalogPanelUp_v1_Show126(int value);
  98.         void AnalogPanelDown_v1_Show126(int value);
  99.  
  100.        
  101.  
  102.     public:  // metody i zmienne publiczne ------------------------------------------------------------------- //
  103.  
  104.           TFTPanel(TFT_eSPI & adresTFT) : tft (adresTFT) { }            // konstruktor klasy TFTPanel
  105.          
  106.           void PanelInit();                                             // funkcja konfigurująca dla klasy TFTPanel                
  107.           void AnalogPanel_v1_Create();                                 // funkcja tworząca panel wyświetlacza v1  
  108.           void AnalogPanel_v1_Show(int Wilgotnosc, int Temperatura);    // funkcja pokazująca panel wyświetlacza v1
  109. };
  110.  
  111. // =========================================================================================================== //
  112. // === M E T O D Y   P R Y W A T N E ========================================================================= //
  113. // =========================================================================================================== //
  114. //
  115. // --- S P I S   M E T O D    P R Y W A T N Y C H ---
  116. //
  117. // inline void TFTPanel :: DrawMaxWindow()
  118. // inline void TFTPanel :: DrawDownWindow126()
  119. // inline void TFTPanel :: DrawUpWindow126()
  120. // void DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step)
  121. // inline void SetupUpAnalogWindow126( int v_min, int v_step, String v_name)
  122. // inline void SetupDownAnalogWindow126( int v_min, int v_step, String v_name)
  123. // void AnalogPanel_v1_Show(int Wilgotnosc, int Temperatura)
  124. //
  125. //
  126. // *********************************************************************************************************** //
  127. // ***                                 Narysuj maksymalne okno                                             *** //
  128. // *********************************************************************************************************** //
  129. //
  130. inline void TFTPanel :: DrawMaxWindow()
  131. {
  132.     tft.drawRect(window_min_x, window_min_y, window_size_x, window_size_y, Color_Line);       // ramka ekranu
  133. }
  134. //
  135. // *********************************************************************************************************** //
  136. // ***                                 Narysuj ramkę dolną                                                 *** //
  137. // *********************************************************************************************************** //
  138. //
  139. inline void TFTPanel :: DrawDownWindow126()
  140. {
  141.     tft.drawRect(window_min_x, window_max_y - 126, window_size_x, 126, Color_Line);           // ramka dolna
  142. }
  143. //
  144. // *********************************************************************************************************** //
  145. // ***                                 Narysuj ramkę górną                                                 *** //
  146. // *********************************************************************************************************** //
  147. //
  148. inline void TFTPanel :: DrawUpWindow126()
  149. {
  150.     tft.drawRect(window_min_x, window_max_y - (2 * 126) + 2, window_size_x, 126, Color_Line);   // ramka górna
  151. }
  152. //
  153. // *********************************************************************************************************** //
  154. // ***                             Zapamiętaj ustawienia okna UP                                           *** //
  155. // *********************************************************************************************************** //
  156. //
  157. inline void TFTPanel :: SetupUpAnalogWindow126( int v_min, int v_step, String v_name)
  158. {
  159.     Window_TFT_up.value_min = v_min;                          // minimalna wartość ANALOG METER          
  160.     Window_TFT_up.value_step = v_step;                        // zwiekszaj wartość ANALOG METER o V_STEP
  161.     Window_TFT_up.value_max = v_min + ( 4 * v_step );         // maksymalna wartość ANALOG METER
  162.     Window_TFT_up.value_name = v_name;                        // przypisz nazwę dla ANALOG METER
  163. }
  164. //
  165. // *********************************************************************************************************** //
  166. // ***                             Zapamiętaj ustawienia okna DOWN                                         *** //
  167. // *********************************************************************************************************** //
  168. //
  169. inline void TFTPanel :: SetupDownAnalogWindow126( int v_min, int v_step, String v_name)
  170. {
  171.     Window_TFT_down.value_min = v_min;                        // minimalna wartość ANALOG METER            
  172.     Window_TFT_down.value_step = v_step;                      // zwiększaj wartość ANALOG METER o V_STEP
  173.     Window_TFT_down.value_max = v_min + ( 4 * v_step );       // maksymalna wartość ANALOG METER
  174.     Window_TFT_down.value_name = v_name;                      // przypisz nazwę dla ANALOG METER
  175. }
  176. //
  177. // *********************************************************************************************************** //
  178. // ***                                 Narysuj miernik analogowy                                           *** //
  179. // *********************************************************************************************************** //
  180. //
  181. void TFTPanel :: DrawAnalogWindow126(uint16_t start_y, int value_start, int value_step)
  182. {
  183.     tft.setTextColor(TFT_WHITE);        
  184.    
  185.    
  186.     if ( window_up_v1 == start_y )  
  187.     {
  188.         tft.drawRightString ( Window_TFT_up.value_name, 220, 119 - 20 + start_y, 2);
  189.         Window_TFT_up.pos_y = start_y;
  190.     }
  191.     else
  192.     if (window_down_v1 == start_y)  
  193.     {
  194.         tft.drawRightString ( Window_TFT_down.value_name, 220, 119 - 20 + start_y, 2);        
  195.         Window_TFT_down.pos_y = start_y;
  196.     }
  197.  
  198.     for (int i = -50; i < 51; i += 5)                                               // pętla od - 50 do 50
  199.     {                                                                               // początek FOR
  200.         int tl = 15;                                                                // tl równa się 15
  201.         float sx = cos((i - 90) * 0.0174532925);                                    // wyznacz sx
  202.         float sy = sin((i - 90) * 0.0174532925);                                    // wyznacz sy
  203.         uint16_t x0 = sx * (100 + tl) + 120;                                        // wyznacz x0
  204.         uint16_t y0 = sy * (100 + tl) + 140+start_y;                                // wyznacz y0
  205.         uint16_t x1 = sx * 100 + 120;                                               // wyznacz x1
  206.         uint16_t y1 = sy * 100 + 140+start_y;                                       // wyznacz y1
  207.         float sx2 = cos((i + 5 - 90) * 0.0174532925);                               // wyznacz sx2
  208.         float sy2 = sin((i + 5 - 90) * 0.0174532925);                               // wyznacz sy2
  209.         int x2 = sx2 * (100 + tl) + 120;                                            // wyznacz x2
  210.         int y2 = sy2 * (100 + tl) + 140+start_y;                                    // wyznacz y2
  211.         int x3 = sx2 * 100 + 120;                                                   // wyznacz x3
  212.         int y3 = sy2 * 100 + 140+start_y;                                           // wyznacz y3
  213.                                                                                     // fake line auto-generater
  214.         if (i >= -50 && i < -45)                                                    // początek IF
  215.         {
  216.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 191, 255));
  217.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 191, 255));
  218.         }                                                                           // koniec IF
  219.         else                                                                        // lub
  220.         if (i >= -45 && i < -40)                                                    // początek IF
  221.         {
  222.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 220, 255));
  223.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 220, 255));      
  224.         }                                                                           // koniec IF
  225.         else                                                                        // lub
  226.         if (i >= -40 && i < -35)                                                    // początek IF
  227.         {
  228.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 255));
  229.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 255));      
  230.         }                                                                           // koniec IF
  231.         else                                                                        // lub
  232.         if (i >= -35 && i < -30)                                                    // początek IF
  233.         {
  234.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 191));
  235.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 191));      
  236.         }                                                                           // koniec IF
  237.         else                                                                        // lub
  238.         if (i >= -30 && i < -25)                                                    // początek IF
  239.         {
  240.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 128));
  241.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 128));      
  242.         }                                                                           // koniec IF
  243.         else                                                                        // lub
  244.         if (i >= -25 && i < -20)                                                    // początek IF
  245.         {
  246.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 64));
  247.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 64));      
  248.         }
  249.         else                                                                        // lub    
  250.         if (i >= -20 && i < -15)                                                    // początek IF
  251.         {
  252.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(0, 255, 0));
  253.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(0, 255, 0));
  254.         }                                                                           // koniec IF
  255.         else                                                                        // lub
  256.         if (i >= -15 && i < -10)                                                    // początek IF
  257.         {
  258.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(20, 255, 0));
  259.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(20, 255, 0));
  260.         }                                                                           // koniec IF
  261.         else                                                                        // lub
  262.         if (i >= -10 && i < -5)                                                     // początek IF
  263.         {
  264.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(40, 255, 0));
  265.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(40, 255, 0));
  266.         }                                                                           // koniec IF
  267.         else                                                                        // lub
  268.         if (i >= -5 && i < 0)                                                       // początek IF
  269.         {
  270.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(64, 255, 0));
  271.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(64, 255, 0));
  272.         }                                                                           // koniec IF
  273.         else                                                                        // lub
  274.         if (i >= 0 && i < 5)                                                        // początek IF
  275.         {
  276.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(128, 255, 0));
  277.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(128, 255, 0));
  278.         }                                                                           // koniec IF
  279.         else                                                                        // lub
  280.         if (i >= 5 && i < 10)                                                       // początek IF
  281.         {
  282.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(191, 255, 0));
  283.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(191, 255, 0));
  284.         }                                                                           // koniec IF
  285.         else                                                                        // lub
  286.         if (i >= 10 && i < 15)                                                      // początek IF
  287.         {
  288.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 235, 0));
  289.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 235, 0));
  290.         }                                                                           // koniec IF
  291.         else                                                                        // lub
  292.         if (i >= 15 && i < 20)                                                      // początek IF
  293.         {
  294.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 230, 0));
  295.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 230, 0));
  296.         }                                                                           // koniec IF
  297.         else                                                                        // lub
  298.         if (i >= 20 && i < 25)                                                      // początek IF
  299.         {
  300.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 200, 0));
  301.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 200, 0));
  302.         }                                                                           // koniec IF
  303.         else                                                                        // lub
  304.         if (i >= 25 && i < 30)                                                      // początek IF
  305.         {
  306.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 170, 0));
  307.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 170, 0));
  308.         }                                                                           // koniec IF
  309.         else                                                                        // lub
  310.         if (i >= 30 && i < 35)                                                      // początek IF
  311.         {
  312.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 140, 0));
  313.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 140, 0));
  314.         }                                                                           // koniec IF
  315.         else                                                                        // lub
  316.         if (i >= 35 && i < 40)                                                      // początek IF
  317.         {
  318.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 110, 0));
  319.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 110, 0));
  320.         }                                                                           // koniec IF
  321.         else                                                                        // lub
  322.         if (i >= 40 && i < 45)                                                      // początek IF
  323.         {
  324.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 64, 0));
  325.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 64, 0));
  326.         }                                                                           // koniec IF
  327.         else                                                                        // lub
  328.         if (i >= 45 && i < 50)                                                      // początek IF
  329.         {
  330.             tft.fillTriangle(x0, y0, x1, y1, x2, y2, tft.color565(255, 0, 0));
  331.             tft.fillTriangle(x1, y1, x2, y2, x3, y3, tft.color565(255, 0, 0));
  332.         }                                                                           // koniec IF
  333.                                                                                     // fake line auto-generate
  334.         if (i % 25 != 0) tl = 8;                                                    // jeśli reszta z dzielenia rózna od 0
  335.                                                                                     // fake line auto-generate
  336.         x0 = sx * (100 + tl) + 120;                                                 // oblicz x0
  337.         y0 = sy * (100 + tl) + 140+start_y;                                         // oblicz y0
  338.         x1 = sx * 100 + 120;                                                        // oblicz x1
  339.         y1 = sy * 100 + 140+start_y;                                                // oblicz y1
  340.                                                                                     // fake line auto-generate
  341.         tft.drawLine(x0, y0, x1, y1, TFT_BLACK);                                    // drukuj ticka
  342.                                                                                     // fake line auto-generate
  343.         if (i % 25 == 0)                                                            // jeśli reszta z dzielenia to 0
  344.         {                                                                           // to
  345.             x0 = sx * (100 + tl + 10) + 120;                                        // wyznacz x0
  346.             y0 = sy * (100 + tl + 10) + 140+start_y;                                // wyznacz y0
  347.                                                                                     // fake line auto-generate
  348.             int    FValue;                                                          // zapisz tu skok skali
  349.                                                                                     // fake line auto-generate
  350.             switch (i / 25)                                                         // liczba całkowita z dzielenia / 25
  351.             {                                                                       // przełącznik logiczny
  352.                 case -2:  FValue = value_start + ( 0 * value_step );                // oblicz dla -2 wartość FVALUE
  353.                           tft.drawCentreString(String(FValue), x0, y0 - 12, 2);     // konwertuj do STRING pokaż na TFT
  354.                           break;                                                    // przerwij
  355.                 case -1:  FValue = value_start + ( 1 * value_step );                // oblicz dla -1 wartość FVALUE
  356.                           tft.drawCentreString(String(FValue), x0, y0 - 9, 2);      // konwertuj do STRING pokaż na TFT
  357.                           break;                                                    // przerwij
  358.                 case 0:   FValue = value_start + ( 2 * value_step );                // oblicz dla  0 wartość FVALUE
  359.                           tft.drawCentreString(String(FValue), x0, y0 - 6, 2);      // konwertuj do STRING pokaż na TFT
  360.                           break;                                                    // przerwij
  361.                 case 1:   FValue = value_start + ( 3 * value_step );                // oblicz dla +1 wartość FVALUE
  362.                           tft.drawCentreString(String(FValue), x0, y0 - 9, 2);      // konwertuj do STRING pokaż na TFT
  363.                           break;                                                    // przerwij
  364.                 case 2:   FValue = value_start + ( 4 * value_step );                // oblicz dla +2 wartość FVALUE
  365.                           tft.drawCentreString(String(FValue), x0, y0 - 12, 2);     // konwertuj do STRING pokaż na TFT
  366.                           break;                                                    // przerwij
  367.             }                                                                       // K O N I E C   P R Z E Ł A C Z N I K
  368.         }                                                                           // K O N I E C   R E S Z T A   %   0
  369.                                                                                     // fake line auto-generate
  370.         sx = cos((i + 5 - 90) * 0.0174532925);                                      // wyznacz sx z cosinusa DT I 0.1714
  371.         sy = sin((i + 5 - 90) * 0.0174532925);                                      // wyznacz sy z sinusa   DT I 0.1714
  372.         x0 = sx * 100 + 120;                                                        // podstaw pod x0
  373.         y0 = sy * 100 + 140+start_y;                                                // podstaw pod y0
  374.         if (i < 50) tft.drawLine(x0, y0, x1, y1, TFT_BLACK);                        // drukuj skalę
  375.     }                                                                               // K O N I E C   P Ę T L I   F O R    
  376. }                                                                                   // K O N I E C   F U N K C J I
  377. //
  378. // *********************************************************************************************************** //
  379. // ***                                 Pokaz miernik analogowy UP                                          *** //
  380. // *********************************************************************************************************** //
  381. //
  382. void TFTPanel :: AnalogPanelUp_v1_Show126(int value)
  383. {
  384.     int y = Window_TFT_up.pos_y;                                              // wyznacz oś y ze struktury UP
  385.     int ms_delay = 0;
  386.     char buf[8];                                                              // bufor tekstowy
  387.     dtostrf(value, 4, 0, buf);                                                // kopiuj wartość typu INT do CHAR
  388.                                                                               // fake line auto-generated
  389.     tft.setTextColor(TFT_WHITE, TFT_BLACK);                                   // ustaw kolor czcionki / tła
  390.     tft.drawRightString(buf, 40, 119 - 20+y, 2);                              // drukuj zawartość bufora CHAR
  391.     tft.drawRightString(Window_TFT_up.value_name, 220, 119 - 20+y, 2);        // drukuj zawartość dla UP
  392.                                                                               // fake line auto-generated
  393.     if (value < Window_TFT_up.value_min) value = Window_TFT_up.value_min;     // ustaw wartość minimalną
  394.     if (value > Window_TFT_up.value_max) value = Window_TFT_up.value_max;     // ustaw wartość maxymalną
  395.                                                                               // fake line auto-generated
  396.     while (!(value == Window_TFT_up.old_analog))                              // jesli wartości się zmieniły
  397.     {                                                                         // początek pętli WHILE
  398.         if (Window_TFT_up.old_analog < value) Window_TFT_up.old_analog++;     // sprawdź
  399.         else Window_TFT_up.old_analog--;                                      // jeśli FAŁSZ odejmij 1
  400.                                                                               // fake line auto-generated
  401.         if (ms_delay == 0) Window_TFT_up.old_analog = value;                  // fake flicker
  402.                                                                               // fake line auto-generated
  403.         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
  404.                                                                               // fale line auto-generated      
  405.         float sx = cos(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla sx
  406.         float sy = sin(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla xy
  407.         float tx = tan((sdeg + 90) * 0.0174532925);                           // oblicz DELTĘ
  408.                                                                               // fake line auto-generated
  409.         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ę
  410.         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ę
  411.         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ę
  412.         tft.setTextColor(TFT_WHITE);                                          // ustaw kolor znaków / pikseli
  413.                                                                               // fake line auto-generated  
  414.         Window_TFT_up.ltx = tx;                                               // zapisz nowe tx
  415.         Window_TFT_up.osx = sx * 98 + 120;                                    // zapisz nowe sx
  416.         Window_TFT_up.osy = sy * 98 + 140;                                    // zapisz nowe sy
  417.                                                                               // fake line auto-generated
  418.         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ę
  419.         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ę
  420.         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ę
  421.                                                                                     // fake line auto-generated
  422.         if (abs(Window_TFT_up.old_analog - value) < 10) ms_delay += ms_delay / 5;   // fake flicker
  423.         delay(ms_delay);                                                            // fake flicker
  424.     }                                                                               // K O N I E C   W H I L E
  425. }
  426. //
  427. // *********************************************************************************************************** //
  428. // ***                                 Narysuj miernik analogowy DOWN                                      *** //
  429. // *********************************************************************************************************** //
  430. //
  431. void TFTPanel :: AnalogPanelDown_v1_Show126(int value)
  432. {
  433.  int y = Window_TFT_down.pos_y;                                               // wyznacz oś y ze struktury UP
  434.     int ms_delay = 0;
  435.     char buf[8];                                                              // bufor tekstowy
  436.     dtostrf(value, 4, 0, buf);                                                // kopiuj wartość typu INT do CHAR
  437.                                                                               // fake line auto-generated
  438.     tft.setTextColor(TFT_WHITE, TFT_BLACK);                                   // ustaw kolor czcionki / tła
  439.     tft.drawRightString(buf, 40, 119 - 20+y, 2);                              // drukuj zawartość bufora CHAR
  440.     tft.drawRightString(Window_TFT_down.value_name, 220, 119 - 20+y, 2);      // drukuj zawartość dla UP
  441.                                                                               // fake line auto-generated
  442.     if (value < Window_TFT_down.value_min) value = Window_TFT_down.value_min; // ustaw wartość minimalną
  443.     if (value > Window_TFT_down.value_max) value = Window_TFT_down.value_max; // ustaw wartość maxymalną
  444.                                                                               // fake line auto-generated
  445.     while (!(value == Window_TFT_down.old_analog))                            // jesli wartości się zmieniły
  446.     {                                                                         // początek pętli WHILE
  447.         if (Window_TFT_down.old_analog < value) Window_TFT_down.old_analog++; // sprawdź
  448.         else Window_TFT_down.old_analog--;                                    // jeśli FAŁSZ odejmij 1
  449.                                                                               // fake line auto-generated
  450.         if (ms_delay == 0) Window_TFT_down.old_analog = value;                // fake flicker
  451.                                                                               // fake line auto-generated
  452.         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
  453.                                                                               // fale line auto-generated      
  454.         float sx = cos(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla sx
  455.         float sy = sin(sdeg * 0.0174532925);                                  // oblicz nowe wartości dla xy
  456.         float tx = tan((sdeg + 90) * 0.0174532925);                           // oblicz DELTĘ
  457.                                                                               // fake line auto-generated
  458.         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ę
  459.         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ę
  460.         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ę
  461.         tft.setTextColor(TFT_WHITE);                                          // ustaw kolor znaków / pikseli
  462.                                                                               // fake line auto-generated  
  463.         Window_TFT_down.ltx = tx;                                             // zapisz nowe tx
  464.         Window_TFT_down.osx = sx * 98 + 120;                                  // zapisz nowe sx
  465.         Window_TFT_down.osy = sy * 98 + 140;                                  // zapisz nowe sy
  466.                                                                               // fake line auto-generated
  467.         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ę
  468.         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ę
  469.         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ę
  470.                                                                                        // fake line auto-generated
  471.         if (abs(Window_TFT_down.old_analog - value) < 10) ms_delay += ms_delay / 5;    // fake flicker
  472.         delay(ms_delay);                                                               // fake flicker
  473.     }                
  474. }
  475.  
  476.  
  477. // =========================================================================================================== //
  478. // === M E T O D Y   P U B L I C Z N E ======================================================================= //
  479. // =========================================================================================================== //
  480. //
  481. //
  482. //
  483. //
  484. //
  485. // *********************************************************************************************************** //
  486. // ***                       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                     *** //
  487. // *********************************************************************************************************** //
  488. //
  489. void TFTPanel :: PanelInit()
  490. {
  491.     tft.init();                                // inicjalizuj ekran
  492.     tft.setRotation(0);                        // ustaw rotację
  493.     tft.fillScreen(Color_Bakground);           // ustaw tło okna    
  494. }
  495. //
  496. // *********************************************************************************************************** //
  497. // ***                           A N A L O G   P A N E L   C R E A T E     V 1                             *** //
  498. // *********************************************************************************************************** //
  499. //
  500. void TFTPanel :: AnalogPanel_v1_Create()
  501. {
  502.     DrawMaxWindow();                                  // rysuj ramkę dla maksymalnego okna głównego
  503.     DrawDownWindow126();                              // rysuj ramkę dolną dla modułu ANALOG METER ( DOWN )
  504.     SetupDownAnalogWindow126( 0, 25, "Wilgotnosc");   // ustaw parametry dla ANALOG METER ( DOWN )
  505.     DrawUpWindow126();                                // rysuj ramkę górną dla modułu ANALOG METER (  UP  )
  506.     SetupUpAnalogWindow126( -10, 10, "Temperatura");  // ustaw parametry dla ANALOG METER (  UP  )    
  507.     DrawAnalogWindow126( window_up_v1,   -10,  10);   // rysuj analogowy wskaźnik (  UP  ) ( min value ) ( max value )
  508.     DrawAnalogWindow126( window_down_v1,   0,  25);   // rysuj analogowy wskaźnik ( DOWN ) ( min value ) ( max value )
  509. }
  510. //
  511. // *********************************************************************************************************** //
  512. // ***                           A N A L O G   P A N E L   S H O W     V 1                                 *** //
  513. // *********************************************************************************************************** //
  514. //
  515. void TFTPanel :: AnalogPanel_v1_Show(int Temperatura, int Wilgotnosc)
  516. {
  517.     AnalogPanelUp_v1_Show126(Temperatura);
  518.     AnalogPanelDown_v1_Show126(Wilgotnosc);
  519. }
  520. // *********************************************************************************************************** //
Add Comment
Please, Sign In to add comment