Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ------------------------------------------------------------------------------------------------------------------- //
- // Simple ESP8266 CLOCK by TOMASZ MAJCHER (TRANSLINE GROUP POLSKA) //
- // e-mail : [email protected] //
- // licence : DonationWare --> paypal.me/TomaszMajcher //
- // blog : https://esp32dev.blogspot.com/ //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- // v1.0 (30.05.2021) - update : FINAL FREE VERSION
- // v0.9 (30.05.2021) - update : dodano formatowanie LongDate do długości 20 znaków
- // v0.8 (30.05.2021) - update : switch ShortData / LongData
- // v0.7 (30.05.2021) - update : formatowanie dat LONG / SHORT
- // v0.6 (29.05.2021) - update : DNI TYGODNIA / NAZWY MIESIĘCY
- // v0.5 (28.05.2021) - update : aktualizacja daty (Task0) co 1 godzinę
- // v0.4 (28.05.2021) - update : aktualizacja czasu (Task1) co 1 minutę
- // v0.3 (27.05.2021) - FULL BETA :-)
- // v0.2 (26.05.2021) - budowa klasy LCD
- // v0.1 (26.05.2021) - budowa projektu
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- // GND <---> GND
- // VCC <---> Vin
- // SDA <---> D2 (NodeMCU) GPIO 4
- // SCL <---> D1 (NodeMCU) GPIO 5
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- extern "C" char* sbrk(int incr);
- #include "LiquidCrystal_I2C.h" // https://circuits4you.com/wp-content/uploads/2019/03/I2C-LCD-ESP8266-Library.zip
- #include <ESP8266WiFi.h> // biblioteka Wi-Fi
- #include <NTPClient.h> // NTP klient (czas)
- #include <WiFiUdp.h> // UDP dla NTP (czas)
- #include <TaskScheduler.h> // scheluder
- #include <TimeLib.h>
- #include <Arduino.h>
- LiquidCrystal_I2C lcd(0x27,20,4);
- const char *ssid = "xxxxxxxxxxx"; // network wifi ssid
- const char *password = "xxxxxxxxxxx"; // network wifi password
- #define SERIAL true
- #define SerialSpeed 57600
- #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- P R O T O T Y P Y --------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task0Callback(); // funkcja dla task_0
- void Task1Callback(); // funkcja dla task_1
- void Task2Callback(); // funkcja dla task_2
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Z A D A N I A S C H E L U D E R ' A ------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- Task task_0( 3600000, TASK_FOREVER, &Task0Callback); // task_0 - co 1 godzinę
- Task task_1( 60000, TASK_FOREVER, &Task1Callback); // task_2 - co 1 minutę
- Task task_2( 1000, TASK_FOREVER, &Task2Callback); // task_3 - co 1 sekundę
- Scheduler runner;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA CZAS *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- struct ZEGAR
- {
- int Godzina = 0;
- int Minuta = 0;
- int Sekunda = 0;
- String SformatowanaData = "NULL";
- String ShortData = "NULL";
- String LongData = "NULL";
- int DzienTygodnia = 0;
- int DzienMiesiaca = 0;
- int Miesiac = 0;
- int Rok = 0;
- }
- czas;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA DZIEN *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- const char Dzien_0 [] = "Niedziela";
- const char Dzien_1 [] = "Poniedzialek";
- const char Dzien_2 [] = "Wtorek";
- const char Dzien_3 [] = "Sroda";
- const char Dzien_4 [] = "Czwartek";
- const char Dzien_5 [] = "Piatek";
- const char Dzien_6 [] = "Sobota";
- const char * const DZIEN[] = { Dzien_0, Dzien_1, Dzien_2, Dzien_3, Dzien_4, Dzien_5, Dzien_6 }; // dni tygodnia [0..6]
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA MIESIAC *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- const char Miesiac_0 [] = "NULL";
- const char Miesiac_1 [] = "Styczen";
- const char Miesiac_2 [] = "Luty";
- const char Miesiac_3 [] = "Marzec";
- const char Miesiac_4 [] = "Kwiecien";
- const char Miesiac_5 [] = "Maj";
- const char Miesiac_6 [] = "Czerwiec";
- const char Miesiac_7 [] = "Lipiec";
- const char Miesiac_8 [] = "Sierpien";
- const char Miesiac_9 [] = "Wrzesien";
- const char Miesiac_10 [] = "Pazdziernik";
- const char Miesiac_11 [] = "Listopad";
- const char Miesiac_12 [] = "Grudzien";
- const char * const MIESIAC[] = { Miesiac_0, Miesiac_1, Miesiac_2, Miesiac_3, Miesiac_4, Miesiac_5, Miesiac_6,
- Miesiac_7, Miesiac_8, Miesiac_9, Miesiac_10, Miesiac_11, Miesiac_12 };
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** KLASA LCD *** by Tomasz Majcher (TLG) v1.00 Lite *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- class LCD
- {
- private :
- // --- ZMIENNE PRYWATNE -------------------------------------------------------------------------------------- //
- byte LGc[8] = { B00111, B01111, B11111, B11111, B11111, B11111, B11111, B11111 }; // lewy górny ----- //
- byte LDc[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B01111, B00111 }; // lewy dolny ----- //
- byte PGc[8] = { B11100, B11110, B11111, B11111, B11111, B11111, B11111, B11111 }; // prawy górny ---- //
- byte PDc[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11110, B11100 }; // prawy dolny ---- //
- byte UDb[8] = { B11111, B11111, B11111, B11111, B11111, B00000, B00000, B00000 }; // górny 1/2 ------ //
- byte DDb[8] = { B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111 }; // dolny 1/2 ------ //
- byte blk[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }; // blok pełny ----- //
- byte emp[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 }; // blok pusty ----- //
- // --- ZMIENNE PRYWATNE -------------------------------------------------------------------------------------- //
- LiquidCrystal_I2C & wyswietlacz;
- void Kropka(int x, int y);
- void Dwukropek(int x, int y);
- void Liczba0(int x, int y);
- void Liczba1(int x, int y);
- void Liczba2(int x, int y);
- void Liczba3(int x, int y);
- void Liczba4(int x, int y);
- void Liczba5(int x, int y);
- void Liczba6(int x, int y);
- void Liczba7(int x, int y);
- void Liczba8(int x, int y);
- void Liczba9(int x, int y);
- void WyswietlCyfre(int x, int y, int numer);
- void WyczyscLinie(int y);
- // ---------------------------------------------------------------------------------------- //
- // --- METODY PRYWATNE -------------------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- public :
- // ---------------------------------------------------------------------------------------- //
- // --- KONSTRUKTOR KLACY LCD -------------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- LCD (LiquidCrystal_I2C &adres_lc) : wyswietlacz(adres_lc)
- {
- LcdRegister();
- }
- // ---------------------------------------------------------------------------------------- //
- // --- METODY PUBLICZNE KLASY LCD -------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- void WyswietlCzas(); // wyswietl zegar
- void WyswietlDate(); // wyswietl datę
- void LcdRegister(); // zarejestruj nowy zestaw znaków specjalnych
- };
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PRYWATNE *** WYCZYSC LINIE X*** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: WyczyscLinie(int y)
- {
- wyswietlacz.setCursor(0,y);
- wyswietlacz.print(F(" "));
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PRYWATNE *** ZAREJESTRUJ NOWY ZESTAW ZNAKÓW SPECJALNYCH DLA WYŚWIETLACZA 20x4 *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: LcdRegister()
- {
- wyswietlacz.createChar(0,LGc); // 0 -> lewy górny narożnik ------------ //
- wyswietlacz.createChar(1,LDc); // 1 -> lewy dolny narożnik ------------ //
- wyswietlacz.createChar(2,PGc); // 2 -> prawy górny narożnik ----------- //
- wyswietlacz.createChar(3,PDc); // 3 -> prawy dolny narożnik ----------- //
- wyswietlacz.createChar(4,UDb); // 4 -> górny pół-blok ----------------- //
- wyswietlacz.createChar(5,DDb); // 5 -> dolny pół-blok ----------------- //
- wyswietlacz.createChar(6,blk); // 6 -> pełny blok --------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 0 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba0(int x, int y)
- { //
- wyswietlacz.setCursor(x,y); // ustaw kursor ------------------------ //
- wyswietlacz.write(0); // lewy górny narożnk ------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------- //
- wyswietlacz.write(2); // prawy górny narożnik ---------------- //
- wyswietlacz.setCursor(x,y+1); // ustaw kursor ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 --------------------------- //
- wyswietlacz.print(F(" ")); // pusty blok -------------------------- //
- wyswietlacz.write(6); // pełny 5x8 --------------------------- //
- wyswietlacz.setCursor(x,y+2); // ustaw kursor ------------------------ //
- wyswietlacz.write(1); // lewy dolny narożnik ----------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------- //
- wyswietlacz.write(3); // prawy dolny narożnik ---------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 1 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba1(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(4); // górna kropa ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.setCursor(x,y+1); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.setCursor(x,y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 2 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba2(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 3 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba3(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 4 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba4(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(1); // lewy dolny narożnik ---------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 5 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba5(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(1); // lewy dolny narożnik ---------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 6 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba6(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(0); // lewy górny narożnk ----------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(1); // lewy dolny narożnik ---------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 7 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba7(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 8 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba8(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(0); // lewy górny narożnk ----------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(1); // lewy dolny narożnik ---------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 9 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Liczba9(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.write(0); // lewy górny narożnk ----------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.write(2); // prawy górny narożnik --------------- //
- wyswietlacz.setCursor(x, y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(1); // lewy dolny narożnik ---------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(6); // pełny 5x8 -------------------------- //
- wyswietlacz.setCursor(x, y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- wyswietlacz.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża liczba 9 ------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Dwukropek(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.setCursor(x,y+1); // ustaw kursor ----------------------- //
- wyswietlacz.write(4); // kropa górna ------------------------ //
- wyswietlacz.setCursor(x,y+2); // ustaw kursor ----------------------- //
- wyswietlacz.write(5); // kropa dolna ------------------------ //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- KROPA --------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Kropka(int x, int y)
- {
- wyswietlacz.setCursor(x,y); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.setCursor(x,y+1); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- wyswietlacz.setCursor(x,y+2); // ustaw kursor ----------------------- //
- wyswietlacz.print(F(" ")); // pusty blok ------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- WYSWIETL CYFRE ------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: WyswietlCyfre(int x, int y, int numer)
- {
- // --------------------------------------------------------------------------------------------------------- //
- // K O N T R O L A B Ł Ę D U //
- if(x > 17) x = 17; // jesli pozycja x większa niż 17, ustaw maksymalną ------- //
- if(y > 1) y = 1; // jesli pozycja y wieksza niz 1 , ustaw maksymalna ------- //
- //
- // --------------------------------------------------------------------------------------------------------- //
- switch (numer)
- {
- case 0: Liczba0(x,y); break;
- case 1: Liczba1(x,y); break;
- case 2: Liczba2(x,y); break;
- case 3: Liczba3(x,y); break;
- case 4: Liczba4(x,y); break;
- case 5: Liczba5(x,y); break;
- case 6: Liczba6(x,y); break;
- case 7: Liczba7(x,y); break;
- case 8: Liczba8(x,y); break;
- case 9: Liczba9(x,y); break;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** WYSWIETL CZAS *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: WyswietlCzas()
- {
- static bool F_sec = false;
- static int O_min = 0; // optymalizacja (no flickering)
- static int O_hrs = 0; // optymalizacja (no flickering)
- if (O_min != czas.Minuta)
- {
- WyswietlCyfre(0, 0, czas.Godzina / 10);
- WyswietlCyfre(4, 0, czas.Godzina % 10);
- WyswietlCyfre(10, 0, czas.Minuta / 10);
- WyswietlCyfre(14, 0, czas.Minuta % 10);
- O_min = czas.Minuta;
- }
- switch (F_sec)
- {
- case 0 : Dwukropek(8,0); F_sec = true; break;
- case 1 : Kropka (8,0); F_sec = false; break;
- default: break;
- }
- wyswietlacz.setCursor(18,2); // ustaw pozycję SEKUNDNIKA
- wyswietlacz.print(czas.Sekunda / 10); // wyswietl dziesiątki sekundnika
- wyswietlacz.print(czas.Sekunda % 10); // wyswietl jednosci sekundnika
- if (O_hrs != czas.Godzina)
- {
- wyswietlacz.setCursor(18,0); // ustaw pozycję AM/PM
- if (czas.Godzina < 12) wyswietlacz.print(F("AM"));
- else wyswietlacz.print(F("PM"));
- wyswietlacz.setCursor(3,3);
- wyswietlacz.print(F("code by : TLG"));
- O_hrs = czas.Godzina;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** WYSWIETL DATE *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: WyswietlDate()
- {
- static bool przelacznik = true;
- WyczyscLinie(3);
- wyswietlacz.setCursor(0,3);
- if ( przelacznik )
- {
- wyswietlacz.print(czas.ShortData);
- przelacznik = false;
- }
- else
- if ( !przelacznik )
- {
- wyswietlacz.print(czas.LongData);
- przelacznik = true;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** KLASA LCD *** by Tomasz Majcher (TLG) v1.00 Lite *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- // * * * K O N I E C K L A S Y L C D *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- O B I E K T Y ------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- LCD myLCD(lcd);
- WiFiUDP ntpUDP;
- NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600);
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task0Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task0Callback()
- {
- timeClient.update();
- unsigned long epochTime = timeClient.getEpochTime();
- struct tm *ptm = gmtime ( (time_t *) &epochTime );
- czas.DzienTygodnia = timeClient.getDay();
- czas.DzienMiesiaca = ptm->tm_mday;
- czas.Miesiac = ptm->tm_mon+1;
- czas.Rok = ptm->tm_year+1900;
- czas.SformatowanaData
- = String(DZIEN[czas.DzienTygodnia])
- + ", "
- + String(czas.DzienMiesiaca)
- + " "
- + String(MIESIAC[czas.Miesiac])
- + " "
- + String(czas.Rok);
- czas.ShortData = String(czas.DzienMiesiaca)
- + " "
- + String(MIESIAC[czas.Miesiac])
- + " "
- + String(czas.Rok);
- czas.LongData = String(DZIEN[czas.DzienTygodnia])
- + " "
- + String(czas.DzienMiesiaca)
- + "/"
- + String(czas.Miesiac);
- // --- formatowanie długości wyświetlanej daty ---
- if ( strlen(czas.LongData.c_str()) < 15 ) // jesli uda sie dokleci /RRRR
- {
- czas.LongData += "/" + String(czas.Rok);
- }
- else
- if ( strlen(czas.LongData.c_str()) < 18 ) // jesli nie uda się dokleić /RRRR doklej /RR
- {
- czas.LongData += "/" + String(czas.Rok % 100);
- }
- else
- if ( strlen(czas.LongData.c_str()) < 17 ) // jesli nie uda sie dokleic /RR
- {
- // nie rób nic :-)
- }
- // -----------------------------------------------
- #if SERIAL
- Serial.printf("\n\n[ESP] [TASK0] Data NTP \t: %s ", czas.SformatowanaData.c_str());
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task1Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task1Callback()
- {
- #if SERIAL
- String bufor;
- if (czas.Godzina < 10)
- {
- bufor = "0";
- bufor += String(czas.Godzina);
- }
- else
- {
- bufor = String(czas.Godzina);
- }
- bufor += ":";
- if (czas.Minuta < 10)
- {
- bufor += "0";
- bufor += String(czas.Minuta);
- }
- else
- {
- bufor += String(czas.Minuta);
- }
- if (czas.Godzina < 12) bufor += " AM";
- else bufor += " PM";
- Serial.printf("\n\n[ESP] [TASK1] [Czas NTP] \t: %s", bufor.c_str());
- Serial.printf("\n[ESP] [TASK1] [Memory Free] : %u [kB]", ESP.getFreeHeap());
- Serial.printf("\n[ESP] [TASK1] [CPU frequency] : %u [MHz]",ESP.getCpuFreqMHz());
- Serial.printf("\n[ESP] [TASK1] [WiFi IP] : "); Serial.print(WiFi.localIP() );
- Serial.printf("\n[ESP] [TASK1] [LongData] \t: %s ", czas.LongData.c_str());
- Serial.printf("\n[ESP] [TASK1] [ShortData] \t: %s ", czas.ShortData.c_str());
- #endif
- myLCD.WyswietlDate();
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task2Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task2Callback()
- {
- timeClient.update();
- czas.Godzina = timeClient.getHours()+1; // zapisz godzinę z serwera
- czas.Minuta = timeClient.getMinutes(); // zapisz minutę z serwera
- czas.Sekunda = timeClient.getSeconds(); // zapisz sekundę z serwera
- myLCD.WyswietlCzas();
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S E T U P ----------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void setup()
- {
- #if SERIAL
- Serial.begin(SerialSpeed);
- #endif
- lcd.init();
- lcd.backlight();
- myLCD.LcdRegister();
- WiFi.begin(ssid, password);
- while ( WiFi.status() != WL_CONNECTED ) // czekaj na połączenie
- { // wait for connect
- #if SERIAL
- delay ( 200 );
- Serial.print ( "." );
- #endif
- }
- runner.init(); // inicjalizuj scheluder
- runner.addTask(task_0); // dodaj zadanie do scheluder
- task_0.enable(); // włącz zadanie do scheluder
- runner.addTask(task_1); // dodaj zadanie do scheluder
- task_1.enable(); // włącz zadanie do scheluder
- runner.addTask(task_2); // dodaj zadanie do scheluder
- task_2.enable(); // włącz zadanie do scheluder
- // --- WYWOŁAJ TERAZ --------------------- //
- Task0Callback();
- Task1Callback();
- Task2Callback();
- // --------------------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L O O P ------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void loop()
- {
- runner.execute();
- }
Advertisement
Add Comment
Please, Sign In to add comment