/* Name: küchenuhr.ino Created: 19.07.2018 13:34:14 Author: thomas */ #include <NTPtimeESP.h> #include <WiFiUdp.h> #include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" #include <WiFi.h> #define _cs 4 #define _dc 2 // 4 goes to TFT DC #define _mosi 14 // 5 goes to TFT MOSI #define _sclk 12 // 6 goes to TFT SCK/CLK #define _rst 13 // ESP RST to TFT RESET #define _miso // Not connected // 3.3V // Goes to TFT LED // 5v // Goes to TFT Vcc // Gnd // Goes to TFT Gnd Adafruit_ILI9341 tft = Adafruit_ILI9341(_cs, _dc, _mosi, _sclk, _rst); const char* ssid = "thjansen"; const char* password = "9116805287641001"; float timezone = 1.0; const char Day[7][10] = { "Sontag","Montag","Dienstag","Mittwoch","Donerstag","Freitag","Samstag" }; const char Month[12][6] = { "Jan.","Feb.","Märt","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt","Nov","Dez." }; strDateTime dateTime; #define threshold 35 byte err = 0; byte lastMin = -1; //byte lastSek = -1; //bool state = 0; //int prev = 45; //int mysek = 0; unsigned long previousMillis = 0; unsigned long currentMillis = 0; unsigned long wartedauer = 0; int second = 0; WiFiClient client; NTPtime NTPch("ch.pool.ntp.org"); int threshold1 = 40; bool touch1detected = false; bool touch2detected = false; bool touch3detected = false; void gotTouch1() { touch1detected = true; } void gotTouch2() { touch2detected = true; } void gotTouch3() { touch3detected = true; } void setup() { Serial.begin(9600); touchAttachInterrupt(T9, gotTouch1, threshold1); //g32 touchAttachInterrupt(T8, gotTouch3, threshold1); //g33 touchAttachInterrupt(T3, gotTouch2, threshold1); //g15 Serial.println("ILI9341 Test!"); tft.begin(); tft.setRotation(3); tft.fillScreen(ILI9341_BLACK); WiFi.begin(ssid, password); WiFi.setHostname("Kuechenuhr"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } ReadTime(); } void Ausg_Zeit(void) { lastMin = dateTime.minute; String time; if (dateTime.hour<10) time += '0'; time += String(dateTime.hour) + ':'; if (dateTime.minute < 10) { time += '0'; } time += String(dateTime.minute); //tft.fillRect(0, 0, 200, 70, ILI9341_BLACK); tft.setCursor(0, 0); tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK); tft.setTextSize(3); tft.println(time); } void Ausg_Sek(void) { String time; time += ':'; if (second<10) time += '0'; time += String(second); // +':'; tft.setCursor(93, 0); tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK); tft.setTextSize(3); tft.println(time); } void Ausg_Datum(void) { String date; if (dateTime.day < 10) date += '0'; date += dateTime.day; date += ' '; date += Month[dateTime.month - 1]; date += ' '; date += dateTime.year; tft.setCursor(0, 40); tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK); tft.setTextSize(3); tft.println(date); } void ReadTime(void) { retry: dateTime = NTPch.getNTPtime(timezone, 1); Serial.println("Lese Zeit"); if (!dateTime.valid) goto retry; } void TimeLine(void) { currentMillis = millis(); if (currentMillis - previousMillis > 1000) { previousMillis = currentMillis; //int n = wartedauer * (0.166); //(60000 * 12 Minuten)/120Pixel / 5 1Minute *10 //tft.drawFastVLine(230, 5, n, ILI9341_YELLOW); /*wartedauer = 0; tft.drawFastVLine(1, 5, 128, BLACK);*/ // die Sekundenleiste tft.drawFastVLine(305, 0, (second * 4) + 1, ILI9341_BLUE); tft.drawFastVLine(306, 0, (second * 4) + 1, ILI9341_BLUE); second++; //wartedauer = wartedauer + 1; } if (second == 60) { tft.drawFastVLine(305, 0, 240, ILI9341_BLACK); second = 0; tft.drawFastVLine(306, 0, 240, ILI9341_BLACK); } } void loop(void) { ReadTime(); if (dateTime.valid == 0) { err++; if (err > 1500) { tft.fillScreen(ILI9341_BLACK); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2); tft.println("Could not get\ndate and time,\nreset router"); //ESP.deepSleep(1000000 * 60 * 24 * 10); } return; } if (dateTime.valid&&dateTime.minute != lastMin) { err = 0; second = 0; tft.drawFastVLine(305, 0, 240, ILI9341_BLACK); tft.drawFastVLine(306, 0, 240, ILI9341_BLACK); Ausg_Zeit(); Ausg_Datum(); } uint64_t started_at = millis(); for (int i = started_at; i<started_at + 1000 * (60 - dateTime.second); i = millis()) { if (touch1detected) { touch1detected = false; Serial.println("Touch 1 detected"); tft.setCursor(0, 100); tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK); tft.setTextSize(3); tft.println("Touch 1"); } if (touch2detected) { touch2detected = false; Serial.println("Touch 2 detected"); tft.setCursor(0, 100); tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK); tft.setTextSize(3); tft.println("Touch 2"); } if (touch3detected) { touch3detected = false; Serial.println("Touch 3 detected"); tft.fillRect(0, 100, 130, 120, ILI9341_BLACK); } TimeLine(); //tft.println(second); tft.print(" "); Ausg_Sek(); } } unsigned long testText() { tft.fillScreen(ILI9341_BLACK); tft.setCursor(0, 0); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); tft.println(1234.56); tft.setTextColor(ILI9341_RED); tft.setTextSize(3); tft.println(0xDEADBEEF, HEX); tft.println(); tft.setTextColor(ILI9341_GREEN); tft.setTextSize(5); tft.println("Groop"); tft.println(tft.getRotation()); tft.setTextSize(2); tft.println(WiFi.getHostname()); tft.setTextSize(1); tft.println("my foonting turlingdromes."); tft.setTextSize(2); tft.println(WiFi.localIP()); //tft.drawFastVLine(tft.width()/2, tft.height()/2, 100, ILI9341_GREEN); tft.print(dateTime.hour); tft.print("\t"); tft.print(dateTime.minute); tft.print(dateTime.second); }