Hallo, ein Bekannter meinte neulich, dass er kein Gefühl für die Wochentage hat seitdem er Rentner ist.
Jetzt möchte ich ihm eine Rentneruhr mit Wochentagsanzeige basteln. Ich dachte an eine Wortuhr wo ich die Uhrzeit nicht realisiere sondern nur die Wochentagsanzeige verwende.
Hat jemand einen solchen sketch den ich umbauen kann, bzw mich dran versuche?
Woher soll die Uhrzeit bzw der Wochentag kommen? Per RTC, DCF oder NTP?
Das Projekt klingt interessant
Das Besondere an einer Wortuhr ist das Zusammenstellen eines Textes aus mehreren Wörtern. "Es ist Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag" ist etwas langweilig, selbst der Rentner benötigt da etwas mehr Pepp, finde ich.
Hast Wifi? Dann ein nodeMcu und 29 Zeilen code.
Mach mal die Hardware mit den Wochentagen.
Ich hatte mal eine Wortuhr gesehen, wo die Zeit per NTP ermittelt wurde. Das scheint mir ideal. Anderseits geht es natürlich auch so, dass alle 24Stunden ein anderes Lämpchen aufleuchtet und nach sieben Tagen der Spass von vorne losgeht.
Aber ich fragte ja nach einem sketch den ich umbauen konnte. Meine Programmierkenntnisse gehen gegen Null.
Ich habe mal das Wokwi-Demo-Projekt "ESP32 NTP Example.ino" geringfügig abgewandelt. Der Code ist zwar nicht schön (WiFi-Credentials hart im Code an Zeile 61), aber funktioniert.
Code im Testmodus (Update alle Sekunde)"
Betriebsmodus durch Auskommentieren von Zeile 6 herstellen
// Learn about the ESP32 WiFi simulation in
// https://docs.wokwi.com/guides/esp32-wifi
// https://forum.arduino.cc/t/wortuhr-ohne-uhrzeit-aber-mit-wochentagen/1295848
#define TEST_MODE
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 0
#define UTC_OFFSET_DST 0
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
LCD.setCursor(15, 1);
LCD.print(glyphs[counter++]);
if (counter == strlen(glyphs)) {
counter = 0;
}
}
constexpr char* weekday[] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Sonnabend"};
int lastWeekday = -1;
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.clear();
LCD.setCursor(0, 1);
LCD.println("Connection Err");
return;
}
#if defined(TEST_MODE)
if (lastWeekday != timeinfo.tm_sec % 7)
{
LCD.clear();
lastWeekday = timeinfo.tm_sec % 7;
LCD.setCursor(3, 0);
LCD.println("Heute ist");
LCD.setCursor(3, 1);
LCD.println(weekday[timeinfo.tm_sec % 7]); // nur zum Testen
}
#else
if (lastWeekday != timeinfo.tm_wday)
{
LCD.clear();
lastWeekday = timeinfo.tm_wday;
LCD.setCursor(3, 0);
LCD.println("Heute ist");
LCD.setCursor(3, 1);
LCD.println(weekday[timeinfo.tm_wday]);
}
#endif
}
void setup() {
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Updating time...");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void loop() {
printLocalTime();
delay(250);
}
Man könnte jetzt das delay()
in der Loop wesentlich verlängern, das mit den Netzwerkdaten ordentlich machen, einen anderen ntp-Server (fritz.box) wählen und was sonst noch...
MCU_WordClock_NTP_DST_Recon_WiFi-AP_Temp_OTA_LDR.zip (5,9 KB)
Ich hab hier mal meinen Code für meine Wortuhr ...
aber leider nur als ZIP, da ich mit mehreren Tabs gearbeitet habe.
Und ja, der Code ist alles andere als ein Musterbeispiel,
höchstens als abschreckende Mahnung, wie man es falsch machen kann, oder wie Anfänger ( wie ich) es gerne mit mangeldem Wissen machen.
Das ganze hab ich mit WS2812B via ESP8266 (NodeMCU) realisiert.
Im Code wirst Du jede Menge rauswerfen und dann auf deine Bedürfnisse anpassen können.
Im Haupttab siehts so aus ...
#include <FS.h> // this needs to be first, or it all crashes and burns...
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include <Adafruit_NeoPixel.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <time.h>
#include <math.h>
#define MY_NTP_SERVER "de.pool.ntp.org"
#define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03"
#define Version "MCU_WordClock_NTP_DST_Reconnect_WiFi-AP_Temp_OTA_LDR_2022.12.12"
#define TRIGGER_PIN 0 // Flash Button auf NodeMCU startet den Wifi Manager
#define LEDs 142
#define LED_PIN D5
#define inputPin D6 // Button um LEDs z.B. für die Nacht abzuschalten
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDs, LED_PIN, NEO_GRB + NEO_KHZ800);
time_t now;
tm tm;
unsigned long previousMillis = 0;
unsigned long interval = 90; // Zeit bis WLAN Ausfall erkannt wird in Millisekunden (300000 = 5 Minuten; 900000 = 15 Minuten )
bool state = false;
bool lastInputState;
bool currentInputState;
int LDR = A0;
int sensorWert = 0;
int Brightness = 90;
const char* name = "1WortUhr_1"; // Dient der OTA Identifizierung und bestimmt auch den AP Namen (Achtung, wird auch im Tab 'Wifi_man' benutzt).
// Farbdefinitionen der LEDs frei anpassbar (Rot Gruen Blau 0..255)
#define col_hour 100, 000, 000 // ROT
#define col_min 000, 100, 000 // GRÜN
#define col_min_1 010, 100, 100 // CYAN
#define col_sec 000, 000, 100 // BLAU
#define col_word 100, 100, 000 // GLEB
#define col_off 000, 000, 000 // AUS
#define col_err 030, 020, 050 // ROSA
#define col_start 120, 100, 100 // WEISS // Farbe für den Selbsttest der LEDs bei Programstart
#define pause1 20
void setup() {
Serial.begin(115200);
pinMode(TRIGGER_PIN, INPUT_PULLUP);
pinMode(inputPin, INPUT_PULLUP);
currentInputState = digitalRead(inputPin);
// Hostname defaults to esp8266-[ChipID]
ArduinoOTA.setHostname(name);
// No authentication by default
ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_FS
type = "filesystem";
}
Serial.println("Start updating " + type); // NOTE: if updating FS this would be the place to unmount FS using FS.end()
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
Wifi_man();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.print("Version: ");
Serial.println(Version);
stripstart();
}
void loop () {
ArduinoOTA.handle();
if ( digitalRead(TRIGGER_PIN) == LOW) {
WiFi.mode(WIFI_STA);
WiFiManager wm;
if (!wm.startConfigPortal(name, "password")) {
Serial.println("failed to connect and hit timeout");
delay(3000);
//reset and try again, or maybe put it to deep sleep
ESP.restart();
delay(5000);
}
Wifi_man();
}
unsigned long currentMillis = millis();
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
Serial.print("\nReconnecting to WiFi...");
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
striperror();
}
else {
lastInputState = currentInputState;
currentInputState = digitalRead(inputPin);
if (lastInputState == HIGH && currentInputState == LOW) {
state = !state;
}
showTime();
strip.show();
sensorWert = analogRead(LDR);
if (state == 0 && sensorWert > 500 ) {
Brightness = 150;
}
else if (state == 0 && sensorWert >= 50 ) {
Brightness = 60;
}
else if (state == 0 && sensorWert < 50 ) {
Brightness = 10;
}
else {
Brightness = 0;
}
// Stundenanzeige
for (int i = 0; i < LEDs; i++) {
strip.setPixelColor(i, col_off);
}
int stunden = tm.tm_hour;
int minuten = tm.tm_min;
if (stunden == 0) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten == 0) {
strip.setPixelColor( 92, col_hour); // MITTERNACHT
strip.setPixelColor( 93, col_hour); // MITTERNACHT
strip.setPixelColor( 94, col_hour); // MITTERNACHT
strip.setPixelColor( 95, col_hour); // MITTERNACHT
strip.setPixelColor( 96, col_hour); // MITTERNACHT
strip.setPixelColor( 97, col_hour); // MITTERNACHT
strip.setPixelColor( 98, col_hour); // MITTERNACHT
strip.setPixelColor( 99, col_hour); // MITTERNACHT
strip.setPixelColor(100, col_hour); // MITTERNACHT
strip.setPixelColor(101, col_hour); // MITTERNACHT
strip.setPixelColor(102, col_hour); // MITTERNACHT
}
if (minuten >= 1 && minuten < 24) {
strip.setPixelColor( 9, col_hour); // NULL
strip.setPixelColor( 10, col_hour); // NULL
strip.setPixelColor( 11, col_hour); // NULL
strip.setPixelColor( 12, col_hour); // NULL
}
else {
strip.setPixelColor(104, col_hour); // EINS
strip.setPixelColor(105, col_hour); // EINS
strip.setPixelColor(106, col_hour); // EINS
strip.setPixelColor(107, col_hour); // EINS
}
}
if (stunden == 1) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(104, col_hour); // EINS
strip.setPixelColor(105, col_hour); // EINS
strip.setPixelColor(106, col_hour); // EINS
strip.setPixelColor(107, col_hour); // EINS
}
else {
strip.setPixelColor( 78, col_hour); // ZWEI
strip.setPixelColor( 79, col_hour); // ZWEI
strip.setPixelColor( 80, col_hour); // ZWEI
strip.setPixelColor( 81, col_hour); // ZWEI
}
}
if (stunden == 2) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 78, col_hour); // ZWEI
strip.setPixelColor( 79, col_hour); // ZWEI
strip.setPixelColor( 80, col_hour); // ZWEI
strip.setPixelColor( 81, col_hour); // ZWEI
}
else {
strip.setPixelColor( 65, col_hour); // DREI
strip.setPixelColor( 66, col_hour); // DREI
strip.setPixelColor( 67, col_hour); // DREI
strip.setPixelColor( 68, col_hour); // DREI
}
}
if (stunden == 3) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 65, col_hour); // DREI
strip.setPixelColor( 66, col_hour); // DREI
strip.setPixelColor( 67, col_hour); // DREI
strip.setPixelColor( 68, col_hour); // DREI
}
else {
strip.setPixelColor( 82, col_hour); // VIER
strip.setPixelColor( 83, col_hour); // VIER
strip.setPixelColor( 84, col_hour); // VIER
strip.setPixelColor( 85, col_hour); // VIER
}
}
if (stunden == 4) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 82, col_hour); // VIER
strip.setPixelColor( 83, col_hour); // VIER
strip.setPixelColor( 84, col_hour); // VIER
strip.setPixelColor( 85, col_hour); // VIER
}
else {
strip.setPixelColor( 61, col_hour); // FÜNF
strip.setPixelColor( 62, col_hour); // FÜNF
strip.setPixelColor( 63, col_hour); // FÜNF
strip.setPixelColor( 64, col_hour); // FÜNF
}
}
if (stunden == 5) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 61, col_hour); // FÜNF
strip.setPixelColor( 62, col_hour); // FÜNF
strip.setPixelColor( 63, col_hour); // FÜNF
strip.setPixelColor( 64, col_hour); // FÜNF
}
else {
strip.setPixelColor( 69, col_hour); // SECHS
strip.setPixelColor( 70, col_hour); // SECHS
strip.setPixelColor( 71, col_hour); // SECHS
strip.setPixelColor( 72, col_hour); // SECHS
strip.setPixelColor( 73, col_hour); // SECHS
}
}
if (stunden == 6) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 69, col_hour); // SECHS
strip.setPixelColor( 70, col_hour); // SECHS
strip.setPixelColor( 71, col_hour); // SECHS
strip.setPixelColor( 72, col_hour); // SECHS
strip.setPixelColor( 73, col_hour); // SECHS
}
else {
strip.setPixelColor(111, col_hour); // SIEBEN
strip.setPixelColor(112, col_hour); // SIEBEN
strip.setPixelColor(113, col_hour); // SIEBEN
strip.setPixelColor(114, col_hour); // SIEBEN
strip.setPixelColor(115, col_hour); // SIEBEN
strip.setPixelColor(116, col_hour); // SIEBEN
}
}
if (stunden == 7) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(111, col_hour); // SIEBEN
strip.setPixelColor(112, col_hour); // SIEBEN
strip.setPixelColor(113, col_hour); // SIEBEN
strip.setPixelColor(114, col_hour); // SIEBEN
strip.setPixelColor(115, col_hour); // SIEBEN
strip.setPixelColor(116, col_hour); // SIEBEN
}
else {
strip.setPixelColor( 92, col_hour); // ACHT
strip.setPixelColor( 93, col_hour); // ACHT
strip.setPixelColor( 94, col_hour); // ACHT
strip.setPixelColor( 95, col_hour); // ACHT
}
}
if (stunden == 8) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 92, col_hour); // ACHT
strip.setPixelColor( 93, col_hour); // ACHT
strip.setPixelColor( 94, col_hour); // ACHT
strip.setPixelColor( 95, col_hour); // ACHT
}
else {
strip.setPixelColor( 53, col_hour); // NEUN
strip.setPixelColor( 54, col_hour); // NEUN
strip.setPixelColor( 55, col_hour); // NEUN
strip.setPixelColor( 56, col_hour); // NEUN
}
}
if (stunden == 9) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 53, col_hour); // NEUN
strip.setPixelColor( 54, col_hour); // NEUN
strip.setPixelColor( 55, col_hour); // NEUN
strip.setPixelColor( 56, col_hour); // NEUN
}
else {
strip.setPixelColor( 99, col_hour); // ZEHN
strip.setPixelColor(100, col_hour); // ZEHN
strip.setPixelColor(101, col_hour); // ZEHN
strip.setPixelColor(102, col_hour); // ZEHN
}
}
if (stunden == 10) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 99, col_hour); // ZEHN
strip.setPixelColor(100, col_hour); // ZEHN
strip.setPixelColor(101, col_hour); // ZEHN
strip.setPixelColor(102, col_hour); // ZEHN
}
else {
strip.setPixelColor(108, col_hour); // ELF
strip.setPixelColor(109, col_hour); // ELF
strip.setPixelColor(110, col_hour); // ELF
}
}
if (stunden == 11) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(108, col_hour); // ELF
strip.setPixelColor(109, col_hour); // ELF
strip.setPixelColor(110, col_hour); // ELF
}
else {
strip.setPixelColor(124, col_hour); // ZWÖLF
strip.setPixelColor(125, col_hour); // ZWÖLF
strip.setPixelColor(126, col_hour); // ZWÖLF
strip.setPixelColor(127, col_hour); // ZWÖLF
strip.setPixelColor(128, col_hour); // ZWÖLF
strip.setPixelColor(118, col_word); // ZWÖLF
strip.setPixelColor(119, col_word); // ZWÖLF
strip.setPixelColor(120, col_word); // ZWÖLF
}
}
if (stunden == 12) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(124, col_hour); // ZWÖLF
strip.setPixelColor(125, col_hour); // ZWÖLF
strip.setPixelColor(126, col_hour); // ZWÖLF
strip.setPixelColor(127, col_hour); // ZWÖLF
strip.setPixelColor(128, col_hour); // ZWÖLF
strip.setPixelColor(118, col_word); // ZWÖLF
strip.setPixelColor(119, col_word); // ZWÖLF
strip.setPixelColor(120, col_word); // ZWÖLF
}
else {
strip.setPixelColor(104, col_hour); // EINS
strip.setPixelColor(105, col_hour); // EINS
strip.setPixelColor(106, col_hour); // EINS
strip.setPixelColor(107, col_hour); // EINS
}
}
if (stunden == 13) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(104, col_hour); // EINS
strip.setPixelColor(105, col_hour); // EINS
strip.setPixelColor(106, col_hour); // EINS
strip.setPixelColor(107, col_hour); // EINS
}
else {
strip.setPixelColor( 78, col_hour); // ZWEI
strip.setPixelColor( 79, col_hour); // ZWEI
strip.setPixelColor( 80, col_hour); // ZWEI
strip.setPixelColor( 81, col_hour); // ZWEI
}
}
if (stunden == 14) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 78, col_hour); // ZWEI
strip.setPixelColor( 79, col_hour); // ZWEI
strip.setPixelColor( 80, col_hour); // ZWEI
strip.setPixelColor( 81, col_hour); // ZWEI
}
else {
strip.setPixelColor( 65, col_hour); // DREI
strip.setPixelColor( 66, col_hour); // DREI
strip.setPixelColor( 67, col_hour); // DREI
strip.setPixelColor( 68, col_hour); // DREI
}
}
if (stunden == 15) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 65, col_hour); // DREI
strip.setPixelColor( 66, col_hour); // DREI
strip.setPixelColor( 67, col_hour); // DREI
strip.setPixelColor( 68, col_hour); // DREI
}
else {
strip.setPixelColor( 82, col_hour); // VIER
strip.setPixelColor( 83, col_hour); // VIER
strip.setPixelColor( 84, col_hour); // VIER
strip.setPixelColor( 85, col_hour); // VIER
}
}
if (stunden == 16) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 82, col_hour); // VIER
strip.setPixelColor( 83, col_hour); // VIER
strip.setPixelColor( 84, col_hour); // VIER
strip.setPixelColor( 85, col_hour); // VIER
}
else {
strip.setPixelColor( 61, col_hour); // FÜNF
strip.setPixelColor( 62, col_hour); // FÜNF
strip.setPixelColor( 63, col_hour); // FÜNF
strip.setPixelColor( 64, col_hour); // FÜNF
}
}
if (stunden == 17) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 61, col_hour); // FÜNF
strip.setPixelColor( 62, col_hour); // FÜNF
strip.setPixelColor( 63, col_hour); // FÜNF
strip.setPixelColor( 64, col_hour); // FÜNF
}
else {
strip.setPixelColor( 69, col_hour); // SECHS
strip.setPixelColor( 70, col_hour); // SECHS
strip.setPixelColor( 71, col_hour); // SECHS
strip.setPixelColor( 72, col_hour); // SECHS
strip.setPixelColor( 73, col_hour); // SECHS
}
}
if (stunden == 18) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 69, col_hour); // SECHS
strip.setPixelColor( 70, col_hour); // SECHS
strip.setPixelColor( 71, col_hour); // SECHS
strip.setPixelColor( 72, col_hour); // SECHS
strip.setPixelColor( 73, col_hour); // SECHS
}
else {
strip.setPixelColor(111, col_hour); // SIEBEN
strip.setPixelColor(112, col_hour); // SIEBEN
strip.setPixelColor(113, col_hour); // SIEBEN
strip.setPixelColor(114, col_hour); // SIEBEN
strip.setPixelColor(115, col_hour); // SIEBEN
strip.setPixelColor(116, col_hour); // SIEBEN
}
}
if (stunden == 19) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(111, col_hour); // SIEBEN
strip.setPixelColor(112, col_hour); // SIEBEN
strip.setPixelColor(113, col_hour); // SIEBEN
strip.setPixelColor(114, col_hour); // SIEBEN
strip.setPixelColor(115, col_hour); // SIEBEN
strip.setPixelColor(116, col_hour); // SIEBEN
}
else {
strip.setPixelColor( 92, col_hour); // ACHT
strip.setPixelColor( 93, col_hour); // ACHT
strip.setPixelColor( 94, col_hour); // ACHT
strip.setPixelColor( 95, col_hour); // ACHT
}
}
if (stunden == 20) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 92, col_hour); // ACHT
strip.setPixelColor( 93, col_hour); // ACHT
strip.setPixelColor( 94, col_hour); // ACHT
strip.setPixelColor( 95, col_hour); // ACHT
}
else {
strip.setPixelColor( 53, col_hour); // NEUN
strip.setPixelColor( 54, col_hour); // NEUN
strip.setPixelColor( 55, col_hour); // NEUN
strip.setPixelColor( 56, col_hour); // NEUN
}
}
if (stunden == 21) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 53, col_hour); // NEUN
strip.setPixelColor( 54, col_hour); // NEUN
strip.setPixelColor( 55, col_hour); // NEUN
strip.setPixelColor( 56, col_hour); // NEUN
}
else {
strip.setPixelColor( 99, col_hour); // ZEHN
strip.setPixelColor(100, col_hour); // ZEHN
strip.setPixelColor(101, col_hour); // ZEHN
strip.setPixelColor(102, col_hour); // ZEHN
}
}
if (stunden == 22) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor( 99, col_hour); // ZEHN
strip.setPixelColor(100, col_hour); // ZEHN
strip.setPixelColor(101, col_hour); // ZEHN
strip.setPixelColor(102, col_hour); // ZEHN
}
else {
strip.setPixelColor(108, col_hour); // ELF
strip.setPixelColor(109, col_hour); // ELF
strip.setPixelColor(110, col_hour); // ELF
}
}
if (stunden == 23) {
strip.setPixelColor( 0, col_word); // ES
strip.setPixelColor( 1, col_word); // ES
strip.setPixelColor( 3, col_word); // IST
strip.setPixelColor( 4, col_word); // IST
strip.setPixelColor( 5, col_word); // IST
if (minuten < 24) {
strip.setPixelColor(108, col_hour); // ELF
strip.setPixelColor(109, col_hour); // ELF
strip.setPixelColor(110, col_hour); // ELF
}
else {
strip.setPixelColor(124, col_hour); // ZWÖLF
strip.setPixelColor(125, col_hour); // ZWÖLF
strip.setPixelColor(126, col_hour); // ZWÖLF
strip.setPixelColor(127, col_hour); // ZWÖLF
strip.setPixelColor(128, col_hour); // ZWÖLF
strip.setPixelColor(118, col_word); // ZWÖLF
strip.setPixelColor(119, col_word); // ZWÖLF
strip.setPixelColor(120, col_word); // ZWÖLF
}
}
// Minutenanzeige
if (minuten == 0) {
strip.setPixelColor(118, col_word); // UHR
strip.setPixelColor(119, col_word); // UHR
strip.setPixelColor(120, col_word); // UHR
}
if (minuten == 5 || minuten == 6 || minuten == 7 || minuten == 8 || minuten == 9) {
strip.setPixelColor( 48, col_min); // FÜNF
strip.setPixelColor( 49, col_min); // FÜNF
strip.setPixelColor( 50, col_min); // FÜNF
strip.setPixelColor( 51, col_min); // FÜNF
strip.setPixelColor( 43, col_min); // NACH
strip.setPixelColor( 44, col_min); // NACH
strip.setPixelColor( 45, col_min); // NACH
strip.setPixelColor( 46, col_min); // NACH
}
if (minuten == 10 || minuten == 11 || minuten == 12 || minuten == 13 || minuten == 14) {
strip.setPixelColor( 27, col_min); // ZEHN
strip.setPixelColor( 28, col_min); // ZEHN
strip.setPixelColor( 29, col_min); // ZEHN
strip.setPixelColor( 30, col_min); // ZEHN
strip.setPixelColor( 43, col_min); // NACH
strip.setPixelColor( 44, col_min); // NACH
strip.setPixelColor( 45, col_min); // NACH
strip.setPixelColor( 46, col_min); // NACH
}
if (minuten == 15 || minuten == 16 || minuten == 17 || minuten == 18 || minuten == 19) {
strip.setPixelColor( 32, col_min); // VIERTEL
strip.setPixelColor( 33, col_min); // VIERTEL
strip.setPixelColor( 34, col_min); // VIERTEL
strip.setPixelColor( 35, col_min); // VIERTEL
strip.setPixelColor( 36, col_min); // VIERTEL
strip.setPixelColor( 37, col_min); // VIERTEL
strip.setPixelColor( 38, col_min); // VIERTEL
strip.setPixelColor( 43, col_min); // NACH
strip.setPixelColor( 44, col_min); // NACH
strip.setPixelColor( 45, col_min); // NACH
strip.setPixelColor( 46, col_min); // NACH
}
if (minuten == 20 || minuten == 21 || minuten == 22 || minuten == 23 || minuten == 24) {
strip.setPixelColor( 13, col_min); // ZWANZIG
strip.setPixelColor( 14, col_min); // ZWANZIG
strip.setPixelColor( 15, col_min); // ZWANZIG
strip.setPixelColor( 16, col_min); // ZWANZIG
strip.setPixelColor( 17, col_min); // ZWANZIG
strip.setPixelColor( 18, col_min); // ZWANZIG
strip.setPixelColor( 19, col_min); // ZWANZIG
strip.setPixelColor( 43, col_min); // NACH
strip.setPixelColor( 44, col_min); // NACH
strip.setPixelColor( 45, col_min); // NACH
strip.setPixelColor( 46, col_min); // NACH
}
if (minuten == 25 || minuten == 26 || minuten == 27 || minuten == 28 || minuten == 29) {
strip.setPixelColor( 48, col_min); // FÜNF
strip.setPixelColor( 49, col_min); // FÜNF
strip.setPixelColor( 50, col_min); // FÜNF
strip.setPixelColor( 51, col_min); // FÜNF
strip.setPixelColor( 39, col_min); // VOR
strip.setPixelColor( 40, col_min); // VOR
strip.setPixelColor( 41, col_min); // VOR
strip.setPixelColor( 56, col_min); // HALB
strip.setPixelColor( 57, col_min); // HALB
strip.setPixelColor( 58, col_min); // HALB
strip.setPixelColor( 59, col_min); // HALB
}
if (minuten == 30 || minuten == 31 || minuten == 32 || minuten == 33 || minuten == 34) {
strip.setPixelColor( 56, col_min); // HALB
strip.setPixelColor( 57, col_min); // HALB
strip.setPixelColor( 58, col_min); // HALB
strip.setPixelColor( 59, col_min); // HALB
}
if (minuten == 35 || minuten == 36 || minuten == 37 || minuten == 38 || minuten == 39) {
strip.setPixelColor( 48, col_min); // FÜNF
strip.setPixelColor( 49, col_min); // FÜNF
strip.setPixelColor( 50, col_min); // FÜNF
strip.setPixelColor( 51, col_min); // FÜNF
strip.setPixelColor( 43, col_min); // NACH
strip.setPixelColor( 44, col_min); // NACH
strip.setPixelColor( 45, col_min); // NACH
strip.setPixelColor( 46, col_min); // NACH
strip.setPixelColor( 56, col_min); // HALB
strip.setPixelColor( 57, col_min); // HALB
strip.setPixelColor( 58, col_min); // HALB
strip.setPixelColor( 59, col_min); // HALB
}
if (minuten == 40 || minuten == 41 || minuten == 42 || minuten == 43 || minuten == 44) {
strip.setPixelColor( 13, col_min); // ZWANZIG
strip.setPixelColor( 14, col_min); // ZWANZIG
strip.setPixelColor( 15, col_min); // ZWANZIG
strip.setPixelColor( 16, col_min); // ZWANZIG
strip.setPixelColor( 17, col_min); // ZWANZIG
strip.setPixelColor( 18, col_min); // ZWANZIG
strip.setPixelColor( 19, col_min); // ZWANZIG
strip.setPixelColor( 39, col_min); // VOR
strip.setPixelColor( 40, col_min); // VOR
strip.setPixelColor( 41, col_min); // VOR
}
if (minuten == 45 || minuten == 46 || minuten == 47 || minuten == 48 || minuten == 49) {
strip.setPixelColor( 32, col_min); // VIERTEL
strip.setPixelColor( 33, col_min); // VIERTEL
strip.setPixelColor( 34, col_min); // VIERTEL
strip.setPixelColor( 35, col_min); // VIERTEL
strip.setPixelColor( 36, col_min); // VIERTEL
strip.setPixelColor( 37, col_min); // VIERTEL
strip.setPixelColor( 38, col_min); // VIERTEL
strip.setPixelColor( 39, col_min); // VOR
strip.setPixelColor( 40, col_min); // VOR
strip.setPixelColor( 41, col_min); // VOR
}
if (minuten == 50 || minuten == 51 || minuten == 52 || minuten == 53 || minuten == 54) {
strip.setPixelColor( 27, col_min); // ZEHN
strip.setPixelColor( 28, col_min); // ZEHN
strip.setPixelColor( 29, col_min); // ZEHN
strip.setPixelColor( 30, col_min); // ZEHN
strip.setPixelColor( 39, col_min); // VOR
strip.setPixelColor( 40, col_min); // VOR
strip.setPixelColor( 41, col_min); // VOR
}
if (minuten == 55 || minuten == 56 || minuten == 57 || minuten == 58 || minuten == 59) {
strip.setPixelColor( 48, col_min); // FÜNF
strip.setPixelColor( 49, col_min); // FÜNF
strip.setPixelColor( 50, col_min); // FÜNF
strip.setPixelColor( 51, col_min); // FÜNF
strip.setPixelColor( 39, col_min); // VOR
strip.setPixelColor( 40, col_min); // VOR
strip.setPixelColor( 41, col_min); // VOR
}
int moduloMinuten = tm.tm_min % 10;
if (moduloMinuten == 0 || moduloMinuten == 5) {
strip.setPixelColor( 21, col_min_1); // GENAU
strip.setPixelColor( 22, col_min_1); // GENAU
strip.setPixelColor( 23, col_min_1); // GENAU
strip.setPixelColor( 24, col_min_1); // GENAU
strip.setPixelColor( 25, col_min_1); // GENAU
}
if (moduloMinuten == 1 || moduloMinuten == 6) {
strip.setPixelColor(133, col_min_1);
}
if (moduloMinuten == 2 || moduloMinuten == 7) {
strip.setPixelColor(133, col_min_1);
strip.setPixelColor(135, col_min_1);
}
if (moduloMinuten == 3 || moduloMinuten == 8) {
strip.setPixelColor(133, col_min_1);
strip.setPixelColor(135, col_min_1);
strip.setPixelColor(137, col_min_1);
}
if (moduloMinuten == 4 || moduloMinuten == 9) {
strip.setPixelColor(133, col_min_1);
strip.setPixelColor(135, col_min_1);
strip.setPixelColor(137, col_min_1);
strip.setPixelColor(139, col_min_1);
}
// Sekundenanzeige
word sekunden = floor(tm.tm_sec);
if (sekunden == 10 || sekunden == 11 || sekunden == 12 || sekunden == 13 || sekunden == 14 || sekunden == 15 || sekunden == 16 || sekunden == 17 || sekunden == 18 || sekunden == 19) {
strip.setPixelColor(132, col_sec); // SEC
}
if (sekunden == 20 || sekunden == 21 || sekunden == 22 || sekunden == 23 || sekunden == 24 || sekunden == 25 || sekunden == 26 || sekunden == 27 || sekunden == 28 || sekunden == 29) {
strip.setPixelColor(132, col_sec); // SEC
strip.setPixelColor(134, col_sec); // SEC
}
if (sekunden == 30 || sekunden == 31 || sekunden == 32 || sekunden == 33 || sekunden == 34 || sekunden == 35 || sekunden == 36 || sekunden == 37 || sekunden == 38 || sekunden == 39) {
strip.setPixelColor(132, col_sec); // SEC
strip.setPixelColor(134, col_sec); // SEC
strip.setPixelColor(136, col_sec); // SEC
}
if (sekunden == 40 || sekunden == 41 || sekunden == 42 || sekunden == 43 || sekunden == 44 || sekunden == 45 || sekunden == 46 || sekunden == 47 || sekunden == 48 || sekunden == 49) {
strip.setPixelColor(132, col_sec); // SEC
strip.setPixelColor(134, col_sec); // SEC
strip.setPixelColor(136, col_sec); // SEC
strip.setPixelColor(138, col_sec); // SEC
}
if (sekunden == 50 || sekunden == 51 || sekunden == 52 || sekunden == 53 || sekunden == 54 || sekunden == 55 || sekunden == 56 || sekunden == 57 || sekunden == 58 || sekunden == 59) {
strip.setPixelColor(132, col_sec); // SEC
strip.setPixelColor(134, col_sec); // SEC
strip.setPixelColor(136, col_sec); // SEC
strip.setPixelColor(138, col_sec); // SEC
strip.setPixelColor(140, col_sec); // SEC
}
strip.setBrightness(Brightness);
strip.show();
delay(1000);
}
} // end loop
Nabends, ich bastel gerade weiter an einer Lösung.
Mein Ansatz ist nun, dass ich das Datum und Uhrzeit über eine RTC bekomme und speichere.
Die Daten gebe ich auf dem seriellen Monitor aus damit ich eine Kontrolle habe.
Nun möchte ich folgende Verknüpfung haben: wenn Wochentag dann Pixel soundso des WS2812b leuchten lassen.
if (daysOfTheWeek[now.dayOfTheWeek()] == "Friday")
for (int i=0; i<NUMPIXELS; i++)
Funktioniert nicht, könnt ihr mir weiterhelfen?
Danke
Denk mall nach was fehlt hinter den Schließenden klammern ")"
bie if und for, dazu mit so einem Schnipsel kann keiner was anfangen, wir haben Verbot unsere Glaskugel zu nutzen, TÜV ist abgelaufen.
if (now.dayOfTheWeek() == 5) {
for (int i=0; i<NUMPIXELS; i++) {
[…]
}
}
Oder etwas ausführlicher... ein Muster:
// Global
enum class Weekday : byte {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
void setup() {
Serial.begin(115200);
if (!rtc.begin()) {
Serial.println(F("Couldn't find RTC"));
Serial.flush();
abort();
}
// usw...
}
void fsmWeekday(byte day) {
switch (static_cast<Weekday>(day)) {
case Weekday::sunday:
Serial.println("Sonntag");
break;
case Weekday::monday:
Serial.println("Montag");
break;
case Weekday::tuesday:
Serial.println("Dienstag");
break;
case Weekday::wednesday:
Serial.println("Mittwoch");
break;
case Weekday::thursday:
Serial.println("Donnerstag");
break;
case Weekday::friday:
Serial.println("Freitag");
break;
case Weekday::saturday:
Serial.println("Samstag");
break;
default:
break;
}
}
void loop() {
static byte lastDay;
DateTime now = rtc.now();
byte day = now.dayOfTheWeek();
if (lastDay != day) {
lastDay = day;
fsmWeekday(day);
}
}
@Kai-R, vielen Dank, dass hat mir sehr geholfen. Das irgendwie ein Zahlenwert verarbeitet wird (die "5") habe ich mir schon gedacht, konnte allerdings kein Beispiel finden wo es umgesetzt wird. Ich versuche es eben nach "try and error", nicht zu verwechseln mit "cry and terror".
Mittlerweile hast du noch mehr geschrieben, dies muss ich erst umsetzen, danke.
Und Du must noch aufpassen, nicht Äpfel mit Birnen zu vermischen (schmeckt mir aber lecker als Saft).
Dein now
aus #8
ist was anderes als das von @Kai-R aus Post #11:
Im speziellen Fall ist wichtig, dass die Woche mit Sonntag=0 beginnt. Wenn das gegeben ist, ist es ja erst mal egal was die Quelle für die Zeitangabe ist.
Ja, das habe ich berücksichtigt, Danke. Es gibt da ja unterschiedliche Formate. Wobei mein Montag mit "1" beginnt, der Sonntag dann mit "7" endet und hier dann ein Fehler liegt.
Grüße
Dann kann man
enum class Weekday : byte {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
in
enum class Weekday : byte {monday=1, tuesday, wednesday, thursday, friday, saturday, sunday};
ändern. Damit würde das auch auf Dein System passen. Allerdings macht man es sich einfacher, wenn man berücksichtigt, dass ein Computer immer bei 0 anfängt zu zählen.
Nabend fony, leider konnte ich deinen Beitrag aufgrund der zahlreichen Rechtschreibfehler nicht so umsetzen wie es deine Intension vorsah, ich bitte dies zu berücksichtigen.
ja, das ist so eine Sache, dass die "Null" ja auch einen Wert besitzt. Pech für die Römer.
Das passt schon, hier mal ein Bild so wie es aussehen soll.