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 //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- // v1.7 (09.06.2021) - update : show humidity method in class LCD
- // v1.6 (05.06.2021) - update : show temperature method in class LCD
- // v1.5 (03.06.2021) - update : show percentage (sing)
- // v1.4 (02.06.2021) - update : show C (sing)
- // v1.3 (30.05.2021) - update : add TypeWriter Public Method in class LCD
- // v1.2 (30.05.2021) - update : MultiLanguage (Day of Week) and (Month) in Germany
- // v1.1 (30.05.2021) - update : MultiLanguage (Day of Week) and (Month) in English
- // 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 Timeu (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
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L A N G U A G E S E T U P ----------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define LANGUAGE 0 // 0 (Polish), 1 (English), 2 (Germany)
- #if LANGUAGE == 0
- #define POLISH 1
- #define ENGLISH 0
- #define GERMANY 0
- #endif
- #if LANGUAGE == 1
- #define POLISH 0
- #define ENGLISH 1
- #define GERMANY 0
- #endif
- #if LANGUAGE == 2
- #define POLISH 0
- #define ENGLISH 0
- #define GERMANY 1
- #endif
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- M A C R O D E F I N E --------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
- const char *ssid = "DIABLO"; // network wifi ssid
- const char *password = "xxxxxxxxxx"; // network wifi password
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- I N C L U D E L I B R A R Y --------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- extern "C" char* sbrk(int incr);
- #include "LiquidCrystal_I2C.h" // get from https://circuits4you.com/wp-content/uploads/2019/03/I2C-LCD-ESP8266-Library.zip
- #include <ESP8266WiFi.h> // biblioteka Wi-Fi
- #include <NTPClient.h> // NTP klient (Time)
- #include <WiFiUdp.h> // UDP dla NTP (Time)
- #include <TaskScheduler.h> // scheluder
- #include <TimeLib.h>
- #include <Arduino.h>
- LiquidCrystal_I2C lcd(0x27,20,4);
- #define SERIAL true
- #define SerialSpeed 57600
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- 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;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** DHT11/22 *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- float temperature = 20.0; // default - domyślna wartość (test only)
- float humidity = 50.0; // default - domyślna wartość (test only)
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA Time *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- struct TIME_DATA
- {
- int Hour = 0;
- int Minute = 0;
- int Second = 0;
- String FormatedData = "NULL";
- String ShortData = "NULL";
- String LongData = "NULL";
- int DayOfTheWeek = 0;
- int DayOfTheMonth = 0;
- int Month = 0;
- int Year = 0;
- }
- Time;
- bool DisplayTime = true;
- bool DisplayTemperature = false;
- bool DisplayHumidity = false;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA DZIEN *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- #if POLISH
- const char Day_0 [] = "Niedziela";
- const char Day_1 [] = "Poniedzialek";
- const char Day_2 [] = "Wtorek";
- const char Day_3 [] = "Sroda";
- const char Day_4 [] = "Czwartek";
- const char Day_5 [] = "Piatek";
- const char Day_6 [] = "Sobota";
- #endif
- #if ENGLISH
- const char Day_0 [] = "Sunday";
- const char Day_1 [] = "Monday";
- const char Day_2 [] = "Tuesday";
- const char Day_3 [] = "Wednesday";
- const char Day_4 [] = "Thursday";
- const char Day_5 [] = "Friday";
- const char Day_6 [] = "Saturday";
- #endif
- #if GERMANY
- const char Day_0 [] = "Sonntag";
- const char Day_1 [] = "Montag";
- const char Day_2 [] = "Dienstag";
- const char Day_3 [] = "Mittwoch";
- const char Day_4 [] = "Donnerstag";
- const char Day_5 [] = "Freitag";
- const char Day_6 [] = "Samstag";
- #endif
- const char * const DAY[] = { Day_0, Day_1, Day_2, Day_3, Day_4, Day_5, Day_6 }; // dni tygodnia [0..6]
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA MONTH *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- #if POLISH
- const char MONTH_0 [] = "NULL";
- const char MONTH_1 [] = "Styczen";
- const char MONTH_2 [] = "Luty";
- const char MONTH_3 [] = "Marzec";
- const char MONTH_4 [] = "Kwiecien";
- const char MONTH_5 [] = "Maj";
- const char MONTH_6 [] = "Czerwiec";
- const char MONTH_7 [] = "Lipiec";
- const char MONTH_8 [] = "Sierpien";
- const char MONTH_9 [] = "Wrzesien";
- const char MONTH_10 [] = "Pazdziernik";
- const char MONTH_11 [] = "Listopad";
- const char MONTH_12 [] = "Grudzien";
- #endif
- #if ENGLISH
- const char MONTH_0 [] = "NULL";
- const char MONTH_1 [] = "January";
- const char MONTH_2 [] = "February";
- const char MONTH_3 [] = "March";
- const char MONTH_4 [] = "April";
- const char MONTH_5 [] = "May";
- const char MONTH_6 [] = "June";
- const char MONTH_7 [] = "July";
- const char MONTH_8 [] = "August";
- const char MONTH_9 [] = "September";
- const char MONTH_10 [] = "October";
- const char MONTH_11 [] = "November";
- const char MONTH_12 [] = "December";
- #endif
- #if GERMANY
- const char MONTH_0 [] = "NULL";
- const char MONTH_1 [] = "Januar";
- const char MONTH_2 [] = "Februar";
- const char MONTH_3 [] = "März";
- const char MONTH_4 [] = "April";
- const char MONTH_5 [] = "Mai";
- const char MONTH_6 [] = "Juni";
- const char MONTH_7 [] = "Juli";
- const char MONTH_8 [] = "August";
- const char MONTH_9 [] = "September";
- const char MONTH_10 [] = "Oktober";
- const char MONTH_11 [] = "November";
- const char MONTH_12 [] = "Dezember";
- #endif
- const char * const MONTH[] = { MONTH_0, MONTH_1, MONTH_2, MONTH_3, MONTH_4, MONTH_5, MONTH_6,
- MONTH_7, MONTH_8, MONTH_9, MONTH_10, MONTH_11, MONTH_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 ----- //
- byte procent[8] = { B00000, B01110, B10001, B10001, B10001, B01110, B00000, B00000 }; // procent -------- //
- // --- ZMIENNE PRYWATNE -------------------------------------------------------------------------------------- //
- LiquidCrystal_I2C & MyLCD;
- void ShowDot(int x, int y);
- void ShowColon(int x, int y);
- void Digit0(int x, int y);
- void Digit1(int x, int y);
- void Digit2(int x, int y);
- void Digit3(int x, int y);
- void Digit4(int x, int y);
- void Digit5(int x, int y);
- void Digit6(int x, int y);
- void Digit7(int x, int y);
- void Digit8(int x, int y);
- void Digit9(int x, int y);
- void ShowC (int x, int y);
- void ShowPercentage(int x, int y);
- void ShowDigit(int x, int y, int numer);
- void ClearLine(int x);
- // ---------------------------------------------------------------------------------------- //
- // --- METODY PRYWATNE -------------------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- public :
- // ---------------------------------------------------------------------------------------- //
- // --- KONSTRUKTOR KLACY LCD -------------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- LCD (LiquidCrystal_I2C &adres_lc) : MyLCD(adres_lc)
- {
- LcdRegister();
- }
- // ---------------------------------------------------------------------------------------- //
- // --- METODY PUBLICZNE KLASY LCD -------------------------------------------------------- //
- // ---------------------------------------------------------------------------------------- //
- void ShowTime(); // wyswietl zegar
- void ShowDate(); // wyswietl datę
- void LcdRegister(); // zarejestruj nowy zestaw znaków specjalnych
- void TypeWriter(const String & message, unsigned int wait, unsigned int x, unsigned int y);
- void ShowTemperature();
- void ShowHumidity();
- };
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PRYWATNE *** WYCZYSC LINIE X*** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ClearLine(int y)
- {
- MyLCD.setCursor(0,y);
- MyLCD.print(F(" "));
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PRYWATNE *** ZAREJESTRUJ NOWY ZESTAW ZNAKÓW SPECJALNYCH DLA WYŚWIETLACZA 20x4 *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: LcdRegister()
- {
- MyLCD.createChar(0,LGc); // 0 -> lewy górny narożnik ------------ //
- MyLCD.createChar(1,LDc); // 1 -> lewy dolny narożnik ------------ //
- MyLCD.createChar(2,PGc); // 2 -> prawy górny narożnik ----------- //
- MyLCD.createChar(3,PDc); // 3 -> prawy dolny narożnik ----------- //
- MyLCD.createChar(4,UDb); // 4 -> górny pół-blok ----------------- //
- MyLCD.createChar(5,DDb); // 5 -> dolny pół-blok ----------------- //
- MyLCD.createChar(6,blk); // 6 -> pełny blok --------------------- //
- MyLCD.createChar(7,procent); // 7 -> kolko gora --------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 0 -------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit0(int x, int y)
- { //
- MyLCD.setCursor(x,y); // ustaw kursor ------------------------ //
- MyLCD.write(0); // lewy górny narożnk ------------------ //
- MyLCD.write(4); // kropa górna ------------------------- //
- MyLCD.write(2); // prawy górny narożnik ---------------- //
- MyLCD.setCursor(x,y+1); // ustaw kursor ------------------------ //
- MyLCD.write(6); // pełny 5x8 --------------------------- //
- MyLCD.print(F(" ")); // pusty blok -------------------------- //
- MyLCD.write(6); // pełny 5x8 --------------------------- //
- MyLCD.setCursor(x,y+2); // ustaw kursor ------------------------ //
- MyLCD.write(1); // lewy dolny narożnik ----------------- //
- MyLCD.write(5); // kropa dolna ------------------------- //
- MyLCD.write(3); // prawy dolny narożnik ---------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 1 -------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit1(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(4); // górna kropa ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x,y+1); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x,y+2); // ustaw kursor ----------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 2 -------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit2(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(5); // kropa dolna ------------------------ //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 3 -------------------------------------------------------------------------------------=------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit3(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 4 ------------------------------------------------------------------------------------=------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit4(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(1); // lewy dolny narożnik ---------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 5 -----------------------------------------------------------------------------------=-------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit5(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(1); // lewy dolny narożnik ---------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 6 ---------------------------------------------------------------------------------------=---------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit6(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(0); // lewy górny narożnk ----------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(1); // lewy dolny narożnik ---------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 7 -----------------------------------------------------------------------------------------=-------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit7(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 8 -----------------------------------------------------------------------------------------=-------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit8(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(0); // lewy górny narożnk ----------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(1); // lewy dolny narożnik ---------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 9 -------------------------------------------------------------------------------------------=------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: Digit9(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(0); // lewy górny narożnk ----------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(2); // prawy górny narożnik --------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(1); // lewy dolny narożnik ---------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(3); // prawy dolny narożnik --------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Duża Digit 9 ----------------------------------------------------------------------------------------=--------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowColon(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x,y+1); // ustaw kursor ----------------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.setCursor(x,y+2); // ustaw kursor ----------------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- KROPA --------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowDot(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x,y+1); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x,y+2); // ustaw kursor ----------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- }
- // --------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowC (int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(0); // lewy górny narożnk ----------------- //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.write(4); // kropa górna ------------------------ //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.write(6); // pełny 5x8 -------------------------- //
- MyLCD.print(F(" ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.write(1); // lewy dolny narożnik ---------------- //
- MyLCD.write(5); // kropa dolna ------------------------ //
- MyLCD.write(5); // kropa dolna ------------------------ //
- }
- // --------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowPercentage(int x, int y)
- {
- MyLCD.setCursor(x,y); // ustaw kursor ----------------------- //
- MyLCD.write(7); // lewy górny narożnk ----------------- //
- MyLCD.print(F(" /")); // pusty blok ------------------------- //
- MyLCD.setCursor(x, y+1); // ustaw kursor ----------------------- //
- MyLCD.print(F(" / ")); // pusty blok ------------------------- //
- MyLCD.setCursor(x, y+2); // ustaw kursor ----------------------- //
- MyLCD.print(F("/ ")); // pusty blok ------------------------- //
- MyLCD.write(7); // lewy górny narożnk ----------------- //
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- WYSWIETL CYFRE ------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowDigit(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: Digit0(x,y); break;
- case 1: Digit1(x,y); break;
- case 2: Digit2(x,y); break;
- case 3: Digit3(x,y); break;
- case 4: Digit4(x,y); break;
- case 5: Digit5(x,y); break;
- case 6: Digit6(x,y); break;
- case 7: Digit7(x,y); break;
- case 8: Digit8(x,y); break;
- case 9: Digit9(x,y); break;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** WYSWIETL Time *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowTime()
- {
- static bool F_sec = false;
- static int O_min = 0; // optymalizacja (no flickering)
- static int O_hrs = 0; // optymalizacja (no flickering)
- if (O_min != Time.Minute)
- {
- ShowDigit(0, 0, Time.Hour / 10);
- ShowDigit(4, 0, Time.Hour % 10);
- ShowDigit(10, 0, Time.Minute / 10);
- ShowDigit(14, 0, Time.Minute % 10);
- O_min = Time.Minute;
- }
- switch (F_sec)
- {
- case 0 : ShowColon(8,0); F_sec = true; break;
- case 1 : ShowDot(8,0); F_sec = false; break;
- default: break;
- }
- MyLCD.setCursor(18,2); // ustaw pozycję SEKUNDNIKA
- MyLCD.print(Time.Second / 10); // wyswietl dziesiątki sekundnika
- MyLCD.print(Time.Second % 10); // wyswietl jednosci sekundnika
- if (O_hrs != Time.Hour)
- {
- MyLCD.setCursor(18,0); // ustaw pozycję AM/PM
- if (Time.Hour < 12) MyLCD.print(F("AM"));
- else MyLCD.print(F("PM"));
- O_hrs = Time.Hour;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** WYSWIETL Temperaturę *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowTemperature()
- {
- int temp1 = int(temperature) / 10; // 1x
- int temp2 = int(temperature) % 10; // x1
- MyLCD.setCursor(4,0);
- #if POLISH
- MyLCD.print(F("TEMPERATURA"));
- #endif
- #if ENGLISH
- MyLCD.print(F("TEMPERATURE"));
- #endif
- #if GERMANY
- MyLCD.print(F("TEMPERATUR"));
- #endif
- ShowDigit(3, 1, temp1);
- ShowDigit(7, 1, temp2);
- MyLCD.setCursor(11,1);
- MyLCD.write(7);
- ShowC(13,1);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** WYSWIETL Wilgotnosc *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowHumidity()
- {
- int humi1 = int(humidity) / 10;
- int humi2 = int(humidity) % 10;
- MyLCD.setCursor(5,0);
- #if POLISH
- MyLCD.print(F("WILGOTNOSC"));
- #endif
- #if ENGLISH
- MyLCD.print(F("HUMIDITY"));
- #endif
- #if GERMANY
- MyLCD.print(F("Feuchtigkeit"));
- #endif
- ShowDigit(4, 1, humi1);
- ShowDigit(8, 1, humi2);
- ShowPercentage(13,1);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** WYSWIETL DATE *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: ShowDate()
- {
- static bool switcher = true;
- ClearLine(3);
- MyLCD.setCursor(0,3);
- if ( switcher )
- {
- MyLCD.print(Time.ShortData);
- switcher = false;
- }
- else
- if ( !switcher )
- {
- MyLCD.print(Time.LongData);
- switcher = true;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** METODY PUBLICZNE *** T Y P E W R I T E R *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCD :: TypeWriter(const String & message, unsigned int wait, unsigned int x, unsigned int y)
- {
- MyLCD.setCursor(x,y);
- for(const char c : message)
- {
- MyLCD.print(c);
- delay(wait);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** 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 );
- Time.DayOfTheWeek = timeClient.getDay();
- Time.DayOfTheMonth = ptm->tm_mday;
- Time.Month = ptm->tm_mon+1;
- Time.Year = ptm->tm_year+1900;
- Time.FormatedData
- = String(DAY[Time.DayOfTheWeek])
- + ", "
- + String(Time.DayOfTheMonth)
- + " "
- + String(MONTH[Time.Month])
- + " "
- + String(Time.Year);
- Time.ShortData = String(Time.DayOfTheMonth)
- + " "
- + String(MONTH[Time.Month])
- + " "
- + String(Time.Year);
- Time.LongData = String(DAY[Time.DayOfTheWeek])
- + " "
- + String(Time.DayOfTheMonth)
- + "/"
- + String(Time.Month);
- // --- formatowanie długości wyświetlanej daty ---
- if ( strlen(Time.LongData.c_str()) < 15 ) // jesli uda sie dokleci /RRRR
- {
- Time.LongData += "/" + String(Time.Year);
- }
- else
- if ( strlen(Time.LongData.c_str()) < 18 ) // jesli nie uda się dokleić /RRRR doklej /RR
- {
- Time.LongData += "/" + String(Time.Year % 100);
- }
- else
- if ( strlen(Time.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 ", Time.FormatedData.c_str());
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task1Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task1Callback()
- {
- #if SERIAL
- String bufor;
- if (Time.Hour < 10)
- {
- bufor = "0";
- bufor += String(Time.Hour);
- }
- else
- {
- bufor = String(Time.Hour);
- }
- bufor += ":";
- if (Time.Minute < 10)
- {
- bufor += "0";
- bufor += String(Time.Minute);
- }
- else
- {
- bufor += String(Time.Minute);
- }
- if (Time.Hour < 12) bufor += " AM";
- else bufor += " PM";
- Serial.printf("\n\n[ESP] [TASK1] [Time 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 ", Time.LongData.c_str());
- Serial.printf("\n[ESP] [TASK1] [ShortData] \t: %s ", Time.ShortData.c_str());
- #endif
- if(DisplayTime) myLCD.ShowDate(); // only if DisplayTime is TRUE --- jesli DisplayTime jest TRUE
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task2Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task2Callback()
- {
- timeClient.update();
- Time.Hour = timeClient.getHours()+1; // zapisz godzinę z serwera
- Time.Minute = timeClient.getMinutes(); // zapisz minutę z serwera
- Time.Second = timeClient.getSeconds(); // zapisz sekundę z serwera
- if(DisplayTime) myLCD.ShowTime(); // only if DisplayTime is TRUE --- jesli DisplayTime jest TRUE
- else
- if(DisplayTemperature) myLCD.ShowTemperature();
- else
- if(DisplayHumidity) myLCD.ShowHumidity();
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S E T U P ----------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void setup()
- {
- #if SERIAL
- Serial.begin(SerialSpeed);
- #endif
- lcd.init();
- lcd.backlight();
- lcd.clear();
- myLCD.LcdRegister(); // register new chars
- myLCD.TypeWriter("simple ESP8266 Clock", 150, 0, 0);
- myLCD.TypeWriter("v1.70b by: T.Majcher", 150, 0, 1);
- WiFi.begin(ssid, password);
- while ( WiFi.status() != WL_CONNECTED ) // czekaj na połączenie
- { // wait for connect
- #if SERIAL
- delay ( 200 );
- Serial.print ( "." );
- #endif
- }
- char buf[21];
- strcpy (buf, "IP : ");
- strcat (buf, WiFi.localIP().toString().c_str() );
- myLCD.TypeWriter(buf, 150, 0, 2);
- myLCD.TypeWriter("Wait ..............", 150, 0, 3);
- delay(2000);
- lcd.clear();
- 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