From ca0e6afa8f92a065a469017c89a3f436c0c55677 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Mon, 19 Oct 2026 18:59:46 +0200 Subject: [PATCH] Software auf neue LED-Aufteilung der Wortfolie angepasst (104 LEDs, Streifen pro Wort im Zickzack) Co-Authored-By: Claude Sonnet 5.5 --- software/arduino/arduino.ino | 57 +++++++++++++++++++++--------------- software/pio/src/main.cpp | 57 +++++++++++++++++++++--------------- 2 files changed, 66 insertions(+), 48 deletions(-) diff --git a/software/arduino/arduino.ino b/software/arduino/arduino.ino index 73192dc..66e626e 100644 --- a/software/arduino/arduino.ino +++ b/software/arduino/arduino.ino @@ -8,7 +8,11 @@ // ================= LED ================= #define LED_PIN D4 -#define NUMPIXELS 110 +// Neue Aufteilung (cad/openscad/gemeinsam.scad): je Wort ein LED-Streifen mit einer +// LED pro Buchstabe, Zickzack durch die Zeilen. Zeile 0 laeuft links->rechts, Zeile 1 +// rechts->links usw. Die Fuellbuchstaben gibt es nicht, nur die Woerter (inkl. NTP, +// API, RTC, ESP). Minutenpunkte sind abgeschaltet. +#define NUMPIXELS 104 Adafruit_NeoPixel pixels(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800); // ================= SERVER & NTP ================= @@ -181,29 +185,34 @@ void fadeToTargetSmooth(int steps = 30, int delayMs = 15){ } // ================= WORTUHR LOGIK ================= -void word_ES(){ setRange(0,1); } -void word_IST(){ setRange(3,5); } -void word_FUENF_M(){ setRange(7,10); } -void word_ZEHN_M(){ setRange(18,21); } -void word_ZWANZIG(){ setRange(11,17); } -void word_VIERTEL(){ setRange(22,28); } -void word_VOR(){ setRange(30,32); } -void word_NACH(){ setRange(40,43); } -void word_HALB(){ setRange(33,36); } -void word_EINS(){ setRange(62,65); } -void word_EIN(){ setRange(62,64); } -void word_ZWEI(){ setRange(55,58); } -void word_DREI(){ setRange(66,69); } -void word_VIER(){ setRange(73,76); } -void word_FUENF_H(){ setRange(51,54); } -void word_SECHS(){ setRange(83,87); } -void word_SIEBEN(){ setRange(88,93); } -void word_ACHT(){ setRange(77,80); } -void word_NEUN(){ setRange(44,47); } -void word_ZEHN_H(){ setRange(106,109); } -void word_ELF(){ setRange(103,105); } -void word_ZWOELF(){ setRange(94,98); } -void word_UHR(){ setRange(99,101); } +// LED-Indizes in Kettenreihenfolge (Zeilen im Zickzack, Woerter je Zeile in Laufrichtung) +void word_ES(){ setRange(0,1); } // Zeile 0 (links->rechts) +void word_IST(){ setRange(2,4); } +void word_FUENF_M(){ setRange(5,8); } +void word_ZEHN_M(){ setRange(9,12); } // Zeile 1 (rechts->links) +void word_ZWANZIG(){ setRange(13,19); } +void word_VIERTEL(){ setRange(20,26); } // Zeile 2 +void word_VOR(){ setRange(27,29); } +void word_NACH(){ setRange(30,33); } // Zeile 3 (rechts->links) +// NTP 34-36 +void word_HALB(){ setRange(37,40); } +void word_NEUN(){ setRange(41,44); } // Zeile 4 +// API 45-47 +void word_FUENF_H(){ setRange(48,51); } +void word_EINS(){ setRange(52,55); } // Zeile 5 (rechts->links): S, EIN, RTC, ZWEI +void word_EIN(){ setRange(53,55); } +// RTC 56-58 +void word_ZWEI(){ setRange(59,62); } +void word_DREI(){ setRange(63,66); } // Zeile 6 +// ESP 67-69 +void word_VIER(){ setRange(70,73); } +void word_SECHS(){ setRange(74,78); } // Zeile 7 (rechts->links) +void word_ACHT(){ setRange(79,82); } +void word_SIEBEN(){ setRange(83,88); } // Zeile 8 +void word_ZWOELF(){ setRange(89,93); } +void word_ZEHN_H(){ setRange(94,97); } // Zeile 9 (rechts->links) +void word_ELF(){ setRange(98,100); } +void word_UHR(){ setRange(101,103); } String getTimeText(int h, int m){ int m5 = (m/5)*5; diff --git a/software/pio/src/main.cpp b/software/pio/src/main.cpp index 73192dc..66e626e 100644 --- a/software/pio/src/main.cpp +++ b/software/pio/src/main.cpp @@ -8,7 +8,11 @@ // ================= LED ================= #define LED_PIN D4 -#define NUMPIXELS 110 +// Neue Aufteilung (cad/openscad/gemeinsam.scad): je Wort ein LED-Streifen mit einer +// LED pro Buchstabe, Zickzack durch die Zeilen. Zeile 0 laeuft links->rechts, Zeile 1 +// rechts->links usw. Die Fuellbuchstaben gibt es nicht, nur die Woerter (inkl. NTP, +// API, RTC, ESP). Minutenpunkte sind abgeschaltet. +#define NUMPIXELS 104 Adafruit_NeoPixel pixels(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800); // ================= SERVER & NTP ================= @@ -181,29 +185,34 @@ void fadeToTargetSmooth(int steps = 30, int delayMs = 15){ } // ================= WORTUHR LOGIK ================= -void word_ES(){ setRange(0,1); } -void word_IST(){ setRange(3,5); } -void word_FUENF_M(){ setRange(7,10); } -void word_ZEHN_M(){ setRange(18,21); } -void word_ZWANZIG(){ setRange(11,17); } -void word_VIERTEL(){ setRange(22,28); } -void word_VOR(){ setRange(30,32); } -void word_NACH(){ setRange(40,43); } -void word_HALB(){ setRange(33,36); } -void word_EINS(){ setRange(62,65); } -void word_EIN(){ setRange(62,64); } -void word_ZWEI(){ setRange(55,58); } -void word_DREI(){ setRange(66,69); } -void word_VIER(){ setRange(73,76); } -void word_FUENF_H(){ setRange(51,54); } -void word_SECHS(){ setRange(83,87); } -void word_SIEBEN(){ setRange(88,93); } -void word_ACHT(){ setRange(77,80); } -void word_NEUN(){ setRange(44,47); } -void word_ZEHN_H(){ setRange(106,109); } -void word_ELF(){ setRange(103,105); } -void word_ZWOELF(){ setRange(94,98); } -void word_UHR(){ setRange(99,101); } +// LED-Indizes in Kettenreihenfolge (Zeilen im Zickzack, Woerter je Zeile in Laufrichtung) +void word_ES(){ setRange(0,1); } // Zeile 0 (links->rechts) +void word_IST(){ setRange(2,4); } +void word_FUENF_M(){ setRange(5,8); } +void word_ZEHN_M(){ setRange(9,12); } // Zeile 1 (rechts->links) +void word_ZWANZIG(){ setRange(13,19); } +void word_VIERTEL(){ setRange(20,26); } // Zeile 2 +void word_VOR(){ setRange(27,29); } +void word_NACH(){ setRange(30,33); } // Zeile 3 (rechts->links) +// NTP 34-36 +void word_HALB(){ setRange(37,40); } +void word_NEUN(){ setRange(41,44); } // Zeile 4 +// API 45-47 +void word_FUENF_H(){ setRange(48,51); } +void word_EINS(){ setRange(52,55); } // Zeile 5 (rechts->links): S, EIN, RTC, ZWEI +void word_EIN(){ setRange(53,55); } +// RTC 56-58 +void word_ZWEI(){ setRange(59,62); } +void word_DREI(){ setRange(63,66); } // Zeile 6 +// ESP 67-69 +void word_VIER(){ setRange(70,73); } +void word_SECHS(){ setRange(74,78); } // Zeile 7 (rechts->links) +void word_ACHT(){ setRange(79,82); } +void word_SIEBEN(){ setRange(83,88); } // Zeile 8 +void word_ZWOELF(){ setRange(89,93); } +void word_ZEHN_H(){ setRange(94,97); } // Zeile 9 (rechts->links) +void word_ELF(){ setRange(98,100); } +void word_UHR(){ setRange(101,103); } String getTimeText(int h, int m){ int m5 = (m/5)*5;