Guten Tag zusammen,
bei meinem Projekt zu einer Wordclock habe ich meinen Code nun schon ein paar mal überarbeitet. Hat etwas gedauert, da ich bisher immer nur sehr gelegentlich programmiere. Möchte mich dennoch immer gerne verbessern und würde deshalb gerne eure Meinung zu meiner derzeitigen Version, und Verbesserungsvorschläge, erfahren.
Für die Wordclock sollen, wie vielleicht bekannt, bestimmte LED´s angesteuert werden. Für die Stunden und Minuten war es bisher recht sauber und übersichtlich. Was nicht sehr effizient war, war die Zuordnung der Wörter zu den jeweiligen Zeiten.
Im alten Code sah es in etwa so aus:
//UpdateWords - 5er-Schritte
byte x = rtc_minutes_new / 5;
if(x == 1 || x == 5 || x == 7 || x == 11) { OutputTime(Words[fuenf_vn] ); } //Es ist "fünf nach/vor", fünf vor/nach halb.
if(x == 2 || x == 10) { OutputTime(Words[zehn_vn] ); } //Es ist zehn vor/nach.
im aktuellem so:
struct Time_Words {
byte trigger_size;
byte trigger[5];
byte led_size;
byte led[7];
};
//100 = immer an
Time_Words Words[] = {
{ 1, { 100 }, 2, { 0, 1 }}, //es
{ 1, { 100 }, 3, { 3, 4, 5 }}, //ist
{ 1, { 0 }, 4, { 99, 100, 101 }}, //uhr
{ 4, { 10, 15, 20, 35 }, 4, { 33, 34, 35, 36 }}, //nach
{ 5, { 25, 40, 45, 50, 55 }, 3, { 41, 42, 43 }}, //vor
{ 3, { 25, 30, 35 }, 4, { 44, 45, 46, 47 }}, //halb
{ 2, { 15, 45 }, 7, { 26, 27, 28, 29, 30, 31, 32 }}, //viertel_vn
{ 2, { 20, 40 }, 7, { 11, 12, 13, 14, 15, 16, 17 }}, //zwanzig_vn
{ 4, { 5, 25, 35, 55 }, 4, { 7, 8, 9, 10 }}, //fuenf_vn
{ 2, { 10, 50 }, 4, { 18, 19, 20, 21 }} //zehn_vn
};
void setup() {
}
void loop() {
}
void CalcOutput() {
//Words
byte minutes = 7; //Bsp. - zum testen
byte &x = minutes; //Bsp. - zum testen
for (byte i = 0; i <= sizeof Words/sizeof Words[0]; i++) {
for (byte j = 0; j <= Words[i].trigger_size; j++) {
if (Words[i].trigger[j] == x || Words[i].trigger[j] == 100) {
UpdateClock(Words[i].trigger[j]);
} else {
break;
}
}
}
}
void UpdateClock(const byte& led) { //Möglicherweise eine Anpassung von "const byte&" zu "const Time_Words& word" nötig
pixels.setPixelColor(led, pixels.Color(100, 100, 100));
}
DIe "trigger" sind die Wörter die zur jeweiligen Uhrzeit ausgegeben werden sollen. Denke der Rest ist selbsterklärend. Sonst bitte fragen.
Danke & Gruß ![]()