Advertisement
SowaKiller

KomputerPokladowy 25.05.2024

May 23rd, 2024 (edited)
747
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 69.66 KB | None | 0 0
  1. #include <Arduino.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_ST7735.h>
  4. #include <Adafruit_INA219.h>
  5. #include <DallasTemperature.h>
  6. #include <SPI.h>
  7. #include <OneWire.h>
  8. #include <Wire.h>
  9. #include "RTClib.h"
  10. #include <FastLED.h>
  11. //#include <EasyButton.h>
  12. #include <SD.h>
  13. #include <Adafruit_PCF8575.h>
  14. #include "Symbole.h"
  15. //#include <Filter.h>
  16. //#include <WiFi.h>
  17. //#include <ListLib.h>
  18.  
  19. #define TFT_DC          12          //%     A0
  20. #define TFT_CS          13          //%     CS
  21. #define TFT_MOSI        14          //%     SDA
  22. #define TFT_CLK         27          //%     SCK
  23. #define TFT_RST         0
  24. #define TFT_MISO        0  
  25.  
  26.  
  27. #define EXP_INT         0
  28.  
  29. #define TERMOPARA_CS    4
  30.  
  31. #define RS485_RX        16
  32. #define RS485_TX        17
  33. #define RS485_EN        32
  34.  
  35. #define AFR             35
  36. #define MUX_IN          25
  37. #define D_TEMP_PIN      0            
  38. #define LULU_PIN        36
  39.  
  40. #define LED_PIN         2       //%     Pin Diod RGB (wskaźników)
  41. #define NUM_LEDS        8       //%     Ilość diod  
  42. #define BRIGHTNESS      100     //%     Moc świecenia
  43. #define LED_TYPE        WS2812  //%     Typ diod
  44. #define COLOR_ORDER     GRB     //%     Konfiguracja kolorystyczna
  45.  
  46. #define UPDATES_PER_SECOND 100
  47.  
  48. #define WTRYSK_BUTTON   26      //%     Definicja wtrysku jako przycisk
  49.  
  50. #define kartaSD         5       //%     Pin Karty SD
  51. #define PinWtrysk       39      //%     Pin wtrysku  (Jeżeli to wina tego pinu to chce użyć pinu 35, obecnie przeznaczonego do AFR)
  52. #define PinHalla        34      //%     Pin czujnika halla
  53. #define PinObroty       33      //%     Pin podpisany jako zapłon ale wykorzystywany do pomiaru obrotów
  54.  
  55. uint16_t kolorTla;              //%     Definicja koloru Tła/podświetlenia
  56. uint16_t kolorTex;              //%     Definicja koloru tekstu
  57. uint16_t kolorClk;              //%     Definicja koloru zegarka
  58. #define czasResetu  2000        //%     Czas przez jaki trzeba przytzymać przycisk Reset żeby zresetować zmienną
  59.  
  60. #define linijek     20          //%     liczba linijek zapisu danych w pliku
  61.  
  62. File buforDanych;               //% plik który przechowuje TYLKO najświeższe dane
  63. File aktualnyPlikZapisu;        //% plik który przechowuje wszystkie dane z jednego dnia
  64. File najnowszyPlikOdczytu;      //% najmłodszy odnaleziony plik zawirający dane
  65. File config;                    //% plik konfiguracyjny :D
  66.  
  67. TaskHandle_t wTle;
  68.  
  69. Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST);
  70.  
  71. Adafruit_INA219 ina219;
  72.  
  73. RTC_DS1307 rtc;
  74.  
  75. CRGB leds[NUM_LEDS];
  76. //CRGBPalette16 currentPalette;
  77. //TBlendType    currentBlending;
  78.  
  79. //extern CRGBPalette16 myRedWhiteBluePalette;
  80. //extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
  81.  
  82.  
  83. Adafruit_PCF8575 pcf;
  84.  
  85. OneWire oneWire(26);
  86. DallasTemperature sensors(&oneWire);
  87. DeviceAddress sensorOUT = { 0x28, 0xFF, 0x64, 0xE, 0x6A, 0x21, 0x21, 0xE4 };
  88. DeviceAddress sensorIN = { 0x28, 0xFF, 0x64, 0xE, 0x6B, 0xBA, 0xD5, 0xBA };
  89.  
  90. //EasyButton przyciskFunkcji(FUNKCJA_BUTTON);
  91. //EasyButton przyciskTrybu(RESET_BUTTON);
  92. //EasyButton przyciskResetu(TRYB_BUTTON);
  93. //EasyButton przyciskWtrysk(WTRYSK_BUTTON);
  94. //EasyButton przyciskZaplon(ZAPLON_BUTTON);
  95.  
  96. bool diagnosta=false;       //% zmienna odpowiedzialna za tryb diangostyczny
  97.  
  98. //& ZMIENNE PRZYPISANE DO STANÓW NA WEJŚCIACH EXPENDERA
  99. unsigned long czasPrzytrzymaniaPrzycisku;
  100.  
  101. bool zaplon;
  102. bool swiatla;
  103. bool GPIOtrzyTrzy;
  104. bool GPIOtrzyCztery;
  105. bool buzzer=false;
  106. bool MUX_A;
  107. bool MUX_B;
  108. bool MUX_C;
  109. bool MANETKAreset;
  110. bool MANETKAfunckja;
  111. bool MANETKAtryb;
  112. bool ESP_RESET;
  113. bool zlonczeUI;
  114. bool zlonczeUII;
  115. bool zlonczeUIII;
  116. bool LCD_LED;
  117.  
  118. float NTC_ONE;
  119. float NTC_TWO;
  120.  
  121. float czisOlej;
  122. float czisBoost;
  123.  
  124. byte muxCode[8][3]{
  125.     {0,0,0},
  126.     {1,0,0},
  127.     {0,1,0},
  128.     {1,1,0},
  129.     {0,0,1},
  130.     {1,0,1},
  131.     {0,1,1},
  132.     {1,1,1},
  133. };
  134.  
  135. //& ZMIENNE POTRZEBNE DO FUNKCJI OPBLICZANIA SPALANIA
  136.  
  137. volatile bool nowyImpuls;
  138. volatile bool nowyImpuls2;
  139. volatile unsigned long czasImpulsu;
  140. volatile unsigned long czasImpulsu2;
  141. float czasOtwarciaWT;           //% czas impulstu czyli czas otwarcia wtrusku * ilość otwarć, żeby obliczzyć splanaie trzeba pomnożyć przez stałaW
  142. float stalaW=0.01355;          //% stała wtrysku (ml/milisekunde) float stalaW=0.014183, 0.003416, 0.01355;  
  143. float spalanieM;                //% splanie na cykl,
  144. float spalanieLS;               //% spalnie L w trzech sekundzach "chwilowe"
  145. float spalanieLH;               //% spalnie L w godzine "chwilowe"
  146. float sumaSpalania1km;          //% suma srednich spalan paliwa w 1km
  147. float iloscOdczytow1km;         //% ilosc pobranych odczytow spalania w 3s
  148. float SrSpalanie1km;            //% srednie spalanaie w 1km
  149. float SrSpalanie100km;          //% srednie spalanie na 100km
  150. float najSpalanie;              //% maksymalne osiagnięte spalanie
  151.  
  152. float spalonePaliwoTrip;        //% zurzyte paliwo trip1
  153. float spalonePaliwoSuma;        //% zurzyte paliwo suma
  154. float spalonePaliwoDzienne;     //% zurzyte paliwo dzienne
  155. unsigned long poprzedniOczyt=0; //% zmienna do zapisania kiedy poprzedni odczyt
  156.  
  157. //& ZIENNE POTRZEBNE DO FUNKCJI OBLICZANIA PRĘDKOSCI
  158. int c;                          //% ilosc cykli w predkosciomierzu
  159. unsigned long czasPrzed;        //% czas przed pełnym obortem koła od predkościomierza
  160. unsigned long czasPo;           //% czas po pełnym obortem koła od predkościomierza
  161. float roznicaP=0.00;            //% czas oborotu koła magnetycznego w prętkościomierzu
  162. float predkosc;                 //% predkosc samochodu
  163. float predkoscMS;               //% predkość w metrach na sekunde
  164. float SrPredkosc[3];            //% tablica do obliczania sredniej prędkosci
  165. float MaxPredkosc;              //% Maksymalna osiągnięta prędkosć
  166. bool zero;                      //% umozliwiająca wskazanie predkości na 0 km/h
  167. bool a, b;                      //% do predkosciomeirza
  168.  
  169. //& ZMIENNE POTRZEBNE DO FUNKCJI OBLICZANIA PRZEJECHANEGO DSYTANSU
  170. bool tylkoRazPD;                //% żeby przejechany dystans tylko raz sie naliczyczl
  171. float PDystansM;                //% przejechany dystans w metrach
  172. float PDystansKM;               //% przejechany dystans w kilometrach dzienny
  173. float PDystansKMpop;            
  174. float PDystansKMSuma;           //% przejechany dystans w kilometrach SUMA
  175. float PDystansKMTrip1;          //% przejechany dystans od restetu tzw. trip1
  176. float PDystansKMOdtankowania;   //% przejechany dystans od tankowania
  177. int przebiegPrzed=701;          //% przebieg samochodu przed zamontawniem MFA 2.0
  178. int przebieg;                   //% przebieg aktualny czyli przebiegPrzed + przejechany dystans
  179. int rozrzad;                    //% ile km temu był wymieniany rozrzad
  180. int olej;                       //% ile km temu był wymieniany olej
  181. float roznicaDoDys=0.000;       //% zmienna wynikająca z dzielenia roznicyP przez 1000 do obliczania przjejechanego dystansu
  182.  
  183. //& ZMIENNE POTRZEBNE DO FUNKCJI OBLICZANIA CZSU PRACY SILNIKA
  184. float czasPracySilnikaSuma;             //% czas pracy silnika SUMA
  185. int czasPracySilnikaGodziny;            //% czas pracy silniak dzienny w godzinach
  186. int czasPracySilnikaMinuty;             //% czas pracy silnika dzienny w minutach    
  187. float czasPracySilnikaMinutySuma;       //% czas pracy silnika SUMA w minutach oblicza po resesie w setup
  188. unsigned long czasStartowy = 0;         //% Czas początkowy aktywacji sygnału
  189. unsigned long czasTrwania = 0;          //% Całkowity czas trwania sygnału
  190. bool sygnalWystepuje = false;           //% Flaga wskazująca, czy sygnał występuje
  191. const unsigned long limitCzasu = 10000; //% Limit czasu, po którym uznajemy, że sygnał zanikł (4 sekundy)
  192.  
  193. //& ZMIENNE POTRZEBNE DO FUNKCJI OBLICZANIA NAPIECIA AKUMULATROA
  194. float napiecie;                         //% napięcie akumulatora
  195. float moc;
  196.  
  197. //& ZMIENNE POTRZEBNE DO FUNKCJI OBLICZANIA ILOSCI PALIWA
  198. float odczytMiliVoltP;                  //% odczyt przez dzilenik napiecia
  199. float odczytVoltP;                      //% przekształcenie odczytu na faktyczne napięcie na wskaźniku
  200. float aktualnyStanPaliwa;
  201. float zatankowanoOstatnio;
  202. unsigned long ostatniOczdczytCzasu1=0;
  203. unsigned long ostatniOczdczytCzasu2=0;
  204. float sumaPaliwa;                           //% do średnije
  205. float sredniePaliwo;                    
  206. //float spalonePaliwoTrip;              //% zurzyte paliwo trip1
  207. //float spalonePaliwoSuma;              //% zurzyte paliwo suma
  208. //float spalonePaliwoDzienne;           //% zurzyte paliwo dzienne        
  209.  
  210.  
  211. //& ZMIENNE POTRZEBNE DO FUNKCJI MIERZENIA TEMPERATURY CIECZY
  212. float temperaturaCieczy;        
  213. float SrTemperaturaCieczy;
  214. float odczytMiliVoltT;           //% odczyt przez dzilenik napiecia
  215. float odczytVoltT;               //% przekształcenie odczytu na faktyczne napięcie na wskaźniku
  216.  
  217. //& ZMIENNE POTRZEBNE DO FUNKCJI MIERZENIE TEMPERATURY OLEJU
  218. float odczytMiliVoltO;           //% odczyt przez dzilenik napiecia
  219. float temperaturaOleju;
  220. float SrTemperaturaOleju;
  221.  
  222. //& RESZTA NIE PRZYPISANNYCH ZMIENNYCH
  223. bool wycz;                      //% czy wyczyszczony wsywietlacz przed wyswieleniem nowej funkcji          
  224. char zegarekBuf[12];            //% tablice z datą i godzina
  225. int licznikW=1;                 //% licznik ilości wciśnięć przycisku funkcji
  226. int tryb;                       //% zmienna określajaca tryb MFA 1 albo 2
  227. bool trzaReset;                 //% określenie czy należy wykonać reset
  228. bool stanSamochodu;             //% true = zaplon on false = zgaszony
  229. bool popStanSamochodu;          //% zapis poprzedniego stanu samochodu
  230. bool tylkoRazSA;
  231.  
  232. //& ZMIENNE POTRZEBNE DO ZAPISU I ODCZYTU DANYCH Z KARTY
  233. bool wyslanoKlucz = false;
  234. bool odebranoKlucz = false;
  235. bool mogeZmienicEkran = true;
  236.  
  237. String nrSeryjny;
  238. float stW;
  239. int liczbaW;
  240. int pojemnoscBaku;
  241. int aktEkran=1;
  242. String vSoft= "0.67";
  243.  
  244. long najwczesniej = 0;
  245. String nazwaPliku = "";
  246. String pobraneDane[][2] =   //% tablica przechowująca pobrane dane z pliku SD; pierwsza kolumna to index danych a druga to wartość
  247. {
  248.     {"01|", "0"},           //% przebieg
  249.     {"02|", "0"},           //% przejechany dystans Trip1
  250.     {"03|", "0"},           //% przejechany dysatns od tankowania
  251.     {"04|", "0"},           //% średnia spalanie
  252.     {"05|", "0"},           //% maksymalna osiągnięta prędkość
  253.     {"06|", "0"},           //% srednie prędkość
  254.     {"07|", "0"},           //% czas pracy silnika
  255.     {"08|", "0"},           //% zatankowane ostatnio paliwo
  256.     {"09|", "0"},           //% spalone paliwo suma
  257.     {"10|", "0"},           //% średnia temperatura cieczy
  258.     {"11|", "0"},           //% średnia temperatura oleju
  259.     {"12|", "0"},           //% ile kilmetrów temu byl wymeinay olej
  260.     {"13|", "0"},           //% ile kilmetrów temu byl wymeinay rozrzed  
  261.     {"14|", "0"},           //% najwysze spalanie
  262.     {"15|", "0"},           //% pusta linijka
  263.     {"16|", "0"},           //% pusta linijka
  264.     {"17|", "0"},           //% pusta linijka
  265.     {"18|", "0"},           //% pusta linijka
  266.     {"19|", "0"},           //% pusta linijka
  267.     {"20|", " "},           //% pusta linijka
  268. };
  269.  
  270. String daneDoZapisu[][2] =  //% tablica przechowująca pobrane dane z pliku SD; pierwsza kolumna to index danych a druga to wartość
  271. {
  272.     {"01|", "0"},           //% przebieg
  273.     {"02|", "0"},           //% przejechany dystans Trip1
  274.     {"03|", "0"},           //% przejechany dysatns od tankowania
  275.     {"04|", "0"},           //% średnia spalanie
  276.     {"05|", "0"},           //% maksymalna osiągnięta prędkość
  277.     {"06|", "0"},           //% srednie prędkość
  278.     {"07|", "0"},           //% czas pracy silnika
  279.     {"08|", "0"},           //% zatankowane ostatnio paliwo
  280.     {"09|", "0"},           //% spalone paliwo suma
  281.     {"10|", "0"},           //% średnia temperatura cieczy
  282.     {"11|", "0"},           //% średnia temperatura oleju
  283.     {"12|", "0"},           //% ile kilometrow temu byl wymieniany olej
  284.     {"13|", "0"},           //% ile kilmetrów temu byl wymeinay rozrzed  
  285.     {"14|", "0"},           //% najwysze spalanie
  286.     {"15|", "0"},           //% pusta linijka
  287.     {"16|", "0"},           //% pusta linijka
  288.     {"17|", "0"},           //% pusta linijka
  289.     {"18|", "0"},           //% pusta linijka
  290.     {"19|", "0"},           //% pusta linijka
  291.     {"20|", " "},           //% pusta linijka
  292. };
  293.  
  294. String ekranyTr1 [12] = {"","","","","","","","","","","",""};
  295. String ekranyTr2 [12] = {"","","","","","","","","","","",""};
  296.  
  297. String* calyPlik;
  298.  
  299. char nazwaNowegoPliku[36];
  300.  
  301. String aktLinie(String zawartosc, String id, String nowaZawartosc) {
  302.  
  303.   int pozycjaJeden = zawartosc.indexOf(id);
  304.   if (pozycjaJeden != -1) {
  305.     int pozycjaDwa = zawartosc.indexOf('\n', pozycjaJeden);
  306.     if (pozycjaDwa == -1) {
  307.       pozycjaDwa = zawartosc.length();
  308.     }
  309.     zawartosc = zawartosc.substring(0, pozycjaJeden) + nowaZawartosc + zawartosc.substring(pozycjaDwa);
  310.   }
  311.  
  312.   return zawartosc;
  313. }
  314.  
  315. void obsluzConfig()                                    
  316. {
  317.   config = SD.open("/config.txt", FILE_READ);
  318.  
  319.  
  320.   String ramka;
  321.   int a=0;
  322.   while (config.available())
  323.   {
  324.     a++;
  325.     ramka=config.readStringUntil('\n');
  326.     Serial.println(ramka);
  327.     String idStr = ramka.substring(1, 4);
  328.     int id = idStr.toInt();
  329.     String wartoscStr = ramka.substring(5, ramka.length() - 6);
  330.    
  331.     delay(50);
  332.     Serial.print("Id: ");
  333.     Serial.println(id);
  334.     delay(50);
  335.     Serial.print("Wartosc: ");
  336.     Serial.println(wartoscStr);
  337.     delay(50);
  338.    
  339.  
  340.     switch(id) {
  341.         case 0:
  342.             nrSeryjny=wartoscStr;
  343.             Serial.println("Nadano adres ID");
  344.             break;
  345.         case 1:
  346.             stW=wartoscStr.toFloat();
  347.             break;
  348.         case 2:
  349.             liczbaW=wartoscStr.toInt();
  350.             break;
  351.         case 4:
  352.             pojemnoscBaku=wartoscStr.toInt();
  353.             break;
  354.         case 5:
  355.  
  356.             break;
  357.         case 11:
  358.             ekranyTr1[1]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  359.             ekranyTr2[1]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  360.             break;
  361.         case 12:
  362.             ekranyTr1[2]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  363.             ekranyTr2[2]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  364.             break;
  365.         case 13:
  366.             ekranyTr1[3]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  367.             ekranyTr2[3]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  368.             break;
  369.         case 14:
  370.             ekranyTr1[4]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  371.             ekranyTr2[4]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  372.             break;
  373.         case 15:
  374.             ekranyTr1[5]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  375.             ekranyTr2[5]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  376.             break;
  377.         case 16:
  378.             ekranyTr1[6]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  379.             ekranyTr2[6]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  380.             break;
  381.         case 17:
  382.             ekranyTr1[7]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  383.             ekranyTr2[7]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  384.             break;
  385.         case 18:
  386.             ekranyTr1[8]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  387.             ekranyTr2[8]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  388.             break;
  389.         case 19:
  390.             ekranyTr1[9]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  391.             ekranyTr2[9]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  392.             break;
  393.         case 20:
  394.             ekranyTr1[10]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  395.             ekranyTr2[10]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  396.             break;
  397.         case 21:
  398.             ekranyTr1[11]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  399.             ekranyTr2[11]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  400.             break;
  401.         case 22:
  402.             ekranyTr1[12]=wartoscStr.substring(0, wartoscStr.indexOf('#'));
  403.             ekranyTr2[12]=wartoscStr.substring((wartoscStr.indexOf('#'))+1);
  404.             break;
  405.         case 23:
  406.             break;
  407.         case 24:
  408.             break;
  409.         case 25:
  410.             kolorTla=strtol(wartoscStr.c_str(), NULL, 16);
  411.             //Serial.println(kolorTla);
  412.             break;
  413.         case 26:
  414.             kolorTex=strtol(wartoscStr.c_str(), NULL, 16);
  415.             //Serial.println(kolorTex);
  416.             break;
  417.         case 27:
  418.             kolorClk=strtol(wartoscStr.c_str(), NULL, 16);
  419.             break;
  420.         default:
  421.             break;
  422.     }
  423.   }
  424.   //Serial.println(ekranyTr1[1]);
  425.   //Serial.println(ekranyTr2[1]);
  426.   config.close();
  427. }
  428.  
  429. void zapisNaKarcie()
  430. {
  431.  
  432.     aktualnyPlikZapisu = SD.open(nazwaNowegoPliku, FILE_WRITE);
  433.     buforDanych = SD.open("/buforDanych.txt", FILE_WRITE);
  434.    
  435.     buforDanych.seek(0);
  436.     aktualnyPlikZapisu.seek(0);
  437.     //aktualnyPlikZapisu.print("\n");
  438.    
  439.     for(int i=0; i<linijek; i++)
  440.     {
  441.         aktualnyPlikZapisu.print(daneDoZapisu[i][0]);
  442.         aktualnyPlikZapisu.println(daneDoZapisu[i][1]);
  443.         buforDanych.print(daneDoZapisu[i][0]);
  444.         buforDanych.println(daneDoZapisu[i][1]);
  445.     }
  446.     //aktualnyPlikZapisu.println("END DATA");
  447.     buforDanych.println("END DATA");
  448.     aktualnyPlikZapisu.close();
  449.     buforDanych.close();
  450. }
  451.  
  452. void pobranieDanych()
  453. {
  454.     String liniaD;
  455.     String doWpisania;
  456.    
  457.     int wiersz = 0;
  458.     int licznik = 0;
  459.     int pozycja;
  460.     int liczbaWierszy=linijek;
  461.  
  462.     if(diagnosta){Serial.println("teraz czas pobrac dane z pliku");}
  463.     najnowszyPlikOdczytu = SD.open("/" + nazwaPliku, FILE_READ);
  464.    
  465.     //Serial.println("Plik odczytu ma tyle wierszy:");
  466.     if(najnowszyPlikOdczytu.available()<=1)
  467.     {
  468.         if(diagnosta){Serial.println("Usuwam pusty plik");}
  469.         SD.remove("/" + nazwaPliku);
  470.         ESP.restart();
  471.     }
  472.     najnowszyPlikOdczytu.seek(0);
  473.     while(najnowszyPlikOdczytu.available())
  474.     {
  475.         liniaD = najnowszyPlikOdczytu.readStringUntil('\n');
  476.         licznik++;
  477.     }
  478.    
  479.     //Serial.println(licznik);
  480.    
  481.     calyPlik = new String[licznik+1];
  482.     najnowszyPlikOdczytu.seek(0);
  483.     for(int a = 0; a<licznik; a++)
  484.     {
  485.         najnowszyPlikOdczytu.seek(najnowszyPlikOdczytu.position()+3);
  486.         liniaD = najnowszyPlikOdczytu.readStringUntil('\n');
  487.         calyPlik[a]=liniaD;
  488.         //Serial.println(liniaD);
  489.     }
  490.    
  491.     najnowszyPlikOdczytu.close();
  492.    
  493.     for (int i = liczbaWierszy; i >= 0; i--)
  494.     {
  495.         int c=map(i, 20, 0, 0, 20);
  496.         String buf = calyPlik[licznik- i];
  497.         if(diagnosta){Serial.println(buf);}
  498.         pobraneDane[c][1]=buf;
  499.        
  500.     }
  501.     delete[] calyPlik;
  502.  
  503. }
  504.  
  505. void utowrzeniePliku()
  506. {
  507.     DateTime now = rtc.now();
  508.     sprintf(nazwaNowegoPliku, "/%02u-%02u-%04u %02u-%02u-%02u.txt",now.day(),now.month(),now.year(),now.hour(),now.minute(),now.second());
  509.     Serial.println(nazwaNowegoPliku);
  510.     //zapisNaKarcie();
  511.  
  512. }
  513.  
  514. void nadpisywanieDanychDoZapisu()
  515. {
  516.     daneDoZapisu[0][1]=przebieg;                //Serial.println(przebieg);
  517.     daneDoZapisu[1][1]=PDystansKMTrip1;         //Serial.println(PDystansKMTrip1);
  518.     daneDoZapisu[2][1]=PDystansKMOdtankowania;  //Serial.println(PDystansKMOdtankowania);
  519.     daneDoZapisu[3][1]=SrSpalanie100km;         //Serial.println(SrSpalanie100km);
  520.     daneDoZapisu[4][1]=MaxPredkosc;             //Serial.println(MaxPredkosc);
  521.     daneDoZapisu[5][1]=SrPredkosc[3];           //Serial.println(SrPredkosc[3]);
  522.     daneDoZapisu[6][1]=czasPracySilnikaSuma;    //Serial.println(czasPracySilnikaSuma);
  523.     daneDoZapisu[7][1]=zatankowanoOstatnio;     //Serial.println(zatankowanoOstatnio);
  524.     daneDoZapisu[8][1]=spalonePaliwoSuma;       //Serial.println(spalonePaliwoSuma);
  525.     daneDoZapisu[9][1]=SrTemperaturaCieczy;     //Serial.println(SrTemperaturaCieczy);
  526.     daneDoZapisu[10][1]=SrTemperaturaOleju;     //Serial.println(SrTemperaturaOleju);
  527.     daneDoZapisu[11][1]=olej;
  528.     daneDoZapisu[12][1]=rozrzad;
  529.     daneDoZapisu[13][1]=najSpalanie;
  530.     daneDoZapisu[14][1]=spalonePaliwoTrip;
  531.     daneDoZapisu[15][1]="0.00";
  532.     daneDoZapisu[16][1]="0.00";
  533.     daneDoZapisu[17][1]="0.00";
  534.     daneDoZapisu[18][1]="0.00";
  535.     daneDoZapisu[19][1]="0.00";
  536. }
  537.  
  538. void zapisPobranychDanych()
  539. {
  540.     utowrzeniePliku();
  541.     aktualnyPlikZapisu = SD.open(nazwaNowegoPliku, FILE_WRITE);
  542.     buforDanych = SD.open("/buforDanych.txt", FILE_WRITE);
  543.     for(int i=0; i<linijek; i++)
  544.     {
  545.         aktualnyPlikZapisu.print(pobraneDane[i][0]);
  546.         aktualnyPlikZapisu.print(pobraneDane[i][1]);
  547.         buforDanych.print(pobraneDane[i][0]);
  548.         buforDanych.print(pobraneDane[i][1]);
  549.     }
  550.     aktualnyPlikZapisu.close();
  551.     buforDanych.close();
  552.  
  553.     przebieg =              atoi(pobraneDane[0][1].c_str());    if(diagnosta){Serial.println(przebieg);}
  554.     PDystansKMTrip1 =       atoff(pobraneDane[1][1].c_str());   if(diagnosta){Serial.println(PDystansKMTrip1);}
  555.     PDystansKMOdtankowania= atoff(pobraneDane[2][1].c_str());   if(diagnosta){Serial.println(PDystansKMOdtankowania);}
  556.     SrSpalanie100km =       atoff(pobraneDane[3][1].c_str());   if(diagnosta){Serial.println(SrSpalanie100km);}
  557.     MaxPredkosc =           atoff(pobraneDane[4][1].c_str());   if(diagnosta){Serial.println(MaxPredkosc);}
  558.     SrPredkosc[3] =         atoff(pobraneDane[5][1].c_str());   if(diagnosta){Serial.println(SrPredkosc[3]);}
  559.     czasPracySilnikaSuma =  atoi(pobraneDane[6][1].c_str());    if(diagnosta){Serial.println(czasPracySilnikaSuma);}
  560.     zatankowanoOstatnio =   atoff(pobraneDane[7][1].c_str());   if(diagnosta){Serial.println(zatankowanoOstatnio);}
  561.     spalonePaliwoSuma =     atoff(pobraneDane[8][1].c_str());   if(diagnosta){Serial.println(spalonePaliwoSuma);}
  562.     SrTemperaturaCieczy =   atoff(pobraneDane[9][1].c_str());   if(diagnosta){Serial.println(SrTemperaturaCieczy);}
  563.     SrTemperaturaOleju =    atoff(pobraneDane[10][1].c_str());  if(diagnosta){Serial.println(SrTemperaturaOleju);}
  564.     olej =                  atoi(pobraneDane[11][1].c_str());
  565.     rozrzad =               atoi(pobraneDane[12][1].c_str());
  566.     najSpalanie =           atoff(pobraneDane[13][1].c_str());
  567.     //nadpisywanieDanychDoZapisu();
  568. }
  569.  
  570. void wyborNajnowszegoPliku()
  571. {
  572.     File plik1 = SD.open("/");
  573.     File plik2;
  574.     File najnowszyPlik;
  575.    
  576.     bool pustaKarta = !plik1.available();
  577.     bool toJuzWszystkiePliki = true;
  578.     //Serial.println(pustaKarta);
  579.     long long najnowszaDataGodzina = 0;
  580.     String bufferNazwaPliku;
  581.     String dzien, miesiac, rok, godzina, minuta, sekunda;
  582.  
  583.     if(!pustaKarta)
  584.     {
  585.         utowrzeniePliku();
  586.     }
  587.     else
  588.     {
  589.         while(toJuzWszystkiePliki)
  590.         {
  591.             plik2 = plik1.openNextFile();
  592.             if(plik2.isDirectory())
  593.             {
  594.                 continue;
  595.             }
  596.             if(!plik2)
  597.             {
  598.                 toJuzWszystkiePliki = false;
  599.             }
  600.             else
  601.             {
  602.                 bufferNazwaPliku = plik2.name();
  603.                 dzien = bufferNazwaPliku.substring(0, 2);
  604.                 miesiac = bufferNazwaPliku.substring(3, 5);
  605.                 rok = bufferNazwaPliku.substring(6, 10);
  606.                 godzina = bufferNazwaPliku.substring(11, 13);
  607.                 minuta = bufferNazwaPliku.substring(14, 16);
  608.                 sekunda = bufferNazwaPliku.substring(17, 19);
  609.  
  610.                 long long dataGodzina = atoll((rok + miesiac + dzien + godzina + minuta + sekunda).c_str());
  611.  
  612.                 if(dataGodzina > najnowszaDataGodzina)
  613.                 {
  614.                     najnowszaDataGodzina = dataGodzina;
  615.                     najnowszyPlik = plik2;
  616.                     nazwaPliku = najnowszyPlik.name();
  617.                 }
  618.                 plik2.close();
  619.             }
  620.         }
  621.         plik1.close();
  622.         Serial.println(nazwaPliku);
  623.     }
  624. }
  625.  
  626. void inicjalizacjaKonfiguracji(){
  627.     if (Serial.available() > 0) {
  628.         if (!odebranoKlucz) {
  629.             String odebranyKlucz = Serial.readStringUntil('\n');
  630.        
  631.             if (odebranyKlucz == "123456789") {
  632.                 odebranoKlucz = true;
  633.                 delay(200);
  634.                 Serial.println(odebranyKlucz);
  635.                 delay(50);
  636.                 Serial.println("Przyznano dostep");
  637.                 delay(50);
  638.                 Serial.print("NrSeryjny: ");
  639.                 Serial.println(nrSeryjny);
  640.                 delay(50);
  641.                 Serial.print("WersjaOprogramowania: ");
  642.                 Serial.println("0.68");
  643.                
  644.             }
  645.         }
  646.     }
  647.        
  648.     while(odebranoKlucz == true){
  649.         if(Serial.available() > 0){
  650.             config = SD.open("/config.txt", FILE_READ);            
  651.             String zawartosc = config.readString();
  652.             config.close();
  653.  
  654.             String receivedChar = Serial.readString();
  655.  
  656.             Serial.print("Odebrano: ");
  657.             Serial.println(receivedChar);
  658.  
  659.             String idStr = receivedChar.substring(1, 4);
  660.             int id = idStr.toInt();
  661.             Serial.print("ID: ");
  662.             Serial.println(idStr);
  663.            
  664.             String wartoscStr = receivedChar.substring(5, receivedChar.length() - 5);
  665.             Serial.print("wartosc: ");
  666.             Serial.println(wartoscStr);
  667.  
  668.             if(id==999){
  669.                 odebranoKlucz=false;
  670.                 tft.println("REset");
  671.                 ESP.restart();
  672.             }else if(id==101){
  673.                 Serial.println("Konfiguracja zegaraka");
  674.                 uint16_t year = wartoscStr.substring(6, 10).toInt();  // Wyodrębnienie roku
  675.                 uint16_t month = wartoscStr.substring(3, 5).toInt();  // Wyodrębnienie miesiąca
  676.                 uint16_t day = wartoscStr.substring(0, 2).toInt();    // Wyodrębnienie dnia
  677.                 uint16_t hour = wartoscStr.substring(11, 13).toInt(); // Wyodrębnienie godziny
  678.                 uint16_t minute = wartoscStr.substring(14, 16).toInt(); // Wyodrębnienie minuty
  679.                 uint16_t second = wartoscStr.substring(17, 19).toInt(); // Wyodrębnienie sekundy
  680.  
  681.                 rtc.adjust(DateTime(year, month, day, hour, minute, second)); // Ustawienie RTC
  682.             }else{
  683.                 config = SD.open("/config.txt",FILE_WRITE);
  684.                 String modifiedzawartosc = aktLinie(zawartosc, idStr, receivedChar);
  685.                 config.print(modifiedzawartosc);
  686.                 config.close();
  687.             }
  688.         }
  689.     }
  690. }
  691.  
  692. void obslugaExpendera()
  693. {
  694.     for (uint8_t p=0; p<16; p++) {
  695.         switch (p) {
  696.             case 0:
  697.                 if(pcf.digitalRead(p)==0){
  698.                     zaplon=true;
  699.                     //Serial.println(zaplon);
  700.                 }else{
  701.                     zaplon=false;
  702.                 }
  703.                 break;
  704.             case 1:
  705.                 if(pcf.digitalRead(p)==0){
  706.                     swiatla=true;
  707.                     //Serial.println(swiatla);
  708.                 }else{
  709.                     swiatla=false;
  710.                 }
  711.                 break;
  712.             case 2:
  713.                 if(pcf.digitalRead(p)==0){
  714.                     GPIOtrzyTrzy=true;
  715.                 }else{
  716.                     GPIOtrzyTrzy=false;
  717.                 }
  718.                 break;
  719.             case 3:
  720.                 if(pcf.digitalRead(p)==0){
  721.                     GPIOtrzyCztery=true;
  722.                 }else{
  723.                     GPIOtrzyCztery=false;
  724.                 }
  725.                 break;
  726.             case 4:
  727.                 if(buzzer==true){
  728.                     pcf.digitalWrite(p, LOW);
  729.                 }else{
  730.                     pcf.digitalWrite(p, HIGH);
  731.                 }
  732.                 break;
  733.             case 8:
  734.                 if(pcf.digitalRead(p)==1){
  735.                     MANETKAtryb=true;
  736.                 }else{
  737.                     MANETKAtryb=false;
  738.                 }
  739.                 break;
  740.                
  741.             case 9:
  742.                 if(pcf.digitalRead(p)==1){
  743.                     MANETKAfunckja=true;
  744.                 }else{
  745.                     MANETKAfunckja=false;
  746.                 }
  747.                 break;
  748.             case 10:
  749.                 if(pcf.digitalRead(p)==1){
  750.                     if (czasPrzytrzymaniaPrzycisku == 0) {
  751.                         czasPrzytrzymaniaPrzycisku = millis(); // Zapisz czas rozpoczęcia naciśnięcia przycisku
  752.                         } else {
  753.                         // Jeśli przycisk jest nadal wciśnięty, sprawdź czy minęło wystarczająco czasu na uznane za długie naciśnięcie
  754.                         if (millis() - czasPrzytrzymaniaPrzycisku >= 2000) {
  755.                             // Wykonaj funkcję dla długiego naciśnięcia przycisku
  756.                             MANETKAreset=true;  
  757.                             // Zresetuj czas rozpoczęcia naciśnięcia przycisku
  758.                             czasPrzytrzymaniaPrzycisku = 0;
  759.                         }
  760.                         }
  761.                     } else {
  762.                         MANETKAreset=false;
  763.                         czasPrzytrzymaniaPrzycisku = 0;
  764.                     }
  765.                 break;
  766.             case 11:
  767.                 if(ESP_RESET==true){
  768.                     pcf.digitalWrite(p, LOW);
  769.                     ESP_RESET=false;
  770.                 }else{
  771.                     pcf.digitalWrite(p, HIGH);
  772.                 }
  773.                 break;
  774.             case 12:
  775.                 if(pcf.digitalRead(p)==0){
  776.                     zlonczeUI=true;
  777.                 }else{
  778.                     zlonczeUI=false;
  779.                 }
  780.                 break;
  781.             case 13:
  782.                 if(pcf.digitalRead(p)==0){
  783.                     zlonczeUII=true;
  784.                 }else{
  785.                     zlonczeUII=false;
  786.                 }
  787.                 break;
  788.             case 14:
  789.                 if(pcf.digitalRead(p)==0){
  790.                     zlonczeUIII=true;
  791.                 }else{
  792.                     zlonczeUIII=false;
  793.                 }
  794.                 break;
  795.             case 15:
  796.                 if(LCD_LED==false){
  797.                     pcf.digitalWrite(15, HIGH);
  798.                 }else{
  799.                     pcf.digitalWrite(15, LOW);
  800.                 }
  801.                 break;
  802.             default:
  803.                
  804.             break;
  805.         }      
  806.     }
  807.         //pcf.digitalWrite(5,muxCode[1][0]);
  808.         //pcf.digitalWrite(6,muxCode[1][1]);
  809.         //pcf.digitalWrite(7,muxCode[1][2]);
  810.         //odczytMiliVoltP=(analogReadMilliVolts(MUX_IN));
  811.    
  812.     for(int i=0; i<8; i++){
  813.         pcf.digitalWrite(5,muxCode[i][0]);
  814.         pcf.digitalWrite(6,muxCode[i][1]);
  815.         pcf.digitalWrite(7,muxCode[i][2]);
  816.         //Serial.print("Napięcie na pinie ");
  817.         //Serial.print(i);
  818.         //Serial.print(" : ");
  819.         //Serial.println(analogRead(MUX_IN));
  820.    
  821.         switch (i)
  822.         {
  823.         case 0:
  824.             odczytMiliVoltT=(analogReadMilliVolts(MUX_IN));
  825.             break;
  826.         case 1:
  827.             odczytMiliVoltP=(analogReadMilliVolts(MUX_IN));
  828.             break;
  829.         case 2:
  830.             odczytMiliVoltO=(analogReadMilliVolts(MUX_IN));
  831.             break;
  832.         case 3:
  833.             NTC_ONE=(analogReadMilliVolts(MUX_IN));
  834.             break;
  835.         case 4:
  836.             NTC_TWO=(analogReadMilliVolts(MUX_IN));
  837.             break;
  838.         case 5:
  839.             czisOlej=(analogReadMilliVolts(MUX_IN));
  840.             break;
  841.         case 6:
  842.             czisBoost=(analogReadMilliVolts(MUX_IN));
  843.             break;
  844.         default:
  845.             break;
  846.         }
  847.        
  848.     }
  849.  
  850. }
  851.  
  852.  
  853. volatile unsigned long czasOstatniegoZbocza = 0;
  854. volatile unsigned long czasMiedzyZboczami = 0;
  855.  
  856. void IRAM_ATTR isr_otwarcieWtrysku ()
  857. {
  858. //  unsigned long czasAktulnegoZbocza = micros();
  859.   unsigned long czasAktulnegoZbocza = millis();
  860.  
  861.   unsigned long roznica = czasAktulnegoZbocza - czasOstatniegoZbocza;
  862.  
  863.   if(digitalRead(PinWtrysk) == HIGH)
  864.   {
  865.     czasMiedzyZboczami =  roznica;
  866.     czasOstatniegoZbocza = czasAktulnegoZbocza;
  867.   }else{
  868.     if(roznica > 30){
  869.     czasImpulsu = roznica;
  870.     nowyImpuls = true;
  871.     } else czasOstatniegoZbocza = czasAktulnegoZbocza;
  872.   }
  873. }
  874. /*
  875. volatile unsigned long czasOstatniegoZbocza = 0;
  876. volatile unsigned long czasMiedzyZboczami = 0;
  877.  
  878. void IRAM_ATTR isr_otwarcieWtrysku ()
  879. {
  880. //  unsigned long czasAktulnegoZbocza = micros();
  881.   unsigned long czasAktulnegoZbocza = millis();
  882.  
  883.   if(digitalRead(PinWtrysk) == HIGH)
  884.   {
  885.     czasMiedzyZboczami =  czasAktulnegoZbocza - czasOstatniegoZbocza ;
  886.     czasOstatniegoZbocza = czasAktulnegoZbocza;
  887.   }else{
  888.     czasImpulsu = czasAktulnegoZbocza-czasOstatniegoZbocza;
  889.     nowyImpuls = true;
  890.   }
  891. }
  892. */
  893.  
  894. void spalonePaliwo()
  895. {
  896.     spalonePaliwoDzienne+=spalanieLS;
  897.     spalonePaliwoSuma+=spalanieLS;
  898.     spalonePaliwoDzienne+=spalanieLS;
  899. }
  900.  
  901. void SrednieSpalanie()
  902. {
  903.     if (PDystansKM - PDystansKMpop >= 1)
  904.     {
  905.         if (iloscOdczytow1km > 0)
  906.         {
  907.             SrSpalanie1km = sumaSpalania1km / iloscOdczytow1km;
  908.         }
  909.         else
  910.         {
  911.             SrSpalanie1km = 0;
  912.         }
  913.  
  914.         if (SrSpalanie100km <= 0)
  915.         {
  916.             SrSpalanie100km = SrSpalanie1km;
  917.         }
  918.  
  919.         SrSpalanie100km = ((SrSpalanie1km * 1) + (SrSpalanie100km * 99)) / 100;
  920.         sumaSpalania1km = 0;
  921.         iloscOdczytow1km = 0;
  922.         PDystansKMpop = PDystansKM;
  923.     }
  924. }
  925.  
  926. void spalanie()
  927. {
  928.     if(nowyImpuls)
  929.     {  
  930.         //noInterrupts();
  931.         czasOtwarciaWT=czasImpulsu/1000.0;
  932.         nowyImpuls=false;
  933.         //interrupts();
  934.         //Serial.print("czas Impulsu: ");
  935.         Serial.print(millis());
  936.       Serial.print(" - ");    
  937.         Serial.print(czasOtwarciaWT);
  938.       Serial.print(" - ");
  939.       Serial.println(czasMiedzyZboczami);
  940.         iloscOdczytow1km++;
  941.         spalanieLS=czasImpulsu/1000000.00*stalaW;
  942.         spalanieLH=spalanieLS*1200.00;
  943.         if(spalanieLH>30.00){spalanieLH=0.00;spalanieLS=0.00;}
  944.         sumaSpalania1km+=spalanieLS;
  945.         spalonePaliwo();
  946.         SrednieSpalanie();
  947.        
  948.         //Serial.println(czasImpulsu/10000000.00,5);
  949.        
  950.         //Serial.print(" spalanie L na 3s: ");
  951.         //Serial.print(spalanieLS, 6);
  952.         //Serial.print(" spalanie L na h: ");
  953.         //Serial.println(spalanieLH,6);
  954.        
  955.     }else{
  956.         if(millis()-poprzedniOczyt>=5000){
  957.             //ESP_RESET=true;
  958.            poprzedniOczyt=millis();
  959.         }
  960.     }  
  961.    
  962. }
  963.  
  964. void najwyzszeSpalanie()
  965. {
  966.     if(spalanieLH>najSpalanie)
  967.     {
  968.         najSpalanie=spalanieLH;
  969.     }
  970. }
  971.  
  972. void predkosciomierz()
  973. {
  974.     a=false;
  975.     b=false;
  976.     zero=false;
  977.     c=0;
  978.     czasPrzed=millis();
  979.     while(c<4)  //jeden obórt linki = cztery max wartosci (cztery "magnesy")
  980.     {
  981.         if(analogRead(PinHalla)<=2050) //min odczyt z czujnika
  982.         {b=true;}
  983.            
  984.         if(analogRead(PinHalla)>=2051 && analogRead(PinHalla)<2200 && b==true)
  985.         {a=true;}
  986.        
  987.         if(analogRead(PinHalla)>=2200 && a==true) //max odczyt z czujknika
  988.         {c++;a=false;b=false;}
  989.        
  990.         //jezeli linka stoi przez 3 sekundy to jest to równe z 0 predkoscia
  991.         if(millis()-czasPrzed>=3000)    
  992.         {c=5; zero=true;}
  993.     }
  994.     czasPo=millis();
  995.     roznicaP=czasPo-czasPrzed;
  996.    
  997.     if(zero==true)      //jeżeli predkosc zerowa
  998.     {
  999.         predkosc=0;
  1000.         predkoscMS=0;
  1001.         zero=false;
  1002.     }else
  1003.     {
  1004.         //funkcja stosunku czasu obrotu linki do predkosci samochodu
  1005.         predkosc=3999*(1.0/roznicaP)+0.5;
  1006.         //predkosc w metrach na sekunde do obliczania przejechanego dystansu  
  1007.         predkoscMS=predkosc/3.6;            
  1008.         tylkoRazPD=true;
  1009.        
  1010.     }
  1011. }
  1012.  
  1013. void SredniaPredkosc()
  1014. {
  1015.     SrPredkosc[0]=predkosc;
  1016.     SrPredkosc[1]+=SrPredkosc[0];
  1017.     SrPredkosc[2]++;
  1018.     SrPredkosc[3]=SrPredkosc[1]/SrPredkosc[2];
  1019. }
  1020.  
  1021. void PrzejechanyDystans()
  1022. {
  1023.     if(tylkoRazPD==true)
  1024.     {
  1025.         roznicaDoDys=roznicaP/1000.0000;
  1026.         //temp Serial.println(roznicaDoDys);
  1027.         PDystansM=PDystansM+((roznicaDoDys*predkoscMS)*0.94);
  1028.         PDystansKM=PDystansM/1000;
  1029.         PDystansKMSuma+=            ((roznicaDoDys*predkoscMS)*0.94);
  1030.         PDystansKMOdtankowania+=    ((roznicaDoDys*predkoscMS)*0.94);
  1031.         przebieg+=                  ((roznicaDoDys*predkoscMS)*0.94);
  1032.         PDystansKMTrip1+=           ((roznicaDoDys*predkoscMS)*0.94);
  1033.         olej+=                      ((roznicaDoDys*predkoscMS)*0.94);
  1034.         rozrzad+=                   ((roznicaDoDys*predkoscMS)*0.94);
  1035.         tylkoRazPD=false;
  1036.     }
  1037.    
  1038. }
  1039.  
  1040. void MaxOsiagnietaPredkosc()
  1041. {
  1042.     if(predkosc>MaxPredkosc)
  1043.     {
  1044.         MaxPredkosc=predkosc;
  1045.     }
  1046. }
  1047.  
  1048. void DiodyKontrolkiStart()
  1049. {
  1050.     leds[3].setColorCode(0x500000);
  1051.     leds[4] = CRGB::Black;
  1052.     leds[5] = CRGB::Black;
  1053.     leds[6] = CRGB::Black;
  1054.     leds[7] = CRGB::Black;
  1055.     FastLED.show();
  1056.     delay(100);
  1057.     leds[3].setColorCode(0x500000);
  1058.     leds[4].setColorCode(0x502500);
  1059.     leds[5] = CRGB::Black;
  1060.     leds[6] = CRGB::Black;
  1061.     leds[7] = CRGB::Black;
  1062.     FastLED.show();
  1063.     delay(100);
  1064.     leds[3].setColorCode(0x500000);
  1065.     leds[4].setColorCode(0x502500);
  1066.     leds[5].setColorCode(0x005000);
  1067.     leds[6] = CRGB::Black;
  1068.     leds[7] = CRGB::Black;
  1069.     FastLED.show();
  1070.     delay(100);
  1071.     leds[3].setColorCode(0x500000);
  1072.     leds[4].setColorCode(0x502500);
  1073.     leds[5].setColorCode(0x005000);
  1074.     leds[6].setColorCode(0x005050);
  1075.     leds[7] = CRGB::Black;
  1076.     FastLED.show();
  1077.     delay(100);
  1078.     leds[3].setColorCode(0x500000);
  1079.     leds[4].setColorCode(0x502500);
  1080.     leds[5].setColorCode(0x005000);
  1081.     leds[6].setColorCode(0x005050);
  1082.     leds[7].setColorCode(0x000050);
  1083.     FastLED.show();
  1084.     delay(200);
  1085.     leds[3].setColorCode(0x500000);
  1086.     leds[4].setColorCode(0x502500);
  1087.     leds[5].setColorCode(0x005000);
  1088.     leds[6].setColorCode(0x005050);
  1089.     leds[7] = CRGB::Black;
  1090.     FastLED.show();
  1091.     delay(100);
  1092.     leds[3].setColorCode(0x500000);
  1093.     leds[4].setColorCode(0x502500);
  1094.     leds[5].setColorCode(0x005000);
  1095.     leds[6] = CRGB::Black;
  1096.     leds[7] = CRGB::Black;
  1097.     FastLED.show();
  1098.     delay(100);
  1099.     leds[3].setColorCode(0x500000);
  1100.     leds[4].setColorCode(0x502500);
  1101.     leds[5] = CRGB::Black;
  1102.     leds[6] = CRGB::Black;
  1103.     leds[7] = CRGB::Black;
  1104.     FastLED.show();
  1105.     delay(100);
  1106.     leds[3].setColorCode(0x500000);
  1107.     leds[4] = CRGB::Black;
  1108.     leds[5] = CRGB::Black;
  1109.     leds[6] = CRGB::Black;
  1110.     leds[7] = CRGB::Black;
  1111.     FastLED.show();
  1112.     delay(100);
  1113.     leds[3] = CRGB::Black;
  1114.     leds[4] = CRGB::Black;
  1115.     leds[5] = CRGB::Black;
  1116.     leds[6] = CRGB::Black;
  1117.     leds[7] = CRGB::Black;
  1118.     FastLED.show();
  1119.     delay(100);
  1120.        
  1121.    
  1122. }
  1123.  
  1124. void podswietlenie()
  1125. {
  1126.     if(swiatla)
  1127.     {
  1128.         leds[0].setColorCode(0x00FF00);
  1129.         leds[1].setColorCode(0x00FF00);
  1130.         leds[2].setColorCode(0x00FF00);
  1131.  
  1132.         FastLED.show();
  1133.     }else{
  1134.         leds[0] = CRGB::Black;
  1135.         leds[1] = CRGB::Black;
  1136.         leds[2] = CRGB::Black;
  1137.         FastLED.show();
  1138.     }
  1139. }
  1140.  
  1141. void odczytTemperaturyCieczy()
  1142. {
  1143.     if(zaplon){
  1144.     //odczytMiliVoltT=analogReadMilliVolts(36)-0.10;
  1145.     odczytVoltT=(10.0-((((odczytMiliVoltT)*((1500.0+750.0)/750.0))/1000.0)))-0.10;
  1146.     temperaturaCieczy = 1.0 / (((78.32591 / (odczytVoltT/10.0)) - 78.32591 + 130.0) / 22800.0);
  1147.     //Serial.println(odczytVoltT);
  1148.     }
  1149. }
  1150.  
  1151.  
  1152. void odczytIlosciPaliwa()
  1153. {
  1154.     if(zaplon){
  1155.     if(millis()-ostatniOczdczytCzasu1>=1000)
  1156.     {
  1157.         //odczytMiliVoltP=analogReadMilliVolts(39)-0.10;
  1158.         odczytVoltP=(10.0-((odczytMiliVoltP*750.0/(1500.0+750.0))-52.67)/100.0); //10.10-(((odczytMiliVoltP*((1500+750)/750))/1000));
  1159.         //Serial.println(odczytVoltP);
  1160.        
  1161.         if (odczytVoltP <= 3.5011) {
  1162.         aktualnyStanPaliwa=( -7.6 * (13.4 / (odczytVoltP - 5.8)) - 21);
  1163.         } else if (odczytVoltP >= 3.501 && odczytVoltP <= 4.49304) {
  1164.             aktualnyStanPaliwa= (-2.1 * (56 / (odczytVoltP - 6.9)) - 11.3);
  1165.         } else if (odczytVoltP > 4.49303 && odczytVoltP <= 5.87198) {
  1166.             aktualnyStanPaliwa= (-3 * (50 / (odczytVoltP - 9.5)) + 7.6);
  1167.         } else if (odczytVoltP > 5.87197) {
  1168.             aktualnyStanPaliwa= (-5.5 * (21 / (odczytVoltP - 7.5)) - 22);
  1169.         } else {
  1170.             aktualnyStanPaliwa=9;
  1171.         }
  1172.         sumaPaliwa=sumaPaliwa+aktualnyStanPaliwa;
  1173.         ostatniOczdczytCzasu2++;
  1174.         ostatniOczdczytCzasu1=millis();
  1175.     }
  1176.     if(ostatniOczdczytCzasu2==10){
  1177.         sredniePaliwo=sumaPaliwa/10.0;
  1178.         sumaPaliwa=0;
  1179.         ostatniOczdczytCzasu2=0;
  1180.     }
  1181.     }
  1182. }
  1183.  
  1184. void odczytNapiecia()
  1185. {
  1186.     napiecie=0;
  1187.     moc=0;
  1188.     napiecie = ina219.getBusVoltage_V()+(ina219.getShuntVoltage_mV()/100);
  1189.     moc=ina219.getPower_mW();
  1190. }
  1191.  
  1192. void czasPracySilnika()
  1193. {
  1194.     unsigned long aktualnyCzas = millis(); // Pobierz aktualny czas
  1195.  
  1196.     if (digitalRead(PinWtrysk) == HIGH) {
  1197.     if (!sygnalWystepuje) {
  1198.       czasStartowy = aktualnyCzas;
  1199.     }
  1200.     sygnalWystepuje = true;
  1201.   } else {
  1202.     if (sygnalWystepuje) {
  1203.       unsigned long czasTrwaniaAktualny = aktualnyCzas - czasStartowy;
  1204.       if (czasTrwaniaAktualny >= limitCzasu) {
  1205.         czasTrwania += czasTrwaniaAktualny;
  1206.       }
  1207.       sygnalWystepuje = false;
  1208.     }
  1209.   }
  1210.  
  1211.   if (sygnalWystepuje) {
  1212.     czasTrwania = aktualnyCzas - czasStartowy;
  1213.   }
  1214.  
  1215.     //Serial.print("Całkowity czas trwania sygnału: ");
  1216.     //Serial.print(czasTrwania); // Konwersja czasu z milisekund na godziny i wyświetlenie z dwoma miejscami po przecinku
  1217.     //Serial.println(" h");
  1218.    
  1219.     czasPracySilnikaGodziny = (czasTrwania / 1000) / 60 / 60;
  1220.     czasPracySilnikaMinuty = (czasTrwania / 1000/60) % 60;
  1221.    
  1222. }
  1223. //& FUNKCJE ODPOWIADAJĄCE ZA WYŚWIETELNIE POSZCZEGOŁNYCH RZECZY
  1224.  
  1225. void WysTekst(String tekst){
  1226.   tft.setFont();
  1227.   tft.setTextColor(kolorTex, kolorTla);
  1228.   tft.setTextSize(1);
  1229.   tft.setCursor(10, 60);
  1230.   tft.print(tekst);
  1231. }
  1232.  
  1233. void WysPustyEkran()
  1234. {
  1235.   tft.fillScreen(kolorTla);
  1236. }
  1237.  
  1238. void WysCzasPracySilnika()
  1239. {
  1240.     tft.setFont();
  1241.     //tft.drawBitmap(15, 77, SpalanieChwilowe, 24, 32, kolorTex, kolorTla);
  1242.     tft.setTextColor(kolorTex, kolorTla);
  1243.     tft.setTextSize(2);
  1244.     tft.setCursor(10, 60);
  1245.     tft.print("CZAS PRACY:");
  1246.     tft.setTextSize(3);
  1247.     tft.setCursor(60, 80);
  1248.     tft.print(czasPracySilnikaGodziny,0);
  1249.     tft.print(":");
  1250.     tft.print(czasPracySilnikaMinuty,0);
  1251. }
  1252.  
  1253. void WysTemperaturyCieczy()
  1254. {
  1255.     tft.setFont();
  1256.     //odczytTemperaturyCieczy();
  1257.     tft.drawBitmap(15, 77, SymTempCieczy, 24, 32, kolorTex, kolorTla);
  1258.     tft.setTextColor(kolorTex, kolorTla);
  1259.     tft.setTextSize(3);
  1260.     tft.setCursor(60, 80);
  1261.     tft.print(temperaturaCieczy);
  1262. }
  1263.  
  1264. void WysSrPredkosci()
  1265. {
  1266.     tft.setFont();
  1267.     tft.drawBitmap(15, 77, SymbolSrPredkosc, 32, 32, kolorTex, kolorTla);
  1268.     tft.setTextColor(kolorTex, kolorTla);
  1269.     tft.setTextSize(3);
  1270.     tft.setCursor(60, 80);
  1271.     tft.print(SrPredkosc[3]);
  1272.     //tft.print("48.5");
  1273. }
  1274.  
  1275. void WysPredkosci(bool tryb)
  1276. {
  1277.     tft.setFont();
  1278.     if(tryb==false)
  1279.     {
  1280.         tft.drawBitmap(15, 77, WskaznikPredkosci, 32, 32, kolorTex, kolorTla);
  1281.         tft.setTextColor(kolorTex, kolorTla);
  1282.         tft.setTextSize(3);
  1283.         tft.setCursor(60, 80);
  1284.         tft.print(predkosc);
  1285.     }
  1286.     else if(tryb==true)
  1287.     {
  1288.         tft.drawBitmap(15, 77, SymbolSrPredkosc, 32, 32, kolorTex, kolorTla);
  1289.         tft.setTextColor(kolorTex, kolorTla);
  1290.         tft.setTextSize(3);
  1291.         tft.setCursor(60, 80);
  1292.         tft.print(SrPredkosc[3]);
  1293.         //tft.print("48.5");
  1294.     }
  1295. }
  1296.  
  1297. void WysMaxPredkosc()
  1298. {
  1299.     char buffor[10];
  1300.     if (MaxPredkosc < 100)
  1301.     {
  1302.         snprintf(buffor, sizeof(buffor), "0%.0f", MaxPredkosc);
  1303.     }else{
  1304.         snprintf(buffor, sizeof(buffor), "%.0f", MaxPredkosc);
  1305.     }
  1306.  
  1307.     tft.setFont();
  1308.     tft.setTextColor(kolorTex, kolorTla);
  1309.     tft.setTextSize(2);
  1310.     tft.setCursor(10, 60);
  1311.     tft.print("Obroty:"); //tft.print("MAX SPEED:");
  1312.     tft.setTextSize(3);
  1313.     tft.setCursor(10, 80);
  1314.     tft.print(buffor);  //tft.print(MaxPredkosc);
  1315. }
  1316.  
  1317. void WysPrzjechanegoDystansu(bool tryb)
  1318. {
  1319.     tft.setFont();
  1320.     tft.drawBitmap(15, 77, PrzejchanyDystans, 24, 24, kolorTex, kolorTla);
  1321.     tft.setTextColor(kolorTex, kolorTla);
  1322.     tft.setTextSize(3);
  1323.     tft.setCursor(60, 80);
  1324.     if(tryb==true){tft.print(int(PDystansKMSuma));}
  1325.     else if(tryb==false){tft.print(PDystansKM);}
  1326.    
  1327. }
  1328.  
  1329. void WysSpalaniaChwilowego()
  1330. {
  1331.     //spalanie();
  1332.     tft.setFont();
  1333.     char buffor[10];
  1334.     if (spalanieLH < 10)
  1335.     {
  1336.         snprintf(buffor, sizeof(buffor), "0%.2f", spalanieLH);
  1337.     }else{
  1338.         snprintf(buffor, sizeof(buffor), "%.2f", spalanieLH);
  1339.     }
  1340.     tft.drawBitmap(15, 77, SpalanieChwilowe, 24, 32, 0xFC00, kolorTla);
  1341.     tft.setTextColor(kolorTex, kolorTla);
  1342.     tft.setTextSize(3);
  1343.     tft.setCursor(50, 80);
  1344.     tft.print(buffor);
  1345.    
  1346. }
  1347.  
  1348. void WysSpalanoPaliwo(bool tryb)
  1349. {
  1350.     tft.setFont();
  1351.     tft.drawBitmap(15, 77, SymbolSpalonePaliwo, 27, 37, kolorTex, kolorTla);
  1352.     tft.setTextColor(kolorTex, kolorTla);
  1353.     tft.setTextSize(3);
  1354.     tft.setCursor(60, 80);
  1355.     if(tryb==true){tft.print(int(spalonePaliwoSuma));}
  1356.     else if(tryb==false){tft.print(spalonePaliwoDzienne);}
  1357. }
  1358.  
  1359. void WysTemperatury()
  1360. {
  1361.     sensors.requestTemperatures();
  1362.     tft.setFont();
  1363.     tft.setTextSize(2);
  1364.     tft.setTextColor(kolorTex);
  1365.     tft.setTextSize(2);
  1366.     tft.drawBitmap(30, 70, TempIN, 24, 24, ST77XX_RED, kolorTla);
  1367.     tft.drawBitmap(105, 70, TempOUT, 24, 24, ST77XX_GREEN, kolorTla);
  1368.     tft.setTextColor(ST77XX_RED, kolorTla);
  1369.     tft.setCursor(10, 100);
  1370.     tft.println(sensors.getTempC(sensorIN));
  1371.     tft.setTextColor(ST77XX_GREEN, kolorTla);
  1372.     tft.setCursor(85, 100);
  1373.     tft.println(sensors.getTempC(sensorOUT));
  1374. }
  1375.  
  1376. void WysNapiecia()
  1377. {
  1378.    
  1379.     tft.setFont();
  1380.     tft.drawBitmap(15, 77, AKUMULATOR, 32, 24, kolorTex, kolorTla);
  1381.     tft.setTextColor(kolorTex, kolorTla);
  1382.     tft.setTextSize(3);
  1383.     tft.setCursor(55, 80);
  1384.     tft.print(napiecie);
  1385.     tft.setTextSize(1);
  1386.     tft.setCursor(90, 105);
  1387.     tft.print(moc/1000);
  1388.  
  1389. }
  1390.  
  1391. void WysZegareka()
  1392. {
  1393.     DateTime now = rtc.now();
  1394.     tft.setFont();
  1395.     tft.setTextColor(kolorClk, kolorTla);
  1396.     tft.setTextSize(2);
  1397.    
  1398.     sprintf(zegarekBuf,"%02u:%02u ",now.hour(),now.minute());
  1399.     tft.setCursor(10, 5);
  1400.     tft.print(zegarekBuf);
  1401.    
  1402.     sprintf(zegarekBuf,"%02u.%02u ",now.day(),now.month());
  1403.     tft.setCursor(90, 5);
  1404.     tft.print(zegarekBuf);
  1405. }
  1406.  
  1407. void WysSrSpalaniaNa100()
  1408. {
  1409.     //spalanie();
  1410.     tft.setFont();
  1411.     char buffor[10];
  1412.     if (SrSpalanie100km < 10)
  1413.     {
  1414.         snprintf(buffor, sizeof(buffor), "0%.2f", SrSpalanie100km);
  1415.     }else {
  1416.         snprintf(buffor, sizeof(buffor), "%.2f", SrSpalanie100km);
  1417.     }
  1418.     tft.drawBitmap(15, 77, SpalanieNaSto, 24, 32, 0xFC00, kolorTla);
  1419.     tft.setTextColor(kolorTex, kolorTla);
  1420.     tft.setTextSize(3);
  1421.     tft.setCursor(50, 80);
  1422.     tft.print(buffor);
  1423.    
  1424. }
  1425.  
  1426. void WysPobieranieDancyh()
  1427. {
  1428.     tft.drawBitmap(45, 55, PonbieranieDanychL, 32, 64, kolorTex, kolorTla);
  1429.     tft.drawBitmap(77, 55, PonbieranieDanychR, 32, 64, kolorTex, kolorTla);
  1430. }
  1431.  
  1432. void WysPakiet2()               //% wyswietlanie dwoch przebiegow dzienny i ogolny
  1433. {  
  1434.     tft.setFont();
  1435.     tft.drawBitmap(3, 120, PrzejchanyDystans, 24, 24, 0x001F, kolorTla);
  1436.     tft.drawBitmap(4, 80, PrzejchanyDystans, 24, 24, 0x001F, kolorTla);
  1437.     tft.setTextColor(kolorTex, kolorTla);
  1438.     tft.setTextSize(2);
  1439.     tft.setCursor(50, 60);
  1440.     tft.print(przebieg);
  1441.     tft.setCursor(50, 95);
  1442.     tft.print(PDystansKM);
  1443. }
  1444.  
  1445. void WysPakiet1()               //% wyświetlenie dwóch danych naraz SPALANIE I PREDKOSC
  1446. {
  1447.     tft.setFont();
  1448.     tft.drawBitmap(3, 120, SpalanieChwilowe, 24, 32, kolorTex, kolorTla);
  1449.     tft.drawBitmap(4, 80, WskaznikPredkosci, 32, 32, kolorTex, kolorTla);
  1450.     //tft.drawBitmap(1, 90, PrzejchanyDystans, 24, 24, kolorTex, kolorTla);
  1451.     //tft.drawBitmap(90, 90, SymTempCieczy, 24, 32, kolorTex, kolorTla);
  1452.     tft.setTextColor(kolorTex, kolorTla);
  1453.     tft.setTextSize(2);
  1454.     tft.setCursor(50, 60);
  1455.     tft.print(spalanieLH);
  1456.     tft.setCursor(50, 95);
  1457.     tft.print(predkosc);
  1458. }
  1459.  
  1460. void WysEkranStart()
  1461. {  
  1462.     char buffor1[10];
  1463.     if (napiecie < 10)
  1464.     {
  1465.         snprintf(buffor1, sizeof(buffor1), "0%.1f", napiecie);
  1466.     }else{
  1467.         snprintf(buffor1, sizeof(buffor1), "%.1f", napiecie);
  1468.     }
  1469.     char buffor2[10];
  1470.     if (temperaturaCieczy < 100)
  1471.     {
  1472.         snprintf(buffor2, sizeof(buffor2), "0%.0f", temperaturaCieczy);
  1473.     }else{
  1474.         snprintf(buffor2, sizeof(buffor2), "%.0f", temperaturaCieczy);
  1475.     }
  1476.     char buffor3[10];
  1477.     if (spalanieLH < 10)
  1478.     {
  1479.         snprintf(buffor3, sizeof(buffor3), "0%.2f", spalanieLH);
  1480.     }else{
  1481.         snprintf(buffor3, sizeof(buffor3), "%.2f", spalanieLH);
  1482.     }
  1483.     char buffor4[10];
  1484.     if (sredniePaliwo < 10)
  1485.     {
  1486.         snprintf(buffor4, sizeof(buffor4), "0%.2f", sredniePaliwo);
  1487.     }else{
  1488.         snprintf(buffor4, sizeof(buffor4), "%.2f", sredniePaliwo);
  1489.     }
  1490.     //tft.setFont(&FreeSans12pt7b);
  1491.     tft.setTextColor(kolorTex, kolorTla);
  1492.     tft.setTextSize(2);
  1493.    
  1494.     tft.setCursor(68, 63);
  1495.     tft.drawBitmap(50, 63, Plomien, 16, 16, 0xE800, kolorTla);
  1496.     tft.println(buffor3);
  1497.  
  1498.     tft.setCursor(68, 85);
  1499.     tft.drawBitmap(50, 85, Paliwo, 16, 16, 0xDB60, kolorTla);
  1500.     tft.println(buffor4);
  1501.    
  1502.     tft.setTextColor(kolorTex, 0xC800);
  1503.     tft.setCursor(23, 102);
  1504.     //tft.fillRect(0, 102, 160, 26, 0xC800);
  1505.     //tft.drawBitmap(5, 102, Akumulator, 16, 16, kolorTex,  0xC800);
  1506.     tft.print(buffor1);
  1507.    
  1508.     //tft.drawBitmap(70, 102, Akumulator, 16, 16, kolorTex,  0xC800);
  1509.     tft.setCursor(88, 102);
  1510.     tft.print(buffor2);
  1511.  
  1512. }
  1513.  
  1514. void uspienie()
  1515. {
  1516.     unsigned long czasPrzed;
  1517.     unsigned long czas;
  1518.     if(zaplon)
  1519.     {
  1520.         czas = millis();
  1521.         if(czas-czasPrzed>600000 && temperaturaCieczy<40.00)
  1522.         {
  1523.             trzaReset=true;
  1524.         }
  1525.     }
  1526.    
  1527.     if(zaplon)
  1528.     {
  1529.         czasPrzed = millis();
  1530.         if(trzaReset==true)
  1531.         {
  1532.             czas=0;
  1533.             ESP.restart();
  1534.             trzaReset=false;
  1535.         }
  1536.     }
  1537. }
  1538.  
  1539. void pracaAuta()
  1540. {
  1541.    
  1542.     if(zaplon){LCD_LED=true;}
  1543.     if(!zaplon){LCD_LED=false;}
  1544.  
  1545.     if(zaplon){
  1546.         popStanSamochodu=false;
  1547.     }else{
  1548.         popStanSamochodu=true;
  1549.         tylkoRazSA=true;
  1550.     }
  1551.  
  1552.     if(zaplon && tylkoRazSA){
  1553.         DiodyKontrolkiStart();
  1554.         tylkoRazSA=false;
  1555.     }
  1556.    
  1557. }
  1558.  
  1559. void obslugaKolejWys(int ekran, bool tryb){
  1560.     if(tryb==2){
  1561.         if(ekranyTr2[ekran]=="Woltomierz"){
  1562.             //Serial.println("Woltomierz");
  1563.             WysNapiecia();
  1564.         }else if(ekranyTr2[ekran]=="TempOleju"){
  1565.             //Serial.println("TempOleju");
  1566.             WysTekst(ekranyTr2[ekran]);
  1567.         }else if(ekranyTr2[ekran]=="SrTempOleju"){
  1568.             //Serial.println("PrzejechanyDystans");
  1569.             WysTekst(ekranyTr2[ekran]);
  1570.         }else if(ekranyTr2[ekran]=="TempZewnetrzna"){
  1571.             //Serial.println("TempZewnetrzna");
  1572.             //WysTekst(ekranyTr2[ekran]);
  1573.             WysTemperatury();
  1574.         }else if(ekranyTr2[ekran]=="TempWewnetrzna"){
  1575.             //Serial.println("TempWewnetrzna");
  1576.             WysTemperatury();
  1577.         }else if(ekranyTr2[ekran]=="EkranStartowy"){
  1578.             //Serial.println("PrzejechanyDystans");
  1579.             WysEkranStart();
  1580.         }else if(ekranyTr2[ekran]=="PrzejechanyDystans"){
  1581.             //Serial.println("PrzejechanyDystans");
  1582.             WysPrzjechanegoDystansu(1);
  1583.         }else if(ekranyTr2[ekran]=="DziennyPrzejechanyDystans"){
  1584.             //Serial.println("MaxPredkosc");
  1585.             WysPrzjechanegoDystansu(2);
  1586.         }else if(ekranyTr2[ekran]=="SpalanieChwilowe"){
  1587.             //Serial.println("SpalanieChwilowe");
  1588.             WysSpalaniaChwilowego();
  1589.         }else if(ekranyTr2[ekran]=="SrSpalanie"){
  1590.             //Serial.println("SrSpalanie");
  1591.             WysSrSpalaniaNa100();
  1592.         }else if(ekranyTr2[ekran]=="SumaSpalania"){
  1593.             //Serial.println("SumaSpalania");
  1594.             WysSpalanoPaliwo(1);
  1595.         }else if(ekranyTr2[ekran]=="SrTempSilnika"){
  1596.             //Serial.println("DzienneSumaSpalania");
  1597.             WysTemperaturyCieczy();
  1598.         }else if(ekranyTr2[ekran]=="TempSilnika"){
  1599.             //Serial.println("TempSilnika");
  1600.             WysTemperaturyCieczy();
  1601.         }else if(ekranyTr2[ekran]=="DziennaSumaSpalania"){
  1602.             //Serial.println("SrTempSilnika");
  1603.             WysSpalanoPaliwo(1);
  1604.         }else if(ekranyTr2[ekran]=="Predkosc"){
  1605.             //Serial.println("Predkosc");
  1606.             WysPredkosci(1);
  1607.         }else if(ekranyTr2[ekran]=="SrPredkosc"){
  1608.             //Serial.println("SrPredkosc");
  1609.             WysPredkosci(0);
  1610.         }else if(ekranyTr2[ekran]=="MaxPredkosc"){
  1611.             //Serial.println("MaxPredkosc");
  1612.             WysMaxPredkosc();
  1613.         }else if(ekranyTr2[ekran]=="CzasPracySilnika"){
  1614.             //Serial.println("MaxPredkosc");
  1615.             WysCzasPracySilnika();
  1616.         }else if(ekranyTr2[ekran]=="DziennyCzasPracySilnika"){
  1617.             //Serial.println("MaxPredkosc");
  1618.             WysCzasPracySilnika();
  1619.         }else if(ekranyTr2[ekran]=="PustyEkran"){
  1620.             //Serial.println("PustyEkran");
  1621.             aktEkran=1;
  1622.             licznikW=1;
  1623.         }else{
  1624.             Serial.println("Nic nie pasuje w trybie 2");
  1625.         }
  1626.     }else if(tryb==1){
  1627.         if(ekranyTr1[ekran]=="Woltomierz"){
  1628.             //Serial.println("Woltomierz");
  1629.             WysNapiecia();
  1630.         }else if(ekranyTr1[ekran]=="TempOleju"){
  1631.             //Serial.println("TempOleju");
  1632.             WysTekst(ekranyTr1[ekran]);
  1633.         }else if(ekranyTr1[ekran]=="SrTempOleju"){
  1634.             //Serial.println("PrzejechanyDystans");
  1635.             WysTekst(ekranyTr1[ekran]);
  1636.         }else if(ekranyTr1[ekran]=="TempZewnetrzna"){
  1637.             //Serial.println("TempZewnetrzna");
  1638.             //WysTekst(ekranyTr2[ekran]);
  1639.             WysTemperatury();
  1640.         }else if(ekranyTr1[ekran]=="TempWewnetrzna"){
  1641.             //Serial.println("TempWewnetrzna");
  1642.             WysTemperatury();
  1643.         }else if(ekranyTr1[ekran]=="EkranStartowy"){
  1644.             //Serial.println("PrzejechanyDystans");
  1645.             WysEkranStart();
  1646.         }else if(ekranyTr1[ekran]=="PrzejechanyDystans"){
  1647.             //Serial.println("PrzejechanyDystans");
  1648.             WysPrzjechanegoDystansu(1);
  1649.         }else if(ekranyTr1[ekran]=="DziennyPrzejechanyDystans"){
  1650.             //Serial.println("MaxPredkosc");
  1651.             WysPrzjechanegoDystansu(2);
  1652.         }else if(ekranyTr1[ekran]=="SpalanieChwilowe"){
  1653.             //Serial.println("SpalanieChwilowe");
  1654.             WysSpalaniaChwilowego();
  1655.         }else if(ekranyTr1[ekran]=="SrSpalanie"){
  1656.             //Serial.println("SrSpalanie");
  1657.             WysSrSpalaniaNa100();
  1658.         }else if(ekranyTr1[ekran]=="SumaSpalania"){
  1659.             //Serial.println("SumaSpalania");
  1660.             WysSpalanoPaliwo(1);
  1661.         }else if(ekranyTr1[ekran]=="SrTempSilnika"){
  1662.             //Serial.println("DzienneSumaSpalania");
  1663.             WysTemperaturyCieczy();
  1664.         }else if(ekranyTr1[ekran]=="TempSilnika"){
  1665.             //Serial.println("TempSilnika");
  1666.             WysTemperaturyCieczy();
  1667.         }else if(ekranyTr1[ekran]=="DziennaSumaSpalania"){
  1668.             //Serial.println("SrTempSilnika");
  1669.             WysSpalanoPaliwo(1);
  1670.         }else if(ekranyTr1[ekran]=="Predkosc"){
  1671.             //Serial.println("Predkosc");
  1672.             WysPredkosci(1);
  1673.         }else if(ekranyTr1[ekran]=="SrPredkosc"){
  1674.             //Serial.println("SrPredkosc");
  1675.             WysPredkosci(0);
  1676.         }else if(ekranyTr1[ekran]=="MaxPredkosc"){
  1677.             //Serial.println("MaxPredkosc");
  1678.             WysMaxPredkosc();
  1679.         }else if(ekranyTr1[ekran]=="CzasPracySilnika"){
  1680.             //Serial.println("MaxPredkosc");
  1681.             WysCzasPracySilnika();
  1682.         }else if(ekranyTr1[ekran]=="DziennyCzasPracySilnika"){
  1683.             //Serial.println("MaxPredkosc");
  1684.             WysCzasPracySilnika();
  1685.         }else if(ekranyTr1[ekran]=="PustyEkran"){
  1686.             //Serial.println("PustyEkran");
  1687.             aktEkran=1;
  1688.             licznikW=1;
  1689.             //WysPustyEkran();
  1690.         }else{
  1691.             Serial.println("Nic nie pasuje w trybie 1");
  1692.         }
  1693.     }
  1694. }
  1695.  
  1696. void interfjs(){
  1697.  
  1698.     if(MANETKAreset)
  1699.     {
  1700.         if(diagnosta){Serial.println("RESET");}
  1701.         MANETKAreset=false;
  1702.     }
  1703.    
  1704.     if(MANETKAfunckja)
  1705.     {
  1706.         licznikW++;
  1707.         wycz=false;
  1708.         MANETKAfunckja=false;
  1709.     }
  1710.  
  1711.     if(MANETKAtryb)
  1712.     {
  1713.         tryb=2;
  1714.     }else{
  1715.         tryb=1;
  1716.        
  1717.     }
  1718.  
  1719.     switch (licznikW){
  1720.         case 1:
  1721.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1722.             obslugaKolejWys(1,tryb);
  1723.         break;
  1724.         case 2:
  1725.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1726.             obslugaKolejWys(2,tryb);
  1727.         break;
  1728.         case 3:
  1729.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1730.             obslugaKolejWys(3,tryb);
  1731.         break;
  1732.         case 4:
  1733.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1734.             obslugaKolejWys(4,tryb);
  1735.         break;
  1736.         case 5:
  1737.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1738.             obslugaKolejWys(5,tryb);
  1739.         break;
  1740.         case 6:
  1741.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1742.             obslugaKolejWys(6,tryb);
  1743.         break;
  1744.         case 7:
  1745.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1746.             obslugaKolejWys(7,tryb);
  1747.         break;
  1748.         case 8:
  1749.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1750.             obslugaKolejWys(8,tryb);
  1751.         break;
  1752.         case 9:
  1753.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1754.             obslugaKolejWys(9,tryb);
  1755.         break;
  1756.         case 10:
  1757.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1758.             obslugaKolejWys(10,tryb);
  1759.         break;
  1760.         case 11:
  1761.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1762.             obslugaKolejWys(11,tryb);
  1763.         break;
  1764.         case 12:
  1765.             if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1766.             obslugaKolejWys(12,tryb);
  1767.         break;
  1768.         default:
  1769.             aktEkran=1;
  1770.         break;
  1771.   }
  1772.  
  1773.     /*
  1774.     switch (licznikW)
  1775.     {
  1776.         case 1:
  1777.             if(tryb==2)
  1778.             {
  1779.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1780.                 WysEkranStart();
  1781.             }
  1782.             if(tryb==1)
  1783.             {  
  1784.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1785.                 WysNapiecia();
  1786.             }        
  1787.         break;  
  1788.         case 2:
  1789.             //if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1790.             if(tryb==2)
  1791.             {
  1792.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1793.                 WysTemperatury();
  1794.             }
  1795.             if(tryb==1)
  1796.             {
  1797.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1798.                 WysTemperaturyCieczy();
  1799.             }        
  1800.         break;
  1801.         case 3:
  1802.             //if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1803.             if(tryb==2)
  1804.             {
  1805.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1806.                 WysSrSpalaniaNa100();
  1807.                 if(MANETKAreset=true)
  1808.                 {SrSpalanie100km=0;tft.fillScreen(kolorTla);wycz=true;MANETKAreset=false;}
  1809.             }
  1810.             if(tryb==1)
  1811.             {
  1812.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1813.                 WysSpalaniaChwilowego();
  1814.             }
  1815.         break;
  1816.         case 4:
  1817.             //if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1818.             if(tryb==2)
  1819.             {
  1820.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1821.                 WysPrzjechanegoDystansu(true);
  1822.                 if(MANETKAreset=true)
  1823.                 {PDystansKMSuma=0;tft.fillScreen(kolorTla);wycz=false;MANETKAreset=false;}
  1824.             }
  1825.             if(tryb==1)
  1826.             {
  1827.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1828.                 WysPrzjechanegoDystansu(false);
  1829.                
  1830.             }
  1831.         break;
  1832.         case 5:
  1833.             //if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1834.             if(MANETKAtryb)
  1835.             {
  1836.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1837.                 WysPredkosci(true);
  1838.                 if(MANETKAreset=true)
  1839.                 {SrPredkosc[0]=0;SrPredkosc[1]=0; SrPredkosc[2]=0;SrPredkosc[3]=0;tft.fillScreen(kolorTla);wycz=false;MANETKAreset=false;}
  1840.             }else{
  1841.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1842.                 WysPredkosci(false);
  1843.             }
  1844.         break;
  1845.         case 6:
  1846.             if(tryb==2)
  1847.             {
  1848.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1849.                 WysMaxPredkosc();
  1850.             }
  1851.             if(tryb==1)
  1852.             {
  1853.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1854.                 WysMaxPredkosc();
  1855.             }    
  1856.         break;
  1857.         case 7:
  1858.             if(tryb==2)
  1859.             {
  1860.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1861.                 WysPakiet1();
  1862.             }
  1863.             if(tryb==1)
  1864.             {
  1865.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1866.                 WysPakiet1();
  1867.             }
  1868.                    
  1869.         break;
  1870.         case 8:
  1871.             if(tryb==2)
  1872.             {
  1873.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1874.                 WysCzasPracySilnika();
  1875.             }
  1876.             if(tryb==1)
  1877.             {
  1878.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1879.                 WysCzasPracySilnika();
  1880.             }
  1881.            
  1882.         break;
  1883.         case 9:
  1884.             //if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1885.             if(MANETKAtryb)
  1886.             {
  1887.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1888.                 WysSpalanoPaliwo(true);
  1889.             }
  1890.             else{
  1891.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1892.                 WysSpalanoPaliwo(false);
  1893.                 if(MANETKAreset=true)
  1894.                 {spalonePaliwoSuma;tft.fillScreen(kolorTla);wycz=false;MANETKAreset=false;}
  1895.             }
  1896.         break;
  1897.         case 10:
  1898.             if(tryb==2)
  1899.             {
  1900.                 if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1901.                 WysPakiet2();
  1902.             }
  1903.             if(tryb==1)
  1904.             {
  1905.                 if(wycz==false){tft.fillScreen(kolorTla);wycz=true;}
  1906.                 WysPakiet2();
  1907.             }
  1908.             //if(wycz==true){tft.fillScreen(kolorTla);wycz=false;}
  1909.            
  1910.         break;
  1911.         default:
  1912.         licznikW=0;
  1913.        
  1914.         break;
  1915.     }
  1916.    
  1917.     */
  1918. }
  1919.  
  1920. unsigned long currentMillis;
  1921. unsigned long previousMillis1 = 0; // Zmienna do śledzenia czasu dla Kontrolki 1
  1922. unsigned long previousMillis2 = 0; // Zmienna do śledzenia czasu dla Kontrolki 2, 3 i 4
  1923. unsigned long previousMillis3 = 0; // Zmienna do śledzenia czasu dla Kontrolki 5
  1924.  
  1925. const long interval = 500; // Interwał czasowy w ms dla Kontrolki 1
  1926. const long interval2 = 500; // Interwał czasowy w ms dla Kontrolki 2, 3 i 4
  1927. const long interval3 = 500; // Interwał czasowy w ms dla Kontrolki 5
  1928.  
  1929. void kontrolki()
  1930. {
  1931.     currentMillis = millis(); // Aktualny czas w ms
  1932.  
  1933.     //& Kontrolka 1 (niewłączone światła)
  1934.     if (zaplon)
  1935.     {
  1936.         if (swiatla)
  1937.         {
  1938.             leds[3] = CRGB::Black;
  1939.             FastLED.show();
  1940.         }
  1941.         else
  1942.         {
  1943.             if (currentMillis - previousMillis1 >= interval)
  1944.             {
  1945.                 previousMillis1 = currentMillis;
  1946.                 leds[3].setColorCode(0x000005);
  1947.                 FastLED.show();
  1948.             }
  1949.             else
  1950.             {
  1951.                 leds[3] = CRGB::Black;
  1952.                 FastLED.show();
  1953.             }
  1954.         }
  1955.     }else{
  1956.         leds[0] = CRGB::Black;
  1957.         leds[1] = CRGB::Black;
  1958.         leds[2] = CRGB::Black;
  1959.         FastLED.show();
  1960.     }
  1961.  
  1962.     //& Kontrolka 2, 3 i 4 (niebezpieczna prędkość)
  1963.     if (predkosc > 110)
  1964.     {
  1965.         if (currentMillis - previousMillis2 >= interval2)
  1966.         {
  1967.             previousMillis2 = currentMillis;
  1968.             leds[4].setColorCode(0x100000);
  1969.             leds[5].setColorCode(0x100000);
  1970.             leds[6].setColorCode(0x100000);
  1971.             FastLED.show();
  1972.         }else{
  1973.             leds[4] = CRGB::Black;
  1974.             leds[5] = CRGB::Black;
  1975.             leds[6] = CRGB::Black;
  1976.             FastLED.show();
  1977.         }
  1978.     }else{
  1979.         leds[4] = CRGB::Black;
  1980.         leds[5] = CRGB::Black;
  1981.         leds[6] = CRGB::Black;
  1982.         FastLED.show();
  1983.     }
  1984.  
  1985.     //& Kontrolka 5 (za wysoka temperatura cieczy)
  1986.     if (zaplon)
  1987.     {
  1988.         if (temperaturaCieczy > 93)
  1989.         {
  1990.             if (currentMillis - previousMillis3 >= interval3)
  1991.             {
  1992.                 previousMillis3 = currentMillis;
  1993.                 leds[7].setColorCode(0x050000);
  1994.                 FastLED.show();
  1995.             }else{
  1996.                 leds[7] = CRGB::Black;
  1997.                 FastLED.show();
  1998.             }
  1999.         }else{
  2000.             leds[7] = CRGB::Black;
  2001.             FastLED.show();
  2002.         }
  2003.     }
  2004. }
  2005.  
  2006.  
  2007. void Task1code( void * pvParameters );
  2008.  
  2009. void setup ()
  2010. {
  2011.     Serial.begin(115200);
  2012.     xTaskCreatePinnedToCore(Task1code,"wTle",10000,NULL,0,&wTle,0);
  2013.    
  2014.     //attachInterrupt(PinObroty, mierzenie, RISING);
  2015.     FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  2016.     FastLED.setBrightness(  BRIGHTNESS );
  2017.     //currentPalette = RainbowColors_p;
  2018.     //currentBlending = LINEARBLEND;
  2019.    
  2020.  
  2021.     //FastLED.setBrightness(BRIGHTNESS);
  2022.     //ina219.begin();
  2023.     //SD.begin(kartaSD);
  2024.     tft.initR(INITR_BLACKTAB);
  2025.     tft.setRotation(45);
  2026.     tft.setTextWrap(false);
  2027.     //rtc.begin();
  2028.     //pcf.begin(0x20, &Wire);
  2029.    
  2030.    
  2031.     //rtc.adjust(DateTime(2024, 4, 28, 15, 22, 30));
  2032.  
  2033.     pinMode(PinHalla, INPUT);
  2034.     pinMode(PinWtrysk, INPUT);
  2035.     pinMode(PinObroty, INPUT);
  2036.    
  2037.     //przyciskFunkcji.begin();
  2038.     //przyciskTrybu.begin();
  2039.     //przyciskResetu.begin();
  2040.     //przyciskWtrysk.begin();
  2041.     //przyciskZaplon.begin();
  2042.        
  2043.     /*pcf.pinMode(0, INPUT);
  2044.     pcf.pinMode(1, INPUT);
  2045.     pcf.pinMode(2, INPUT);
  2046.     pcf.pinMode(3, INPUT);
  2047.     pcf.pinMode(4, OUTPUT);
  2048.     pcf.pinMode(5, OUTPUT);
  2049.     pcf.pinMode(6, OUTPUT);
  2050.     pcf.pinMode(7, OUTPUT);
  2051.     pcf.pinMode(8, INPUT_PULLDOWN);
  2052.     pcf.pinMode(9, INPUT_PULLDOWN);
  2053.     pcf.pinMode(10, INPUT_PULLDOWN);
  2054.     pcf.pinMode(11, OUTPUT);
  2055.     pcf.pinMode(12, INPUT);
  2056.     pcf.pinMode(13, INPUT);
  2057.     pcf.pinMode(14, INPUT);
  2058.     pcf.pinMode(15, OUTPUT);
  2059.  
  2060.     tft.fillScreen(kolorTla);
  2061.     ESP_RESET=false;
  2062.     LCD_LED=true;
  2063.     */
  2064.    
  2065.  
  2066.     //obslugaExpendera();
  2067.     podswietlenie();
  2068.     DiodyKontrolkiStart();
  2069.     delay(10);
  2070.     WysPobieranieDancyh();  
  2071.     delay(10);
  2072.     //wyborNajnowszegoPliku();
  2073.     //pobranieDanych();
  2074.     //zapisPobranychDanych();
  2075.     //zapisNaKarcie();
  2076.     //obsluzConfig();
  2077.     delay(10);
  2078.     tft.fillScreen(kolorTla);
  2079.  
  2080.     tft.cp437(true);
  2081.    
  2082.    
  2083.     if (isnan(SrSpalanie1km)) {
  2084.         SrSpalanie1km = 7.56;
  2085.     }
  2086.  
  2087.     if (isnan(SrSpalanie100km)) {
  2088.         SrSpalanie100km = SrSpalanie1km;
  2089.     }
  2090.  
  2091.     //czasPracySilnikaMinutySuma=czasPracySilnikaSuma*60;      //% przeliczenie przepracowanego czasu silnika na minuty
  2092.    
  2093. }
  2094.  
  2095. unsigned long aktualnyCzas = 0;
  2096. unsigned long zapamietanyCzas = 0;
  2097. unsigned long roznicaCzasu = 0;
  2098.  
  2099. void loop()
  2100. {
  2101.    
  2102.    
  2103.     pracaAuta();
  2104.     kontrolki();
  2105.     uspienie();
  2106.     WysZegareka();
  2107.     podswietlenie();
  2108.     interfjs();
  2109.  
  2110.     spalanie();
  2111.     najwyzszeSpalanie();
  2112.     odczytTemperaturyCieczy();
  2113.     odczytIlosciPaliwa();
  2114.     czasPracySilnika();
  2115.     obslugaExpendera();
  2116.     odczytNapiecia();
  2117.    
  2118.    
  2119.    
  2120.     inicjalizacjaKonfiguracji();
  2121.     //obliczanieObroty();
  2122.    
  2123.    if(roznicaCzasu>=60000){
  2124.     nadpisywanieDanychDoZapisu();
  2125.     zapisNaKarcie();
  2126.     zapamietanyCzas=millis();
  2127.    }
  2128.  
  2129.     //temp WysTemperatury();
  2130.     //temp WysNapiecia();
  2131.    
  2132.    
  2133.     //aktualnyCzas = millis();
  2134.     //roznicaCzasu = aktualnyCzas - zapamietanyCzas;
  2135.     /*
  2136.     if(roznicaCzasu<=5000)
  2137.     {
  2138.         if(wycz==false)
  2139.         {
  2140.             tft.fillScreen(kolorTla);
  2141.             wycz=true;
  2142.         }
  2143.         WysPredkosci();
  2144.     }else if(roznicaCzasu<=10000 && roznicaCzasu>=5000)
  2145.     {
  2146.         if(wycz==true)
  2147.         {
  2148.             tft.fillScreen(kolorTla);
  2149.             wycz=false;
  2150.         }
  2151.         WysNapiecia();
  2152.     }else if(roznicaCzasu<=15000 && roznicaCzasu>=10000)
  2153.     {
  2154.         if(wycz==false)
  2155.         {
  2156.             tft.fillScreen(kolorTla);
  2157.             wycz=true;
  2158.         }
  2159.         WysTemperatury();
  2160.     }else if(roznicaCzasu<=20000 && roznicaCzasu>=15000)  
  2161.     {
  2162.         if(wycz==true)
  2163.         {
  2164.             tft.fillScreen(kolorTla);
  2165.             wycz=false;
  2166.         }
  2167.         WysSpalaniaChwilowego();
  2168.     }else if(roznicaCzasu<=25000 && roznicaCzasu>=20000)
  2169.     {
  2170.         if(wycz==false)
  2171.         {
  2172.             tft.fillScreen(kolorTla);
  2173.             wycz=true;
  2174.         }
  2175.         WysPrzjechanegoDystansu(true);
  2176.     }else if(roznicaCzasu<=30000 && roznicaCzasu>=25000)
  2177.     {
  2178.         if(wycz==true)
  2179.         {
  2180.             tft.fillScreen(kolorTla);
  2181.             wycz=false;
  2182.         }
  2183.         WysSrPredkosci();
  2184.     }else if(roznicaCzasu>30000)
  2185.     {
  2186.         zapamietanyCzas=millis();
  2187.     }
  2188.     */
  2189. }
  2190.  
  2191. void Task1code( void * pvParameters )   //*Pętla dla zadań wykonywanych na rdzeniu 0. Z definicji wszystkie operaje są wykonywane na rdzeniu 1
  2192. {
  2193.     //wykona się tylko raz
  2194.     attachInterrupt(digitalPinToInterrupt(PinWtrysk), isr_otwarcieWtrysku, CHANGE);
  2195.     for(;;)
  2196.     {
  2197.        
  2198.         predkosciomierz();
  2199.         PrzejechanyDystans();
  2200.         MaxOsiagnietaPredkosc();
  2201.        
  2202.         delay(0);
  2203.     }
  2204. }  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement