Hi,
coole Idee!
Ich bin leider kein Arduino- oder C-Spezialist.
Dafür habe ich so ein wenig Erfahrung mit dem Coden und irgendwie sind die Best Practices ja in allen Sprachen gleich... daher unten ein paar Ideen als Fragmente
Wichtig: Ich habe keinen Compiler drüber laufen lassen, d.h. keine Garantie
Wie machst du das mit dem Dimmen technisch?
Kann man ein Arduino da direkt an den Treiber anschließen?
Ich glaube das muss ich auch mal genauer anschauen!
Bin in jedem Fall sehr gespannt, was da noch so kommt bei deinem Projekt
// der nachfolgende Block sind auch Konstanten, oder?
// ggf.:
// LED settings
static const byte LED_OFF = 255;
static const byte LED_MIN_DUTY = 230;
static const byte LED_MAX_DUTY = 0;
// fan settings
static const byte FAN_OFF = 0;
static const byte FAN_MIN_DUTY = 50;
static const byte FAN_MAX_DUTY = 255;
// Funktionen lieber ohne Kommentar dafür mit sprechendem Namen
unsigned long toSecondsAfterMidnight(RTCDateTime time)
{
return (time.hour*3600L)+(time.minute*60L)+time.second;
}
// generell ruhig auch so was in eine Funktion auslagern
// das vereinfacht die Lesbarkeit der eigentlichen Logik
void printDateAndTime(RTCDateTime time)
{
// print date
Serial.print("[");
if(time.day<10)Serial.print("0");
Serial.print(time.day); Serial.print(".");
if(time.month<10)Serial.print("0");
Serial.print(time.month); Serial.print(".");
Serial.print(time.year); Serial.print(" ");
// print time
if(time.hour<10)Serial.print("0");
Serial.print(time.hour); Serial.print(":");
if(time.minute<10)Serial.print("0");
Serial.print(time.minute); Serial.print(":");
if(time.second<10)Serial.print("0");
Serial.print(time.second); Serial.print("] ");
}
// am Anfang von loop() könnte mit umgekehrter Logik
// geprüft werden, ob die Parameter valide sind
// andernfalls Abbruch
// das sollte IMHO das äußere if sparen: "if( sunrise>0 && sunset>0 && sunrise!=sunset)"
if( sunrise<0 || sunset<0 || sunrise==sunset)
{
// TODO exit with error
}
Alles anzeigen
Noch ein paar Fragen zur Funktionsweise des Arduinos/Codes:
- hat der eine richtige Uhr, d.h. man bekommt die tatsächliche Zeit?
- muss der wirklich jede Sekunde neu berechnen? mir erscheint die Auflösung ein wenig zu hoch für den Zweck
- ggf. ist natürlich die Frage: kann man den für eine gewisse Zeit idle'n lassen (schlafen schicken)?