Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Morphing Clock by Tomasz Majcher (Transline Group)
- * version : 1.6 beta (StartUp)
- * date : 22.03.2022
- * e-mail : [email protected]
- * mobile : +48 667082121
- */
- extern "C" char* sbrk(int incr);
- /*
- * History
- *
- * version 1.6 : modify -> refresh (interal 1 minute) display temp (before interval 1 hours)
- *
- * version 1.5 : modify -> speeding up the speed of the morphing animation
- *
- * version 1.4 : modify -> memory optymalization -> before -> use 307593kB (29% progmem) / use 29884kB RAM free 52036 kB RAM
- * -> now -> use 307585kB (29% progmem) / use 29876kB RAM free 52044 kB RAM
- -> safe -> 216bytes RAM, 856bytes PROGMEM compare to version 1.1
- *
- * version 1.3 : modify -> memory optymalization -> before -> use 307609kB (29% progmem) / use 29908kB RAM free 52021 kB RAM
- * -> now -> use 307593kB (29% progmem) / use 29884kB RAM free 52036 kB RAM
- *
- * version 1.2 : modify -> memory optymalization -> before -> use 308441kB (29% progmem) / use 30092kB RAM free 51925 kB RAM
- * -> now -> use 307609kB (29% progmem) / use 29908kB RAM free 52012 kB RAM
- *
- * version 1.1 : repair -> debug & find & bug
- * version 1.0 : test
- * version 0.9 : build -> add DHT11 sensor and tested : build buffor for humidity & devPoint
- * version 0.8 : build -> add DHT11 sensor and tested : show temperature on PxMatrix
- * version 0.7 : test
- * version 0.6 : build
- * version 0.5 : build
- * version 0.4 : build
- * version 0.3 : build
- */
- #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
- #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
- #define F(string_literal) (FPSTR(PSTR(string_literal)))
- /***************************************************************************************************************/
- /*!
- @define macro
- @create macro-time
- */
- /***************************************************************************************************************/
- #define TIME_01S 1000 // 1 sekunda
- #define TIME_10S 10000 // 10 sekund
- #define TIME_01M 60000 // 1 minuta
- #define TIME_05M 360000 // 5 minut
- #define TIME_10M 600000 // 10 minut
- #define TINE_01H 3600000 // 1 godzina
- /***************************************************************************************************************/
- /*!
- @library PxMatrix.h
- @include library, font
- @define pin, width, height
- @create object PxMatrix
- */
- /***************************************************************************************************************/
- #include <PxMatrix.h> // załączenie biblioteki
- #define P_LAT 16 // definicja pin : P_LAT
- #define P_A 5 // definicja pin : P_A
- #define P_B 4 // definicja pin : P_B
- #define P_C 15 // definicja pin : P_C
- #define P_D 12 // definicja pin : P_D
- #define P_E 0 // definicja pin : P_E
- #define P_OE 2 // definicja pin : P_OE
- #define matrix_width 64 // definicja : szerokość wyświetlacza
- #define matrix_height 32 // definicja : wysokość wyświetlacza
- const uint8_t display_draw_time=10; // zmienna : display_draw_time
- const byte animSpeed = 15; // zmienna : prędkość animacji (morphing digit)
- PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D); // utwórz obiekt display klasy PxMatrix
- /***************************************************************************************************************/
- /*!
- @library Ticker.h
- @include library
- @define function
- */
- /***************************************************************************************************************/
- #include <Ticker.h>
- Ticker display_ticker;
- void display_updater(); // definicja funkcji
- void display_update_enable(bool is_enable); // definicja funkcji
- /***************************************************************************************************************/
- /*!
- @value Digit
- @class Digit
- */
- /***************************************************************************************************************/
- const byte sA = 0;
- const byte sB = 1;
- const byte sC = 2;
- const byte sD = 3;
- const byte sE = 4;
- const byte sF = 5;
- const byte sG = 6;
- const int segHeight = 6;
- const int segWidth = segHeight;
- const uint16_t height = 31;
- const uint16_t width = 63;
- const byte digitBits[] =
- {
- B11111100, // 0 ABCDEF--
- B01100000, // 1 -BC-----
- B11011010, // 2 AB-DE-G-
- B11110010, // 3 ABCD--G-
- B01100110, // 4 -BC--FG-
- B10110110, // 5 A-CD-FG-
- B10111110, // 6 A-CDEFG-
- B11100000, // 7 ABC-----
- B11111110, // 8 ABCDEFG-
- B11110110, // 9 ABCD_FG-
- };
- uint16_t black;
- /***************************************************************************************************************/
- /*!
- @class Digit
- */
- /***************************************************************************************************************/
- class Digit
- {
- public:
- Digit(PxMATRIX* d, byte value, uint16_t xo, uint16_t yo, uint16_t color);
- void Draw(byte value);
- void Morph(byte newValue);
- byte Value();
- void DrawColon(uint16_t c);
- private:
- PxMATRIX* _display;
- byte _value;
- uint16_t _color;
- uint16_t xOffset;
- uint16_t yOffset;
- void drawPixel(uint16_t x, uint16_t y, uint16_t c);
- void drawFillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t c);
- void drawLine(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint16_t c);
- void drawSeg(byte seg);
- void Morph2();
- void Morph3();
- void Morph4();
- void Morph5();
- void Morph6();
- void Morph7();
- void Morph8();
- void Morph9();
- void Morph0();
- void Morph1();
- };
- /***************************************************************************************************************/
- /*!
- @library Digit.h
- @include library
- @define
- @create object
- */
- /***************************************************************************************************************/
- Digit digit0(&display, 0, 63 - 1 - 9*1, 8, display.color565(0, 0, 255));
- Digit digit1(&display, 0, 63 - 1 - 9*2, 8, display.color565(0, 0, 255));
- Digit digit2(&display, 0, 63 - 4 - 9*3, 8, display.color565(0, 0, 255));
- Digit digit3(&display, 0, 63 - 4 - 9*4, 8, display.color565(0, 0, 255));
- Digit digit4(&display, 0, 63 - 7 - 9*5, 8, display.color565(0, 0, 255));
- Digit digit5(&display, 0, 63 - 7 - 9*6, 8, display.color565(0, 0, 255));
- /***************************************************************************************************************/
- /*!
- @library ESP8266WiFi.h
- @include library
- @define ssid, password
- @create object
- */
- /***************************************************************************************************************/
- #include <ESP8266WiFi.h> // biblioteka do obsługi wi-fi
- const char *ssid = "OFFICE_SERV_02"; // network wifi ssid
- const char *password = "xxxxxxxxxxxxxxxxxxx"; // network wifi password
- unsigned long previousMillis = 0; // re-conect Wi-FI
- const unsigned long interval = 30000; // re-conect Wi-FI
- /***************************************************************************************************************/
- /*!
- @library TaskScheduler.h
- @include library
- @declaration function
- @create object
- */
- /***************************************************************************************************************/
- #include <TaskScheduler.h> // scheluder
- void Task0Callback(); // funkcja dla task_0
- void Task1Callback(); // funkcja dla task_1
- void Task2Callback(); // funkcja dla task_2
- void Task3Callback(); // funkcja dla task_3
- void Task4Callback(); // funkcja dla task_4
- Task task_0( TIME_01S, TASK_FOREVER, &Task0Callback); // task_0 - co 1 sekundę
- Task task_1( TIME_01M, TASK_FOREVER, &Task1Callback); // task_1 - co 1 sekundę
- Task task_2( TIME_01S, TASK_FOREVER, &Task2Callback); // task_2 - co 1 sekundę
- Task task_3( TIME_10M, TASK_FOREVER, &Task3Callback); // task_3 - co 1 sekundę
- Task task_4( TIME_05M, TASK_FOREVER, &Task4Callback); // task_4 - co 5 minut
- Scheduler runner;
- /***************************************************************************************************************/
- /*!
- @library TimeLib.h, WifiUdp.h, NTPClient_Generic.h
- @include library
- @declaration timefunction
- @create object
- */
- /***************************************************************************************************************/
- #include <NTPClient_Generic.h> // NTP klient (Time)
- #include <WiFiUdp.h> // UDP dla NTP (Time)
- #include <TimeLib.h> // TimeLib
- WiFiUDP ntpUDP;
- const char timeServer[] = "0.pl.pool.ntp.org";
- #define TIME_ZONE_OFFSET_HRS 1 // Europe, Poland (2)
- #define NTP_UPDATE_INTERVAL_MS 60000L // update interval
- NTPClient timeClient(ntpUDP, timeServer, (3600 * TIME_ZONE_OFFSET_HRS), NTP_UPDATE_INTERVAL_MS);
- bool F_TimeUpdate = false; // flag to update (second)
- unsigned long prevEpoch;
- byte prevhh;
- byte prevmm;
- byte prevss;
- /***************************************************************************************************************/
- /*!
- @library dht11.h
- @include library
- @declaration temperature, humidity
- @create object
- */
- /***************************************************************************************************************/
- #include <dht11.h>
- #define DHT_PIN 0
- dht11 DHT11;
- /***************************************************************************************************************/
- /*
- @declaration function
- */
- /***************************************************************************************************************/
- void statWiFi();
- void initWiFi();
- void reconectWifi();
- void SerialTypeWriter(const String & message, unsigned int wait);
- void ShowInfo(); // pokaż INTRO
- void PM_ShowTemperature();
- /***************************************************************************************************************/
- /*!
- @colour standard
- */
- /***************************************************************************************************************/
- const uint16_t myRED = display.color565(255, 0, 0);
- const uint16_t myGREEN = display.color565(0, 255, 0);
- const uint16_t myBLUE = display.color565(0, 0, 255);
- const uint16_t myWHITE = display.color565(255, 255, 255);
- const uint16_t myYELLOW = display.color565(255, 255, 0);
- const uint16_t myCYAN = display.color565(0, 255, 255);
- const uint16_t myMAGENTA = display.color565(255, 0, 255);
- const uint16_t myBLACK = display.color565(0, 0, 0);
- const uint16_t mySha = display.color565(54,47,36);
- const uint16_t myROSE = display.color565(255,0,127);
- const uint16_t myCOLORS[8] = {myRED,myGREEN,myBLUE,myWHITE,myYELLOW,myCYAN,myMAGENTA,myBLACK};
- const uint16_t myCOLORS2[9] = {myRED, myGREEN, myWHITE, myMAGENTA, myBLUE, myYELLOW, myCYAN, mySha, myROSE};
- /***************************************************************************************************************/
- /*!
- @colour Blue
- */
- /***************************************************************************************************************/
- const uint16_t myBlue0 = display.color565(0, 0, 255);
- const uint16_t myBlue1 = display.color565(0, 30, 255);
- const uint16_t myBlue2 = display.color565(0, 60, 255);
- const uint16_t myBlue3 = display.color565(0, 90, 255);
- const uint16_t myBlue4 = display.color565(0, 120, 255);
- const uint16_t myBlue5 = display.color565(0, 150, 255);
- const uint16_t myBlue6 = display.color565(0, 180, 255);
- const uint16_t myBlue7 = display.color565(0, 210, 255);
- const uint16_t myBlue8 = display.color565(0, 250, 255);
- const uint16_t myBlue[9] = {myBlue0, myBlue1, myBlue2, myBlue3, myBlue4, myBlue5, myBlue6, myBlue7, myBlue8};
- /***************************************************************************************************************/
- /*!
- @colour Dark
- */
- /***************************************************************************************************************/
- const uint16_t myDark0 = display.color565(20, 20, 20);
- const uint16_t myDark1 = display.color565(25, 25, 25);
- const uint16_t myDark2 = display.color565(30, 30, 30);
- const uint16_t myDark3 = display.color565(35, 35, 35);
- const uint16_t myDark4 = display.color565(40, 40, 40);
- const uint16_t myDark5 = display.color565(45, 45, 45);
- const uint16_t myDark6 = display.color565(50, 50, 50);
- const uint16_t myDark7 = display.color565(55, 55, 55);
- const uint16_t myDark8 = display.color565(60, 60, 60);
- const uint16_t myDark[9] = {myDark0, myDark1, myDark2, myDark3, myDark4, myDark5, myDark6, myDark7, myDark8};
- /***************************************************************************************************************/
- /*!
- @colour DarkRed
- */
- /***************************************************************************************************************/
- const uint16_t myDarkRed0 = display.color565(20, 1, 8);
- const uint16_t myDarkRed1 = display.color565(31, 1, 12);
- const uint16_t myDarkRed2 = display.color565(36, 1, 14);
- const uint16_t myDarkRed3 = display.color565(41, 1, 16);
- const uint16_t myDarkRed4 = display.color565(46, 1, 18);
- const uint16_t myDarkRed5 = display.color565(50, 1, 20);
- const uint16_t myDarkRed6 = display.color565(54, 1, 24);
- const uint16_t myDarkRed7 = display.color565(58, 1, 28);
- const uint16_t myDarkRed8 = display.color565(64, 1, 32);
- const uint16_t myDarkRed[9] = {myDarkRed0, myDarkRed1, myDarkRed2, myDarkRed3, myDarkRed4, myDarkRed5, myDarkRed6, myDarkRed7, myDarkRed8};
- /***************************************************************************************************************/
- /*!
- @colour DarkSea
- */
- /***************************************************************************************************************/
- const uint16_t myDarkSea0 = display.color565(1, 10, 32);
- const uint16_t myDarkSea1 = display.color565(1, 14, 36);
- const uint16_t myDarkSea2 = display.color565(1, 16, 38);
- const uint16_t myDarkSea3 = display.color565(1, 20, 40);
- const uint16_t myDarkSea4 = display.color565(1, 24, 42);
- const uint16_t myDarkSea5 = display.color565(1, 28, 44);
- const uint16_t myDarkSea6 = display.color565(1, 32, 46);
- const uint16_t myDarkSea7 = display.color565(1, 36, 48);
- const uint16_t myDarkSea8 = display.color565(1, 40, 50);
- const uint16_t myDarkSea[9] = {myDarkSea0, myDarkSea1, myDarkSea2, myDarkSea3, myDarkSea4, myDarkSea5, myDarkSea6, myDarkSea7, myDarkSea8};
- /***************************************************************************************************************/
- /*!
- @definition Weekday, Month
- */
- /***************************************************************************************************************/
- const char* Weekday[7] = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};
- const char* Months []= {"Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
- /***************************************************************************************************************/
- /*!
- @define Serial Setup & Language Setup
- */
- /***************************************************************************************************************/
- #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
- #define SERIAL true
- #define SerialSpeed 57600
- #define DEBUG true
- /***************************************************************************************************************/
- /*
- @declaration function
- @function display_updater()
- @function display_update_enable(bool is_enable)
- */
- /***************************************************************************************************************/
- void display_updater()
- {
- display.display(display_draw_time);
- }
- void display_update_enable(bool is_enable)
- {
- if (is_enable)
- {
- display_ticker.attach(0.004, display_updater);
- }
- else
- {
- display_ticker.detach();
- }
- }
- /***************************************************************************************************************/
- /*
- @struct TIME_DATA
- */
- /***************************************************************************************************************/
- struct TIME_DATA
- {
- int Hour = 0;
- int Minute = 0;
- int Second = 0;
- int DayOfTheWeek = 0;
- int DayOfTheMonth = 0;
- int Day = 0;
- int Month = 0;
- int Year = 0;
- String formated_date = "";
- }
- MyClock;
- /***************************************************************************************************************/
- /*
- @struct HomeClimat
- */
- /***************************************************************************************************************/
- struct HOME_CLIMAT
- {
- float inside_temperature = 0;
- int inside_humidity = 0;
- float inside_devpoint = 0;
- char temp_char_buffer[20]; // bufor
- String buf_temperature = "no data"; // bufor
- String buf_humidity = "no data"; // bufor
- String buf_devpoint = "no data"; // bufor
- }
- mydht;
- /***************************************************************************************************************/
- /*
- @declaration DAY PL, EN, DE
- */
- /***************************************************************************************************************/
- #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]
- /***************************************************************************************************************/
- /*
- @declaration MONTH PL, EN, DE
- */
- /***************************************************************************************************************/
- #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 };
- /***************************************************************************************************************/
- /*
- @definition Task0Callback
- @interval 1 sekunda
- @task morphing clock
- */
- /***************************************************************************************************************/
- void Task0Callback()
- {
- }
- /***************************************************************************************************************/
- /*
- @definition Task1Callback
- */
- /***************************************************************************************************************/
- void Task1Callback()
- {
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK1] Hello from Task1Callback :-)") );
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK1] Uruchomiono Task1Callback :-)") );
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK1] Sie sind in Task1Callback :-)") );
- #endif
- #endif
- #if SERIAL
- Serial.printf_P( PSTR( "\n\n[ESP] [TASK1] [Memory Free] : %u [kB]" ), ESP.getFreeHeap());
- Serial.printf_P( PSTR( "\n[ESP] [TASK1] [CPU frequency] : %u [MHz]" ),ESP.getCpuFreqMHz());
- Serial.printf_P( PSTR( "\n[ESP] [TASK1] [WiFi IP] : " )); Serial.print(WiFi.localIP() );
- #if POLISH
- Serial.printf("\n[ESP] [TASK1] [Local Time] : ");
- Serial.print(String() + timeClient.getStrHours() + ":"
- + timeClient.getStrMinutes() + ":"
- + timeClient.getStrSeconds() + " "
- + DAY[timeClient.WeekDay()-1] + " "
- + timeClient.getDay() + "/"
- + timeClient.getMonth() + "/"
- + timeClient.getYear());
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [TASK1] [Local Time] : ");
- Serial.print(String() + timeClient.getStrHours() + ":"
- + timeClient.getStrMinutes() + ":"
- + timeClient.getStrSeconds() + " "
- + DAY[timeClient.WeekDay()-1] + " "
- + timeClient.getDay() + "/"
- + timeClient.getMonth() + "/"
- + timeClient.getYear());
- #endif
- #if GERMANY
- Serial.printf("\n[ESP] [TASK1] [Local Time] : ");
- Serial.print(String() + timeClient.getStrHours() + ":"
- + timeClient.getStrMinutes() + ":"
- + timeClient.getStrSeconds() + " "
- + DAY[timeClient.getWeek()-1] + " "
- + timeClient.getDay() + "/"
- + timeClient.getMonth() + "/"
- + timeClient.getYear());
- #endif
- #endif
- }
- /***************************************************************************************************************/
- /*
- @definition Task2Callback
- @interval 1 seconds
- @function update time only
- */
- /***************************************************************************************************************/
- void Task2Callback()
- {
- timeClient.update(); // update time
- if (timeClient.updated())
- {
- F_TimeUpdate = true;
- }
- else
- {
- #if ENGLISH
- Serial.printf_P( PSTR ("\n[ESP] [TASK2] [Time Update] : Wait"));
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\n[ESP] [TASK2] [Time Update] : Czekaj"));
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\n[ESP] [TASK2] [Time Update] : Warten"));
- #endif
- F_TimeUpdate = false;
- }
- }
- /***************************************************************************************************************/
- /*
- @definition Task3Callback
- interval 10 minuts
- */
- /***************************************************************************************************************/
- void Task3Callback()
- {
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK3] Hello from Task3Callback :-)") );
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK3] Uruchomiono Task3Callback :-)") );
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK3] Sie sind in Task3Callback :-)") );
- #endif
- #endif
- if (timeClient.updated())
- {
- /*
- * tworzy sformatowaną datę (format String) w postaci dd/mm/yyyy
- */
- if( timeClient.getDay() < 10 ) MyClock.formated_date = "0" + String(timeClient.getDay()) + "/";
- else MyClock.formated_date = String(timeClient.getDay()) + "/";
- if( timeClient.getMonth() < 10 ) MyClock.formated_date += "0" + String(timeClient.getMonth()) + "/";
- else MyClock.formated_date += String(timeClient.getMonth()) + "/";
- MyClock.formated_date += String(timeClient.getYear());
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\n[ESP] [TASK4] Create Formated Date : %s "), MyClock.formated_date.c_str());
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\n[ESP] [TASK4] Utworzono Sformatowaną Datę :%s "), MyClock.formated_date.c_str());
- #endif
- #endif
- }
- }
- /***************************************************************************************************************/
- /*
- @definition Task4Callback
- @function get & show temperature & humidity
- */
- /***************************************************************************************************************/
- void Task4Callback()
- {
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK4] Hello from Task4Callback :-)") );
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK4] Uruchomiono Task4Callback :-)") );
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\n\n[ESP] [TASK4] Sie sind in Task4Callback :-)") );
- #endif
- #endif
- int chk = DHT11.read();
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\nRead DHT11 sensor : ") );
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\nOdczyt z sensora DHT11 : ") );
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\nSensorwert DHT11 : ") );
- #endif
- #endif
- #if SERIAL
- switch (chk)
- {
- case 0:
- Serial.printf_P( PSTR ("OK") );
- break;
- case -1:
- #if ENGLISH
- Serial.printf_P( PSTR ("Checksum error") ); break;
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("Błąd sumy kontrolnej") ); break;
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("Prüfsummenfehler") ); break;
- #endif
- case -2:
- #if ENGLISH
- Serial.printf_P( PSTR ("Time out error") ); break;
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("Błąd przekroczenia limitu czasu") ); break;
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("Zeitüberschreitungsfehler") ); break;
- #endif
- default:
- #if ENGLISH
- Serial.printf_P( PSTR ("Unknown error") ); break;
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("Nieznany błąd") ); break;
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("Unbekannter Fehler") ); break;
- #endif
- } // end switch
- #endif
- /*
- * copy DHT11 temperature, humidity, devPoint to data in structure mydht
- * kopiowanie DHT 11 temperatura, wilgotność, punkt zerowy do danych w strukturze mydht
- */
- mydht.inside_temperature = (float)DHT11.temperature;
- mydht.inside_humidity = DHT11.humidity;
- mydht.inside_devpoint = (float)DHT11.dewPoint();
- /*
- * jeśli włączony SERIAL wydrukuj odczyty na terminalu SERIAL
- * if SERIAL is TRUE print sensor-read on terminal SERIAL
- */
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\nINSIDE Temperature : %0.1f °C"), mydht.inside_temperature );
- Serial.printf_P( PSTR ("\nINSIDE Humidity : %d %%"), mydht.inside_humidity );
- Serial.printf_P( PSTR ("\nINSIDE DevPoint : %0.1f °C"), mydht.inside_devpoint );
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\nWEWNĄTRZ Temperatura : %0.1f °C"), mydht.inside_temperature );
- Serial.printf_P( PSTR ("\nWEWNĄTRZ Wilgotność : %d %%"), mydht.inside_humidity );
- Serial.printf_P( PSTR ("\nWEWNĄTRZ Punkt ZERO : %0.1f °C"), mydht.inside_devpoint );
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\nInnen temperatur : %0.1f °C"), mydht.inside_temperature );
- Serial.printf_P( PSTR ("\ninnere Feuchtigkeit : %d %%"), mydht.inside_humidity );
- Serial.printf_P( PSTR ("\ninnerhalb des Entwicklungspunktes : %0.1f °C"), mydht.inside_devpoint );
- #endif
- #endif
- /*
- * konwersja float (temperature) do char[20] buffer
- * rzutowanie typów char[20] buffer do String -> mydht.buf_temperature
- */
- snprintf(mydht.temp_char_buffer, sizeof mydht.temp_char_buffer, "%0.1fC", mydht.inside_temperature);
- mydht.buf_temperature = "Temp:" + String(mydht.temp_char_buffer);
- #if DEBUG
- Serial.printf_P( PSTR ("\n[DEBUG] Zawartość zmiennej ---> mydht.temp_char_buffer : %s"), mydht.temp_char_buffer);
- Serial.printf_P( PSTR ("\n[DEBUG] Zawartość zmiennej ---> mydht.buf_temperature : %s"), mydht.buf_temperature);
- #endif
- /*
- * konwersja float (humidity) do char[20] buffer
- * rzutowanie typów char[20] buffer do String -> mydht.buf_temperature
- */
- snprintf(mydht.temp_char_buffer, sizeof mydht.temp_char_buffer, "%d%%", mydht.inside_humidity);
- mydht.buf_humidity = "Humi:" + String(mydht.temp_char_buffer);
- #if DEBUG
- Serial.printf_P( PSTR ("\n[DEBUG] Zawartość zmiennej ---> mydht.temp_char_buffer : %s"), mydht.temp_char_buffer);
- Serial.printf_P( PSTR ("\n[DEBUG] Zawartość zmiennej ---> mydht.buf_humidity : %s"), mydht.buf_humidity);
- #endif
- /*
- * konwersja float (humidity) do char[20] buffer
- * rzutowanie typów char[20] buffer do String -> mydht.buf_temperature
- */
- snprintf(mydht.temp_char_buffer, sizeof mydht.temp_char_buffer, "%0.1fC", mydht.inside_devpoint);
- mydht.buf_devpoint = "DevP:" + String(mydht.temp_char_buffer);
- #if DEBUG
- Serial.printf_P( PSTR ("\n[DEBUG] Zawartość zmiennej ---> mydht.temp_char_buffer : %s"), mydht.temp_char_buffer);
- Serial.printf_P( PSTR ("\n[DEBUG] Zawartość zmiennej ---> buf_devpoint : %s"), mydht.buf_devpoint);
- #endif
- }
- /***************************************************************************************************************/
- /*
- @definition statWiFi()
- */
- /***************************************************************************************************************/
- void statWiFi()
- {
- switch (WiFi.status())
- {
- case WL_NO_SSID_AVAIL:
- #if SERIAL
- #if ENGLISH
- Serial.printf_P ( PSTR ("\nConfigured SSID cannot be reached"));
- #endif
- #if POLISH
- Serial.printf_P ( PSTR ("\nNie można osiągnąć skonfigurowanego identyfikatora SSID"));
- #endif
- #if GERMANY
- Serial.printf_P ( PSTR ("\nKonfigurierte SSID ist nicht erreichbar"));
- #endif
- #endif
- break;
- case WL_CONNECTED:
- #if SERIAL
- #if ENGLISH
- Serial.printf_P ( PSTR ("\nConnection successfully established"));
- Serial.printf_P ( PSTR ("\nYour IP : %s"), WiFi.localIP().toString().c_str());
- Serial.printf_P ( PSTR ("\nReceived Signal Strength Indication : %d"), WiFi.RSSI());
- #endif
- #if POLISH
- Serial.printf_P ( PSTR ("\nPomyślnie nawiązano połączenie"));
- Serial.printf_P ( PSTR ("\nTwój adres IP : %s"), WiFi.localIP().toString().c_str());
- Serial.printf_P ( PSTR ("\nWskazanie siły odbieranego sygnału : %d"), WiFi.RSSI());
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\nVerbindung erfolgreich hergestellt"));
- Serial.printf_P( PSTR ("\nDeine IP-Adresse : %s"), WiFi.localIP().toString().c_str());
- Serial.printf_P( PSTR ("\nAnzeige der empfangenen Signalstärke : %d"), WiFi.RSSI());
- #endif
- #endif
- break;
- case WL_CONNECT_FAILED:
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\nConnection failed"));
- #endif
- #if POLISH
- Serial.printf_P( PSTR ("\nPołączenie nieudane"));
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\nVerbindung fehlgeschlagen"));
- #endif
- #endif
- break;
- }
- }
- /***************************************************************************************************************/
- /*
- @definition initWiFi()
- */
- /***************************************************************************************************************/
- void initWiFi()
- {
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ("\nConnecting to WiFi .."));
- #endif
- #if POLISH
- Serial.printf_P( PSTR ( "\nŁącze z siecią WiFi .."));
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ("\nNetzwerkverbindung mit WLAN .."));
- #endif
- #endif
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.printf_P( PSTR( "." ));
- delay(200);
- }
- statWiFi();
- WiFi.setAutoReconnect(true);
- WiFi.persistent(true);
- }
- /***************************************************************************************************************/
- /*
- @definition reconectWifi()
- */
- /***************************************************************************************************************/
- void reconectWifi()
- {
- unsigned long currentMillis = millis();
- if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval))
- {
- #if SERIAL
- #if ENGLISH
- Serial.printf_P( PSTR ( "\nReconnecting to WiFi..."));
- #endif
- #if POLISH
- Serial.printf_P( PSTR ( "\nPonowne łączenie z Wi-Fi..."));
- #endif
- #if GERMANY
- Serial.printf_P( PSTR ( "\nErneut mit WLAN verbinden..."));
- #endif
- #endif
- WiFi.disconnect();
- WiFi.begin(ssid, password);
- statWiFi();
- previousMillis = currentMillis;
- }
- }
- /***************************************************************************************************************/
- /*
- @definition SerialTypeWriter
- */
- /***************************************************************************************************************/
- void SerialTypeWriter(const String & message, unsigned int wait)
- {
- for(const char c : message)
- {
- Serial.print(c);
- delay(wait);
- }
- }
- /***************************************************************************************************************/
- /*
- @definition MorphingClock
- */
- /***************************************************************************************************************/
- void MorphingClock()
- {
- unsigned long epoch = timeClient.getEpochTime();
- static int color_int = 1;
- if (epoch != prevEpoch)
- {
- int hh = timeClient.getHours();
- int mm = timeClient.getMinutes();
- int ss = timeClient.getSeconds();
- if (prevEpoch == 0)
- {
- digit0.Draw(ss % 10);
- digit1.Draw(ss / 10);
- digit2.Draw(mm % 10);
- digit3.Draw(mm / 10);
- digit4.Draw(hh % 10);
- digit5.Draw(hh / 10);
- display.setTextColor(myCYAN);
- display.setCursor(2,0);
- display.print(MyClock.formated_date.c_str());
- display.setCursor(2,25);
- display.print(mydht.buf_temperature.c_str());
- }
- else
- {
- if (ss!=prevss)
- {
- int s0 = ss % 10;
- int s1 = ss / 10;
- if (s0!=digit0.Value()) digit0.Morph(s0);
- if (s1!=digit1.Value()) digit1.Morph(s1);
- prevss = ss;
- uint16_t myB;
- if (color_int)
- {
- color_int=0;
- myB = myBlue0;
- }
- else
- {
- color_int=1;
- myB = myBLACK;
- }
- display.drawPixel(20,13,myB);
- display.drawPixel(21,13,myB);
- display.drawPixel(20,14,myB);
- display.drawPixel(21,14,myB);
- display.drawPixel(20,18,myB);
- display.drawPixel(21,18,myB);
- display.drawPixel(20,19,myB);
- display.drawPixel(21,19,myB);
- display.drawPixel(41,13,myB);
- display.drawPixel(42,13,myB);
- display.drawPixel(41,14,myB);
- display.drawPixel(42,14,myB);
- display.drawPixel(41,18,myB);
- display.drawPixel(42,18,myB);
- display.drawPixel(41,19,myB);
- display.drawPixel(42,19,myB);
- }
- if (mm!=prevmm)
- {
- int m0 = mm % 10;
- int m1 = mm / 10;
- if (m0!=digit2.Value()) digit2.Morph(m0);
- if (m1!=digit3.Value()) digit3.Morph(m1);
- display.setTextColor(myCYAN);
- display.setCursor(2,0);
- display.print(MyClock.formated_date.c_str());
- display.setCursor(2,25);
- display.print(mydht.buf_temperature.c_str());
- prevmm = mm;
- }
- if (hh!=prevhh)
- {
- int h0 = hh % 10;
- int h1 = hh / 10;
- if (h0!=digit4.Value()) digit4.Morph(h0);
- if (h1!=digit5.Value()) digit5.Morph(h1);
- prevhh = hh;
- }
- }
- prevEpoch = epoch;
- }
- }
- /***************************************************************************************************************/
- /*
- @definition ShowInfo
- */
- /***************************************************************************************************************/
- void ShowInfo()
- {
- Serial.printf_P( PSTR ("\n+-------------------------------------------------------------+"));
- Serial.printf_P( PSTR ("\n| Morphing Clock v1.6 beta by Tomasz Majcher |" ));
- Serial.printf_P( PSTR ("\n| support : ESP8266 + PxMatrix + DHT11 |" ));
- Serial.printf_P( PSTR ("\n| |" ));
- Serial.printf_P( PSTR ("\n+-------------------------------------------------------------+\n"));
- }
- /***************************************************************************************************************/
- /*
- @definition setup
- */
- /***************************************************************************************************************/
- void setup()
- {
- delay(300);
- #if SERIAL
- Serial.begin(SerialSpeed);
- ShowInfo();
- #endif
- DHT11.attach(DHT_PIN); // DHT11 sensor start
- initWiFi(); // start Wi-Fi
- timeClient.begin();
- 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
- runner.addTask(task_3); // dodaj zadanie do scheluder
- task_3.enable(); // włącz zadanie do scheluder
- runner.addTask(task_4); // dodaj zadanie do scheluder
- task_4.enable(); // włącz zadanie do scheluder
- // --- WYWOŁAJ TERAZ --------------------- //
- Task1Callback();
- Task2Callback();
- Task3Callback();
- Task4Callback();
- Task4Callback();
- Task4Callback();
- display.begin(16);
- display_update_enable(true);
- display.fillScreen(display.color565(0, 0, 0));
- }
- /***************************************************************************************************************/
- /*
- @main loop program
- */
- /***************************************************************************************************************/
- void loop()
- {
- runner.execute(); // scheluder init
- reconectWifi(); // check Wi-Fi status
- MorphingClock();
- }
- /***************************************************************************************************************/
- /*
- @definition Digit Class
- */
- /***************************************************************************************************************/
- Digit::Digit(PxMATRIX* d, byte value, uint16_t xo, uint16_t yo, uint16_t color)
- {
- _display = d;
- _value = value;
- xOffset = xo;
- yOffset = yo;
- _color = color;
- }
- byte Digit::Value()
- {
- return _value;
- }
- void Digit::drawPixel(uint16_t x, uint16_t y, uint16_t c)
- {
- _display->drawPixel(xOffset + x, height - (y + yOffset), c);
- }
- void Digit::drawLine(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint16_t c)
- {
- _display->drawLine(xOffset + x, height - (y + yOffset), xOffset + x2, height - (y2 + yOffset), c);
- }
- void Digit::drawFillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t c)
- {
- _display->fillRect(xOffset + x, height - (y + yOffset), w,h, c);
- }
- void Digit::DrawColon(uint16_t c)
- {
- drawFillRect(-3, segHeight-1, 2,2, c);
- drawFillRect(-3, segHeight+1+3, 2,2, c);
- }
- void Digit::drawSeg(byte seg)
- {
- switch (seg)
- {
- case sA: drawLine(1, segHeight * 2 + 2, segWidth, segHeight * 2 + 2, _color); break;
- case sB: drawLine(segWidth + 1, segHeight * 2 + 1, segWidth + 1, segHeight + 2, _color); break;
- case sC: drawLine(segWidth + 1, 1, segWidth + 1, segHeight, _color); break;
- case sD: drawLine(1, 0, segWidth, 0, _color); break;
- case sE: drawLine(0, 1, 0, segHeight, _color); break;
- case sF: drawLine(0, segHeight * 2 + 1, 0, segHeight + 2, _color); break;
- case sG: drawLine(1, segHeight + 1, segWidth, segHeight + 1, _color); break;
- }
- }
- void Digit::Draw(byte value)
- {
- byte pattern = digitBits[value];
- if (bitRead(pattern, 7)) drawSeg(sA);
- if (bitRead(pattern, 6)) drawSeg(sB);
- if (bitRead(pattern, 5)) drawSeg(sC);
- if (bitRead(pattern, 4)) drawSeg(sD);
- if (bitRead(pattern, 3)) drawSeg(sE);
- if (bitRead(pattern, 2)) drawSeg(sF);
- if (bitRead(pattern, 1)) drawSeg(sG);
- _value = value;
- }
- void Digit::Morph2()
- {
- for (int i = 0; i <= segWidth; i++)
- {
- if (i < segWidth)
- {
- drawPixel(segWidth - i, segHeight * 2 + 2, _color);
- drawPixel(segWidth - i, segHeight + 1, _color);
- drawPixel(segWidth - i, 0, _color);
- }
- drawLine(segWidth + 1 - i, 1, segWidth + 1 - i, segHeight, black);
- drawLine(segWidth - i, 1, segWidth - i, segHeight, _color);
- delay(animSpeed);
- }
- }
- void Digit::Morph3()
- {
- for (int i = 0; i <= segWidth; i++)
- {
- drawLine(0 + i, 1, 0 + i, segHeight, black);
- drawLine(1 + i, 1, 1 + i, segHeight, _color);
- delay(animSpeed);
- }
- }
- void Digit::Morph4()
- {
- for (int i = 0; i < segWidth; i++)
- {
- drawPixel(segWidth - i, segHeight * 2 + 2, black); // Erase A
- drawPixel(0, segHeight * 2 + 1 - i, _color); // Draw as F
- drawPixel(1 + i, 0, black); // Erase D
- delay(animSpeed);
- }
- }
- void Digit::Morph5()
- {
- for (int i = 0; i < segWidth; i++)
- {
- drawPixel(segWidth + 1, segHeight + 2 + i, black); // Erase B
- drawPixel(segWidth - i, segHeight * 2 + 2, _color); // Draw as A
- drawPixel(segWidth - i, 0, _color); // Draw D
- delay(animSpeed);
- }
- }
- void Digit::Morph6()
- {
- for (int i = 0; i <= segWidth; i++)
- {
- drawLine(segWidth - i, 1, segWidth - i, segHeight, _color);
- if (i > 0) drawLine(segWidth - i + 1, 1, segWidth - i + 1, segHeight, black);
- delay(animSpeed);
- }
- }
- void Digit::Morph7()
- {
- for (int i = 0; i <= (segWidth + 1); i++)
- {
- drawLine(0 + i - 1, 1, 0 + i - 1, segHeight, black);
- drawLine(0 + i, 1, 0 + i, segHeight, _color);
- drawLine(0 + i - 1, segHeight * 2 + 1, 0 + i - 1, segHeight + 2, black);
- drawLine(0 + i, segHeight * 2 + 1, 0 + i, segHeight + 2, _color);
- drawPixel(1 + i, 0, black); // D
- drawPixel(1 + i, segHeight + 1, black); // G
- delay(animSpeed);
- }
- }
- void Digit::Morph8()
- {
- for (int i = 0; i <= segWidth; i++)
- {
- drawLine(segWidth - i, segHeight * 2 + 1, segWidth - i, segHeight + 2, _color);
- if (i > 0) drawLine(segWidth - i + 1, segHeight * 2 + 1, segWidth - i + 1, segHeight + 2, black);
- drawLine(segWidth - i, 1, segWidth - i, segHeight, _color);
- if (i > 0) drawLine(segWidth - i + 1, 1, segWidth - i + 1, segHeight, black);
- if (i < segWidth)
- {
- drawPixel(segWidth - i, 0, _color); // D
- drawPixel(segWidth - i, segHeight + 1, _color); // G
- }
- delay(animSpeed);
- }
- }
- void Digit::Morph9()
- {
- for (int i = 0; i <= (segWidth + 1); i++)
- {
- drawLine(0 + i - 1, 1, 0 + i - 1, segHeight, black);
- drawLine(0 + i, 1, 0 + i, segHeight, _color);
- delay(animSpeed);
- }
- }
- void Digit::Morph0()
- {
- for (int i = 0; i <= segWidth; i++)
- {
- if (_value==1)
- {
- drawLine(segWidth - i, segHeight * 2+1 , segWidth - i, segHeight + 2, _color);
- if (i > 0) drawLine(segWidth - i + 1, segHeight * 2+1, segWidth - i + 1, segHeight + 2, black);
- drawLine(segWidth - i, 1, segWidth - i, segHeight, _color);
- if (i > 0) drawLine(segWidth - i + 1, 1, segWidth - i + 1, segHeight, black);
- if (i<segWidth) drawPixel(segWidth - i, segHeight * 2 + 2 , _color); // Draw A
- if (i<segWidth) drawPixel(segWidth - i, 0, _color); // Draw D
- }
- if (_value==2)
- {
- drawLine(segWidth - i, segHeight * 2+1 , segWidth - i, segHeight + 2, _color);
- if (i > 0) drawLine(segWidth - i + 1, segHeight * 2+1, segWidth - i + 1, segHeight + 2, black);
- drawPixel(1+i, segHeight + 1, black); // Erase G left to right
- if (i<segWidth) drawPixel(segWidth + 1, segHeight + 1- i, _color);// Draw C
- }
- if (_value==3)
- {
- drawLine(segWidth - i, segHeight * 2+1 , segWidth - i, segHeight + 2, _color);
- if (i > 0) drawLine(segWidth - i + 1, segHeight * 2+1, segWidth - i + 1, segHeight + 2, black);
- drawLine(segWidth - i, 1, segWidth - i, segHeight, _color);
- if (i > 0) drawLine(segWidth - i + 1, 1, segWidth - i + 1, segHeight, black);
- drawPixel(segWidth - i, segHeight + 1, black); // G
- }
- if (_value==5)
- {
- if (i<segWidth)
- {
- if (i>0) drawLine(1 + i, segHeight * 2 + 1, 1 + i, segHeight + 2, black);
- drawLine(2 + i, segHeight * 2 + 1, 2 + i, segHeight + 2, _color);
- }
- }
- if (_value==5 || _value==9)
- {
- if (i<segWidth) drawPixel(segWidth - i, segHeight + 1, black);
- if (i<segWidth) drawPixel(0, segHeight - i, _color);
- }
- delay(animSpeed);
- }
- }
- void Digit::Morph1()
- {
- for (int i = 0; i <= (segWidth + 1); i++)
- {
- drawLine(0 + i - 1, 1, 0 + i - 1, segHeight, black);
- drawLine(0 + i, 1, 0 + i, segHeight, _color);
- drawLine(0 + i - 1, segHeight * 2 + 1, 0 + i - 1, segHeight + 2, black);
- drawLine(0 + i, segHeight * 2 + 1, 0 + i, segHeight + 2, _color);
- drawPixel(1 + i, segHeight * 2 + 2, black); // A
- drawPixel(1 + i, 0, black); // D
- drawPixel(1 + i, segHeight + 1, black); // G
- delay(animSpeed);
- }
- }
- void Digit::Morph(byte newValue)
- {
- switch (newValue)
- {
- case 2: Morph2(); break;
- case 3: Morph3(); break;
- case 4: Morph4(); break;
- case 5: Morph5(); break;
- case 6: Morph6(); break;
- case 7: Morph7(); break;
- case 8: Morph8(); break;
- case 9: Morph9(); break;
- case 0: Morph0(); break;
- case 1: Morph1(); break;
- }
- _value = newValue;
- }
Advertisement
Add Comment
Please, Sign In to add comment