Wortuhr ohne Uhrzeit aber mit Wochentagen

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 :grinning:

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.

Hier zum anschauen

Code im Testmodus (Update alle Sekunde)"

Betriebsmodus durch Auskommentieren von Zeile 6 herstellen :slight_smile:

// 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...

jetzt fällts mir erst auf, meine Wortuhr für arme Leut' mit 16x16 Pixel hat Wochentage:

1 Like

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);
  }
}
1 Like

@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.
rentneruhr