Hallo,
Das Update der Uhrzeit meiner Wordclock läuft derzeit über ein DCF-Modul (sehr frickelig) und deshalb wollte ich den Code umstellen und ein Wemos D1 nutzen um die Uhrzeit über das WLAN zu holen.
Die Uhrzeit zu holen ist anscheinend nicht das Problem, aber ich bekomme sie nicht in den Code übergeben...
- Wo ist der Fehler warum die Uhrzeit nicht an die Darstellung übergeben wird?
- Der Wemos D1 steuert auch nicht die LEDs an, obwohl er das "müsste"... Auch hier: Wo ist mein Fehler?
#include <DS3232RTC.h> //https://github.com/JChristensen/DS3232RTC
#include <TimeLib.h> //https://github.com/PaulStoffregen/Time
#include <Wire.h>
#include <FastLED.h> //https://github.com/FastLED/FastLED
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <FastLED.h>
FASTLED_USING_NAMESPACE
#define DATA_PIN D3
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS 114 // Gesamtanzahl der WS2812 LEDs
CRGB leds[NUM_LEDS];
// WiFi Settings
const char *ssid = "xxx"; // Replace with your WiFi SSID
const char *password = "xxx"; // Replace with your WiFi password
// NTP Client Setup
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600, 60000); // NTP server, GMT+1, update interval
uint8_t maxBrightness = 35; // Wenn Fotoresistor benutzt wird, hier min. Helligkeit eintragen (0=Off->255=max)
uint8_t minBrightness = 210; // Wenn Fotoresistor benutzt wird, hier max. Helligkeit eintragen (0=Off->255=max)
uint8_t AmbientLightPin = 0; // Fotoresistor Pin
uint8_t BRIGHTNESS = 120; // Wenn kein Fotoresistor benutzt wird hier dauerhafte Helligkeit eintragen
uint8_t Stunde = 0;
uint8_t Minute = 15;
uint8_t WochenTag = 0;
uint8_t Tag = 30;
uint8_t Monat = 10;
uint8_t Sekunden = 0;
//boolean DST = false;
//***HIER LED POSITIONEN EINTRAGEN***//
int Es[] = {0, 1};
int Ist[] = {3, 4, 5};
int Eins[] = {62, 63, 64, 65};
int Ein[] = {63, 64, 65};
int Zwei[] = {55, 56, 57, 58};
int Drei[] = {66, 67, 68, 69};
int Vier[] = {73, 74, 75, 76};
int Fuenf[] = {51, 52, 53, 54};
int Sechs[] = {83, 84, 85, 86, 87};
int Sieben[] = {88, 89, 90, 91, 92, 93};
int Acht[] = {77, 78, 79, 80};
int Neun[] = {44, 45, 46, 47};
int Zehn[] = {106, 107, 108, 109};
int Elf[] = {59, 60, 61};
int Zwoelf[] = {94, 95, 96, 97, 98};
int MZwanzig[] = {11, 12, 13, 14, 15, 16, 17};
int MZehn[] = {22, 23, 24, 25};
int MFuenf[] = {7, 8, 9, 10};
int Viertel[] = {26, 27, 28, 29, 30, 31, 32};
int Vor[] = {41, 42, 43};
int Nach[] = {33, 34, 35, 36};
int Halb[] = {37, 38, 39, 40};
int Uhr[] = {99, 100, 101};
int Und[] = {19, 20, 21};
int EinsM[] = {110}; //Minuten Punkt 1
int ZweiM[] = {111}; //Minuten Punkt 2
int DreiM[] = {112}; //Minuten Punkt 3
int VierM[] = {113}; //Minuten Punkt 4
//**********************************//
int i, Ambient, LastAmbient;
void setup() {
Serial.begin(115200);
delay(1000);
// Connect to WiFi
connectToWiFi();
// Initialize NTP Client
timeClient.begin();
// Initialize LED strip
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalPixelString);
FastLED.setTemperature(Tungsten40W);
Serial.println("Word Clock started...");
}
void connectToWiFi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void updateTimeFromNTP() {
timeClient.update();
Stunde = (timeClient.getHours() % 12 == 0) ? 12 : timeClient.getHours() % 12; // Convert to 12-hour format
Minute = timeClient.getMinutes();
Sekunden = timeClient.getSeconds();
Serial.print("Time: ");
Serial.print(Stunde);
Serial.print(":");
Serial.print(Minute);
//Serial.print(":");
//Serial.println(Sekunden);
}
void SwitchLED(int MyArray[], int n) {
//Umgebungshelligkeit überprüfen (sofern gewünscht)
if(maxBrightness != 0){
Ambient = analogRead(AmbientLightPin);
//Nur bei größeren Helligkeitsänderungen soll die Helligkeit der LEDs angepasst werden:
if((Ambient > LastAmbient*1.10) || (Ambient < LastAmbient*0.90)){
BRIGHTNESS = map(Ambient, 0, 1023, maxBrightness, minBrightness);
LastAmbient = Ambient;
}
}
//Funktion zum Anschalten der LEDs in warmweiß (oder gewünschter Farbe)
for (i = MyArray[0]; i < MyArray[0]+n; i++) {
leds[i] = 0xFFC58F; // HEX Warmweiß | Hier gewünschte LED Farbe (HEX) eintragen
FastLED.setBrightness(BRIGHTNESS);
//leds[i] = CHSV(140, 27, BRIGHTNESS); // ODER hier gewünschte Farbe in HSV ( CHSV(FARBE, SÄTTIGUNG, BRIGHTNESS) )
//leds[i].setRGB(255, 68, 221); // ODER hier gewünschte Farbe in RGB ( .setRGB(Rot,Grün,Blau) )
}
}
void displaytime(void){
//zuerst setzten wir alle LEDs zurück
fill_solid( leds, NUM_LEDS, CHSV(0, 0, 0));
// Nun suchen wir die richtigen LEDs und übergeben sie an die Funktion zum Anschalten
Serial.print("Es ist ");
SwitchLED(Es, (sizeof(Es)/2));
SwitchLED(Ist, (sizeof(Ist)/2));
if (((Minute>4) && (Minute<10)) || (Minute>54)) {
SwitchLED(MFuenf, (sizeof(MFuenf)/2));
Serial.print("5 Minuten ");
}
if (((Minute>9) && (Minute<15)) || ((Minute>49) && (Minute<55))) {
SwitchLED(MZehn, (sizeof(MZehn)/2));
Serial.print("10 Minuten ");
}
if (((Minute>14) && (Minute<20)) || ((Minute>44) && (Minute<50))) {
SwitchLED(Viertel, (sizeof(Viertel)/2));
Serial.print("Viertel ");
}
if (((Minute>19) && (Minute<25)) || ((Minute>39) && (Minute<45))) {
SwitchLED(MZwanzig, (sizeof(MZwanzig)/2));
Serial.print("20 Minuten ");
}
if (((Minute>24) && (Minute<30)) || ((Minute>34) && (Minute<40))) {
SwitchLED(MFuenf, (sizeof(MFuenf)/2));
SwitchLED(Und, (sizeof(Und)/2));
SwitchLED(MZwanzig, (sizeof(MZwanzig)/2));
Serial.print("25 Minuten ");
}
if ((Minute>29) && (Minute<35)) {
SwitchLED(Halb, (sizeof(Halb)/2));
Serial.print("Halb ");
}
if (Minute <5){
switch (Stunde) {
case 1:
SwitchLED(Ein, (sizeof(Ein)/2));
Serial.print("1 ");
break;
case 2:
SwitchLED(Zwei, (sizeof(Zwei)/2));
Serial.print("2 ");
break;
case 3:
SwitchLED(Drei, (sizeof(Drei)/2));
Serial.print("3 ");
break;
case 4:
SwitchLED(Vier, (sizeof(Vier)/2));
Serial.print("4 ");
break;
case 5:
SwitchLED(Fuenf, (sizeof(Fuenf)/2));
Serial.print("5 ");
break;
case 6:
SwitchLED(Sechs, (sizeof(Sechs)/2));
Serial.print("6 ");
break;
case 7:
SwitchLED(Sieben, (sizeof(Sieben)/2));
Serial.print("7 ");
break;
case 8:
SwitchLED(Acht, (sizeof(Acht)/2));
Serial.print("8 ");
break;
case 9:
SwitchLED(Neun, (sizeof(Neun)/2));
Serial.print("9 ");
break;
case 10:
SwitchLED(Zehn, (sizeof(Zehn)/2));
Serial.print("10 ");
break;
case 11:
SwitchLED(Elf, (sizeof(Elf)/2));
Serial.print("11 ");
break;
case 12:
SwitchLED(Zwoelf, (sizeof(Zwoelf)/2));
Serial.print("12 ");
break;
}
SwitchLED(Uhr, (sizeof(Uhr)/2));
Serial.println("Uhr");
}
else if ((Minute < 30) && (Minute >4)) {
SwitchLED(Nach, (sizeof(Nach)/2));
Serial.print("nach ");
switch (Stunde) {
case 1:
SwitchLED(Eins, (sizeof(Eins)/2));
Serial.println("1 ");
break;
case 2:
SwitchLED(Zwei, (sizeof(Zwei)/2));
Serial.println("2 ");
break;
case 3:
SwitchLED(Drei, (sizeof(Drei)/2));
Serial.println("3 ");
break;
case 4:
SwitchLED(Vier, (sizeof(Vier)/2));
Serial.println("4 ");
break;
case 5:
SwitchLED(Fuenf, (sizeof(Fuenf)/2));
Serial.println("8 ");
break;
case 6:
SwitchLED(Sechs, (sizeof(Sechs)/2));
Serial.println("6 ");
break;
case 7:
SwitchLED(Sieben, (sizeof(Sieben)/2));
Serial.println("7 ");
break;
case 8:
SwitchLED(Acht, (sizeof(Acht)/2));
Serial.println("8 ");
break;
case 9:
SwitchLED(Neun, (sizeof(Neun)/2));
Serial.println("9 ");
break;
case 10:
SwitchLED(Zehn, (sizeof(Zehn)/2));
Serial.println("10 ");
break;
case 11:
SwitchLED(Elf, (sizeof(Elf)/2));
Serial.println("11 ");
break;
case 12:
SwitchLED(Zwoelf, (sizeof(Zwoelf)/2));
Serial.println("12 ");
break;
}
}
else{
if ((Minute>29) && (Minute<35)){
switch (Stunde) {
case 1:
SwitchLED(Zwei, (sizeof(Zwei)/2));
Serial.println("2 ");
break;
case 2:
SwitchLED(Drei, (sizeof(Drei)/2));
Serial.println("3");
break;
case 3:
SwitchLED(Vier, (sizeof(Vier)/2));
Serial.println("4 ");
break;
case 4:
SwitchLED(Fuenf, (sizeof(Fuenf)/2));
Serial.println("5 ");
break;
case 5:
SwitchLED(Sechs, (sizeof(Sechs)/2));
Serial.println("6 ");
break;
case 6:
SwitchLED(Sieben, (sizeof(Sieben)/2));
Serial.println("7 ");
break;
case 7:
SwitchLED(Acht, (sizeof(Acht)/2));
Serial.println("8 ");
break;
case 8:
SwitchLED(Neun, (sizeof(Neun)/2));
Serial.println("9 ");
break;
case 9:
SwitchLED(Zehn, (sizeof(Zehn)/2));
Serial.println("10 ");
break;
case 10:
SwitchLED(Elf, (sizeof(Elf)/2));
Serial.println("11 ");
break;
case 11:
SwitchLED(Zwoelf, (sizeof(Zwoelf)/2));
Serial.println("12 ");
break;
case 12:
SwitchLED(Eins, (sizeof(Eins)/2));
Serial.println("1 ");
break;
}
}
else{
SwitchLED(Vor, (sizeof(Vor)/2));
Serial.print("vor ");
switch (Stunde) {
case 1:
SwitchLED(Zwei, (sizeof(Zwei)/2));
Serial.println("2 ");
break;
case 2:
SwitchLED(Drei, (sizeof(Drei)/2));
Serial.println("3");
break;
case 3:
SwitchLED(Vier, (sizeof(Vier)/2));
Serial.println("4 ");
break;
case 4:
SwitchLED(Fuenf, (sizeof(Fuenf)/2));
Serial.println("5 ");
break;
case 5:
SwitchLED(Sechs, (sizeof(Sechs)/2));
Serial.println("6 ");
break;
case 6:
SwitchLED(Sieben, (sizeof(Sieben)/2));
Serial.println("7 ");
break;
case 7:
SwitchLED(Acht, (sizeof(Acht)/2));
Serial.println("8 ");
break;
case 8:
SwitchLED(Neun, (sizeof(Neun)/2));
Serial.println("9 ");
break;
case 9:
SwitchLED(Zehn, (sizeof(Zehn)/2));
Serial.println("10 ");
break;
case 10:
SwitchLED(Elf, (sizeof(Elf)/2));
Serial.println("11 ");
break;
case 11:
SwitchLED(Zwoelf, (sizeof(Zwoelf)/2));
Serial.println("12 ");
break;
case 12:
SwitchLED(Eins, (sizeof(Eins)/2));
Serial.println("1 ");
break;
}
}
}
// Minuten Zähler
uint8_t MinCount = Minute-(floor(Minute/10)*10);
if(MinCount > 5)
MinCount = MinCount - 5;
switch(MinCount){
case 4:
SwitchLED(VierM, (sizeof(VierM)/2));
case 3:
SwitchLED(DreiM, (sizeof(DreiM)/2));
case 2:
SwitchLED(ZweiM, (sizeof(ZweiM)/2));
case 1:
SwitchLED(EinsM, (sizeof(EinsM)/2));
}
FastLED.show();
}
//void CheckDST(void){
//Funktion zum Überprüfen ob Sommer oder Winterzeit
//Tag = day();
//Monat = month();
// WochenTag = (weekday()-1);
// int Hilf = Tag-WochenTag;
// if(Monat <= 2 || Monat >= 11)
// DST = false; // Winterzeit
// if(Monat >= 4 && Monat <= 9)
// DST = true; // Sommerzeit
//if((Monat == 3) && (Hilf >= 25))
// DST = true; // Beginn der Sommerzeit
// if((Monat == 10) && (Hilf >= 25))
// DST = false; // Beginn der Winterzeit
// if(DST == true){
// if (Stunde <= 11)
// Stunde = Stunde + 1;
// else if (Stunde > 12)
// Stunde = Stunde-12+1;
// else if (Stunde == 12)
// Stunde = 1;
// else if (Stunde == 24)
// Stunde = 1;
// Stunde += 1;
// }
//}
void loop() {
/* Schleifen Funktion, die die Uhrzeit ausliest und dann in die
* entsprechende Funktionen übergibt.
*/
Minute = minute();
int Std = hour();
if(Std > 12)
Stunde = Std-12;
else if (Std == 0)
Stunde = 12;
else
Stunde = Std;
//CheckDST();
displaytime();
FastLED.delay(250);
Serial.println(Stunde);
Serial.println(Minute);
}