240×240 Pixel
#ifdef ESP8266
#include "ESP8266WiFi.h"
#else
#include "WiFi.h"
#endif
#include "time.h"
#include "Adafruit_GC9A01A.h"
// Adafruit-Schriftart einbinden
#include "Fonts/FreeSans12pt7b.h"
// XIAO
// #define TFT_CS D7
// #define TFT_RST D1
// #define TFT_DC D2
// Arduino Nano ESP 32
// #define TFT_CS 10
// #define TFT_RST 9
// #define TFT_DC 8
// SPI-Pins ESP32-C6
// #define TFT_CS 18
// #define TFT_RST 3
// #define TFT_DC 2
// ESP32-WROOM
// #define TFT_CS 5
// #define TFT_RST 4
// #define TFT_DC 2
// Wemos D1 Mini/NodeMCU
// #define TFT_CS D8
// #define TFT_RST D1
// #define TFT_DC D2
Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
// WiFi-Daten
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// Variablen des TFTs (Höhe, Breite, Radius)
const int MitteHoehe = tft.height() / 2;
const int MitteBreite = tft.width() / 2;
const int Radius = tft.width() / 2;
// Multiplikatoren für x- y-Positionen der Stunden, Minuten und Sekunden
float SekundePosX = 0, SekundePosY = 0, MinutePosX = 0, MinutePosY = 0, StundePosX = 0, StundePosY = 0;
float GradSekunden = 0, GradMinuten = 0, GradStunden = 0;
// x- y-Koordinaten für die Anzeige Stunden, Minuten und Sekunden
int SekundenZeigerX = MitteHoehe, SekundenZeigerY = MitteHoehe;
int MinutenZeigerX = MitteHoehe, MinutenZeigerY = MitteHoehe;
int StundenZeigerX = MitteHoehe, StundenZeigerY = MitteHoehe;
// Start wird nur beim ersten Start für den Aufbau des TFTs benötigt
bool Start = 1;
// Variable für die Kontrolle des Zeittaktes von 1 Sekunde
int ZeitTakt = 0;
// Variablen für die Markierungen und Punkte und Striche des Ziffernblatts
float PosX, PosY;
int PunktX, PunktY, PunktX1, PunktX2, PunktY1, PunktY2;
// Variablen für die Zeit
int Stunden, Minuten, Sekunden;
// Farben
#define SCHWARZ 0x0000
#define WEISS 0xFFFF
#define BLAU 0x001F
#define ROT 0xF800
#define GRUEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define GELB 0xFFE0
#define BRAUN 0x9A60
#define GRAU 0x7BEF
#define GRUENGELB 0xB7E0
#define DUNKELCYAN 0x03EF
#define ORANGE 0xFDA0
#define PINK 0xFE19
#define BORDEAUX 0xA000
#define HELLBLAU 0x867D
#define VIOLETT 0x915C
#define SILBER 0xC618
#define GOLD 0xFEA0
// Farben innerer Kreis und Zeigerfarbe
// die Farben der Zeiger können aber auch individuell gesetzt werden
const int Kreisfarbe = SCHWARZ;
const int Zeigerfarbe = WEISS;
const int Randfarbe = BORDEAUX;
// true -> Datum anzeigen
// false -> Datum nicht anzeigen
bool DatumAnzeigen = true;
// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European SuMinutener Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = SoMinutenerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;
void setup()
{
Serial.begin(9600);
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
// WiFi starten
WiFi.begin(Router, Passwort);
Serial.println("------------------------");
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP über DHCP: ");
Serial.println(WiFi.localIP());
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Zeit in Stunden, Minuten und Sekunden
Stunden = Zeit.tm_hour, Minuten = Zeit.tm_min, Sekunden = Zeit.tm_sec;
tft.begin();
tft.setRotation(0);
tft.fillScreen(Kreisfarbe);
// 4 Pixel breiter äußerer Rand, Farbe au der Farbpalette wählen
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 1, Randfarbe);
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 2, Randfarbe);
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 3, Randfarbe);
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 4, Randfarbe);
// innere Fläche bis auf den Rand von 4 Pixeln vollständig löschen
// wenn andere Farbe als äußerer Rand gewählt wird ergibt sich ein schmaler Rand
tft.fillCircle(MitteHoehe, MitteBreite, Radius - 4, Kreisfarbe);
/*
alle 30° Linie am Rand als Stundenmarkierung zeichnen
DEG_TO_RAD (=0.0174532925) -> Winkel in Bogenmaß umrechnen
90 = PI/4 (Viertelkreis)
sin/cos sorgen dafür, dass die Punkte auf der Kreislinie liegen
*/
for (int i = 0; i < 360; i += 30)
{
PosX = cos((i - 90) * DEG_TO_RAD);
PosY = sin((i - 90) * DEG_TO_RAD);
// kurze Linien zeichnen, von 114 bis 100 vom äußeren Rand aus
// Farbe individuell wählbar
int PunktX1 = PosX * 110 + Radius;
int PunktY1 = PosY * 110 + Radius;
int PunktX2 = PosX * 100 + Radius;
int PunktY2 = PosY * 100 + Radius;
// keine Striche an der Position der Zahlen
if (PunktX1 == 10 || PunktX1 == 120 || PunktX1 == 230)
{
tft.drawLine(PunktX1, PunktY1, PunktX2, PunktY2, Kreisfarbe);
}
else tft.drawLine(PunktX1, PunktY1, PunktX2, PunktY2, Zeigerfarbe);
}
/*
alle 6 Grad Punkte als Sekundenmarkierung zeichnen
DEG_TO_RAD -> Grad in Bogenmaß umrechnen (0.0174532925)
90 -> Viertelkreis (PI/4)
sin/cos sorgen dafür, dass die Punkte auf der Kreislinie liegen
*/
for (int i = 0; i < 360; i += 6)
{
PosX = cos((i - 90) * DEG_TO_RAD);
PosY = sin((i - 90) * DEG_TO_RAD);
// Positionen der Punkte
// 108 -> Abstand vom Mittelpunkt
PunktX = PosX * 108 + Radius;
PunktY = PosY * 108 + Radius;
tft.drawPixel(PunktX, PunktY, Zeigerfarbe);
}
// Markierung 12 3 6 9
tft.setFont(&FreeSans12pt7b);
tft.setTextColor(Zeigerfarbe);
tft.setCursor(tft.height() / 2 - 15, 25);
tft.print("12");
tft.setCursor(10, tft.height() / 2 + 7);
tft.print("9");
tft.setCursor(220, tft.height() / 2 + 10);
tft.print("3");
tft.setCursor(tft.height() / 2 - 7, 230);
tft.print("6");
if (DatumAnzeigen)
{
tft.setFont(&FreeSans12pt7b);
tft.setCursor(65, 180);
tft.setTextColor(GRUEN);
// Bildschirmbereich für das Datum löschen
tft.fillRect(60, 160, 125, 25, Kreisfarbe);
if (Zeit.tm_mday < 10) tft.print("0");
tft.print(Zeit.tm_mday);
tft.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 9) tft.print("0");
// Zählung beginnt mit 0 -> +1
tft.print(Zeit.tm_mon + 1);
tft.print(".");
// Anzahl Jahre seit 1900
tft.print(Zeit.tm_year + 1900);
}
}
void loop()
{
// Zeit weiter zählen
if (ZeitTakt < millis())
{
ZeitTakt += 1000;
Sekunden++;
if (Sekunden == 60)
{
Sekunden = 0;
Minuten++;
// Zeit jede Minute mit Zeitserver synchronisieren
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Zeit in Stunden, Minuten und Sekunden
Stunden = int(Zeit.tm_hour), Minuten = int(Zeit.tm_min), Sekunden = int(Zeit.tm_sec);
if (Minuten > 59)
{
Minuten = 0;
Stunden++;
if (Stunden > 11)
{
Stunden = 0;
}
}
}
// Datum anzeigen/nicht anzeigen
if (DatumAnzeigen)
{
// Anzeige des Datums nur aktualisieren,
// wenn sich der Sekundenzeiger darüber befindet
if (Sekunden > 20 & Sekunden < 40)
{
tft.setFont(&FreeSans12pt7b);
tft.setCursor(65, 180);
tft.setTextColor(GRUEN);
// Bildschirmbereich für das Datum löschen
tft.fillRect(60, 160, 125, 25, Kreisfarbe);
if (Zeit.tm_mday < 10) tft.print("0");
tft.print(Zeit.tm_mday);
tft.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 9) tft.print("0");
// Zählung beginnt mit 0 -> +1
tft.print(Zeit.tm_mon + 1);
tft.print(".");
// Anzahl Jahre seit 1900
tft.print(Zeit.tm_year + 1900);
}
}
// Vorausberechnung der x- und y-Koordinaten
// 0-59 -> 0-354 = Faktor 6
GradSekunden = Sekunden * 6;
// Minuten+Sekunden in Relation zu 3600 setzen
// 60 / 3600 = 0.01666667
GradMinuten = Minuten * 6 + GradSekunden * 0.01666667;
// 30 / 3600 = 0.0833333
// Stunden+Minuten in Relation zu 360 setzen
// 0-11 -> 0-360
GradStunden = Stunden * 30 + GradMinuten * 0.0833333; // 0-11 -> 0-360
StundePosX = cos((GradStunden - 90) * DEG_TO_RAD);
StundePosY = sin((GradStunden - 90) * DEG_TO_RAD);
MinutePosX = cos((GradMinuten - 90) * DEG_TO_RAD) ;
MinutePosY = sin((GradMinuten - 90) * DEG_TO_RAD);
SekundePosX = cos((GradSekunden - 90) * DEG_TO_RAD);
SekundePosY = sin((GradSekunden - 90) * DEG_TO_RAD);
// nach jeder Minute Minuten-/Stundenzeiger löschen
// oder einmalig beim Start der Anzeige
if (Sekunden == 0 || Start)
{
Start = 0;
tft.drawLine(StundenZeigerX, StundenZeigerY, MitteHoehe, MitteHoehe + 1, Kreisfarbe);
// 62 Pixel -> Länge des Stundenzeigers
// Mittelpunkt + 1 -> Mittelpunkt soll nicht gelöscht werden
StundenZeigerX = StundePosX * 62 + MitteHoehe + 1;
StundenZeigerY = StundePosY * 62 + MitteHoehe + 1;
tft.drawLine(MinutenZeigerX, MinutenZeigerY, MitteHoehe, MitteHoehe + 1, Kreisfarbe);
// 84 Pixel -> Länge des Minutenzeigers
// Mittelpunkt + 1 -> Mittelpunkt soll nicht gelöscht werden
MinutenZeigerX = MinutePosX * 84 + MitteHoehe;
MinutenZeigerY = MinutePosY * 84 + MitteHoehe + 1;
}
// Sekundenzeiger löschen
tft.drawLine(SekundenZeigerX, SekundenZeigerY, MitteHoehe, MitteHoehe + 1, Kreisfarbe);
// Kreis am Sekundenzeiger löschen, Radius 5
tft.fillCircle(SekundenZeigerX, SekundenZeigerY, 5, Kreisfarbe);
// 85 Pixel -> Länge des Sekundenzeigers
SekundenZeigerX = SekundePosX * 85 + MitteHoehe + 1;
SekundenZeigerY = SekundePosY * 85 + MitteHoehe + 1;
// Zeiger neu zeichnen
// Sekunden
tft.drawLine(SekundenZeigerX, SekundenZeigerY, MitteHoehe, MitteHoehe + 1, ROT);
// Minuten
tft.drawLine(MinutenZeigerX, MinutenZeigerY, MitteHoehe, MitteHoehe + 1, Zeigerfarbe);
// Stunden
tft.drawLine(StundenZeigerX, StundenZeigerY, MitteHoehe, MitteHoehe + 1, Zeigerfarbe);
// Kreis an der Spitze des Sekundenzeigers, Radius 5
tft.fillCircle(SekundenZeigerX, SekundenZeigerY, 5, ROT);
// Mittelpunkt zeichnen
tft.fillCircle(MitteHoehe, MitteHoehe + 1, 3, Zeigerfarbe);
}
}
320×240 Pixel
Benötigte Bibliothek

#ifdef ESP8266
#include "ESP8266WiFi.h"
#else
#include "WiFi.h"
#endif
#include "time.h"
#include "Adafruit_ILI9341.h"
// Adafruit-Schriftart einbinden
#include "Fonts/FreeSans12pt7b.h"
// XIAO
// #define TFT_CS D7
// #define TFT_RST D1
// #define TFT_DC D2
// Arduino Nano ESP 32
// #define TFT_CS 10
// #define TFT_RST 9
// #define TFT_DC 8
// ESP32-C6
// #define TFT_CS 18
// #define TFT_RST 3
// #define TFT_DC 2
// ESP32-WROOM
// #define TFT_CS 5
// #define TFT_RST 4
// #define TFT_DC 2
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// WiFi-Daten
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// Variablen des Ziffernblatts (Höhe, Breite, Radius)
const int MitteHoehe = 120;
const int MitteBreite = 120;
const int Radius = 120;
// Multiplikatoren für x- y-Positionen der Stunden, Minuten und Sekunden
float SekundePosX = 0, SekundePosY = 0, MinutePosX = 0, MinutePosY = 0, StundePosX = 0, StundePosY = 0;
float GradSekunden = 0, GradMinuten = 0, GradStunden = 0;
// x- y-Koordinaten für die Anzeige Stunden, Minuten und Sekunden
int SekundenZeigerX = MitteHoehe, SekundenZeigerY = MitteHoehe;
int MinutenZeigerX = MitteHoehe, MinutenZeigerY = MitteHoehe;
int StundenZeigerX = MitteHoehe, StundenZeigerY = MitteHoehe;
// Start wird nur beim ersten Start für den Aufbau des TFTs benötigt
bool Start = 1;
// Variable für die Kontrolle des Zeittaktes von 1 Sekunde
int ZeitTakt = 0;
// Variablen für die Markierungen und Punkte und Striche des Ziffernblatts
float PosX, PosY;
int PunktX, PunktY, PunktX1, PunktX2, PunktY1, PunktY2;
// Variablen für die Zeit
int Stunden, Minuten, Sekunden;
// Farben
#define SCHWARZ 0x0000
#define WEISS 0xFFFF
#define BLAU 0x001F
#define ROT 0xF800
#define GRUEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define GELB 0xFFE0
#define BRAUN 0x9A60
#define GRAU 0x7BEF
#define GRUENGELB 0xB7E0
#define DUNKELCYAN 0x03EF
#define ORANGE 0xFDA0
#define PINK 0xFE19
#define BORDEAUX 0xA000
#define HELLBLAU 0x867D
#define VIOLETT 0x915C
#define SILBER 0xC618
#define GOLD 0xFEA0
// Farben innerer Kreis und Zeigerfarbe
// die Farben der Zeiger können aber auch individuell gesetzt werden
const int Kreisfarbe = SCHWARZ;
const int Zeigerfarbe = WEISS;
const int Randfarbe = BORDEAUX;
// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European SuMinutener Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = SoMinutenerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;
// true -> Datum anzeigen
// false -> Datum nicht anzeigen
bool DatumAnzeigen = true;
void setup()
{
Serial.begin(9600);
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
// WiFi starten
WiFi.begin(Router, Passwort);
Serial.println("------------------------");
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP über DHCP: ");
Serial.println(WiFi.localIP());
// Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Zeit in Stunden, Minuten und Sekunden
Stunden = Zeit.tm_hour, Minuten = Zeit.tm_min, Sekunden = Zeit.tm_sec;
tft.begin();
tft.setRotation(2);
tft.fillScreen(Kreisfarbe);
// 4 Pixel breiter äußerer Rand, Farbe au der Farbpalette wählen
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 1, Randfarbe);
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 2, Randfarbe);
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 3, Randfarbe);
tft.drawCircle(MitteHoehe, MitteBreite, Radius - 4, Randfarbe);
// innere Fläche bis auf den Rand von 4 Pixeln vollständig löschen
// wenn andere Farbe als äußerer Rand gewählt wird ergibt sich ein schmaler Rand
tft.fillCircle(MitteHoehe, MitteBreite, Radius - 4, Kreisfarbe);
/*
alle 30° Linie am Rand als Stundenmarkierung zeichnen
DEG_TO_RAD (=0.0174532925) -> Winkel in Bogenmaß umrechnen
90 = PI/4 (Viertelkreis)
sin/cos sorgen dafür, dass die Punkte auf der Kreislinie liegen
*/
for (int i = 0; i < 360; i += 30)
{
PosX = cos((i - 90) * DEG_TO_RAD);
PosY = sin((i - 90) * DEG_TO_RAD);
// kurze Linien zeichnen, von 114 bis 100 vom äußeren Rand aus
// Farbe individuell wählbar
int PunktX1 = PosX * 110 + Radius;
int PunktY1 = PosY * 110 + Radius;
int PunktX2 = PosX * 100 + Radius;
int PunktY2 = PosY * 100 + Radius;
// keine Striche an der Position der Zahlen
if (PunktX1 == 10 || PunktX1 == 120 || PunktX1 == 230)
{
tft.drawLine(PunktX1, PunktY1, PunktX2, PunktY2, Kreisfarbe);
}
else tft.drawLine(PunktX1, PunktY1, PunktX2, PunktY2, Zeigerfarbe);
}
/*
alle 6 Grad Punkte als Sekundenmarkierung zeichnen
DEG_TO_RAD -> Grad in Bogenmaß umrechnen (0.0174532925)
90 -> Viertelkreis (PI/4)
sin/cos sorgen dafür, dass die Punkte auf der Kreislinie liegen
*/
for (int i = 0; i < 360; i += 6)
{
PosX = cos((i - 90) * DEG_TO_RAD);
PosY = sin((i - 90) * DEG_TO_RAD);
// Positionen der Punkte
// 108 -> Abstand vom Mittelpunkt
PunktX = PosX * 108 + Radius;
PunktY = PosY * 108 + Radius;
tft.drawPixel(PunktX, PunktY, Zeigerfarbe);
}
// Markierung 12 3 6 9
tft.setFont(&FreeSans12pt7b);
tft.setTextColor(Zeigerfarbe);
tft.setCursor(105, 25);
tft.print("12");
tft.setCursor(10, 127);
tft.print("9");
tft.setCursor(220, 130);
tft.print("3");
tft.setCursor(113, 230);
tft.print("6");
if (DatumAnzeigen)
{
tft.setFont(&FreeSans12pt7b);
tft.setCursor(65, 180);
tft.setTextColor(GRUEN);
// Bildschirmbereich für das Datum löschen
tft.fillRect(60, 160, 125, 25, Kreisfarbe);
if (Zeit.tm_mday < 10) tft.print("0");
tft.print(Zeit.tm_mday);
tft.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 9) tft.print("0");
// Zählung beginnt mit 0 -> +1
tft.print(Zeit.tm_mon + 1);
tft.print(".");
// Anzahl Jahre seit 1900
tft.print(Zeit.tm_year + 1900);
}
}
void loop()
{
// Zeit weiter zählen
if (ZeitTakt < millis())
{
ZeitTakt += 1000;
Sekunden++;
if (Sekunden == 60)
{
Sekunden = 0;
Minuten++;
// Zeit jede Minute mit Zeitserver synchronisieren
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Zeit in Stunden, Minuten und Sekunden
Stunden = int(Zeit.tm_hour), Minuten = int(Zeit.tm_min), Sekunden = int(Zeit.tm_sec);
if (Minuten > 59)
{
Minuten = 0;
Stunden++;
if (Stunden > 11)
{
Stunden = 0;
}
}
}
// Datum anzeigen/nicht anzeigen
if (DatumAnzeigen)
{
// Anzeige des Datums nur aktualisieren,
// wenn sich der Sekundenzeiger darüber befindet
if (Sekunden > 20 & Sekunden < 40)
{
tft.setFont(&FreeSans12pt7b);
tft.setCursor(65, 180);
tft.setTextColor(GRUEN);
// Bildschirmbereich für das Datum löschen
tft.fillRect(60, 160, 125, 25, Kreisfarbe);
if (Zeit.tm_mday < 10) tft.print("0");
tft.print(Zeit.tm_mday);
tft.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 9) tft.print("0");
// Zählung beginnt mit 0 -> +1
tft.print(Zeit.tm_mon + 1);
tft.print(".");
// Anzahl Jahre seit 1900
tft.print(Zeit.tm_year + 1900);
}
}
// Vorausberechnung der x- und y-Koordinaten
// 0-59 -> 0-354 = Faktor 6
GradSekunden = Sekunden * 6;
// Minuten+Sekunden in Relation zu 3600 setzen
// 60 / 3600 = 0.01666667
GradMinuten = Minuten * 6 + GradSekunden * 0.01666667;
// 30 / 3600 = 0.0833333
// Stunden+Minuten in Relation zu 360 setzen
// 0-11 -> 0-360
GradStunden = Stunden * 30 + GradMinuten * 0.0833333; // 0-11 -> 0-360
StundePosX = cos((GradStunden - 90) * DEG_TO_RAD);
StundePosY = sin((GradStunden - 90) * DEG_TO_RAD);
MinutePosX = cos((GradMinuten - 90) * DEG_TO_RAD) ;
MinutePosY = sin((GradMinuten - 90) * DEG_TO_RAD);
SekundePosX = cos((GradSekunden - 90) * DEG_TO_RAD);
SekundePosY = sin((GradSekunden - 90) * DEG_TO_RAD);
// nach jeder Minute Minuten-/Stundenzeiger löschen
// oder einmalig beim Start der Anzeige
if (Sekunden == 0 || Start)
{
Start = 0;
tft.drawLine(StundenZeigerX, StundenZeigerY, MitteHoehe, MitteHoehe + 1, Kreisfarbe);
// 62 Pixel -> Länge des Stundenzeigers
// Mittelpunkt + 1 -> Mittelpunkt soll nicht gelöscht werden
StundenZeigerX = StundePosX * 62 + MitteHoehe + 1;
StundenZeigerY = StundePosY * 62 + MitteHoehe + 1;
tft.drawLine(MinutenZeigerX, MinutenZeigerY, MitteHoehe, MitteHoehe + 1, Kreisfarbe);
// 84 Pixel -> Länge des Minutenzeigers
// Mittelpunkt + 1 -> Mittelpunkt soll nicht gelöscht werden
MinutenZeigerX = MinutePosX * 84 + MitteHoehe;
MinutenZeigerY = MinutePosY * 84 + MitteHoehe + 1;
}
// Sekundenzeiger löschen
tft.drawLine(SekundenZeigerX, SekundenZeigerY, MitteHoehe, MitteHoehe + 1, Kreisfarbe);
// Kreis am Sekundenzeiger löschen, Radius 5
tft.fillCircle(SekundenZeigerX, SekundenZeigerY, 5, Kreisfarbe);
// 85 Pixel -> Länge des Sekundenzeigers
SekundenZeigerX = SekundePosX * 85 + MitteHoehe + 1;
SekundenZeigerY = SekundePosY * 85 + MitteHoehe + 1;
// Zeiger neu zeichnen
// Sekunden
tft.drawLine(SekundenZeigerX, SekundenZeigerY, MitteHoehe, MitteHoehe + 1, ROT);
// Minuten
tft.drawLine(MinutenZeigerX, MinutenZeigerY, MitteHoehe, MitteHoehe + 1, Zeigerfarbe);
// Stunden
tft.drawLine(StundenZeigerX, StundenZeigerY, MitteHoehe, MitteHoehe + 1, Zeigerfarbe);
// Kreis an der Spitze des Sekundenzeigers, Radius 5
tft.fillCircle(SekundenZeigerX, SekundenZeigerY, 5, ROT);
// Mittelpunkt zeichnen
tft.fillCircle(MitteHoehe, MitteHoehe + 1, 3, Zeigerfarbe);
}
}
Letzte Aktualisierung: