Hallo,
ich versuche mithilfe des Arduinos und "simpler" Mathematik (synodische Periode) die aktuelle Mondphase zu berechnen.
Dafür muss ich die Zeitspanne eines vergangenen Vollmondes, bis zum jetztigen Zeitpunkt (RTC) ausrechnen.
Das Problem:
Ich habe noch nicht mit Zeit gerechnet. Mein bisheriger Ansatz war der Versuch, alle Jahre, Monate, Tage, usw. einzelnt auszurechnen (siehe mein Code).
Das das sehr unschön aussieht brauche ich wohl keinem zu sagen, davon mal abgesehen, funktioniert es nicht. Der Code spuckt immer falsche Ergebnisse aus. Richtig Falsch. Nicht nur um ein paar Tage, wie ich es noch verstehen könnte, da meine Berechnung ja sehr ungenau ist (ein Monat = 30,5 Tage).
Ich habe versucht mit verschiedenen Libarys meine Zeitrechnung zu schreiben, aber wirklich voran komme ich nicht, auch weil nicht alle mit dem RTC Modul kompatibel sind?...
Wäre schön wenn mir jemand helfen könnte.
LG
Tage_Seit_Letztem_Vollmond = ((Time.year() - LastFullmoonYear) * 365.00) + ((Time.month() - LastFullmoonMonth) * 30.5) + (Time.day() - LastFullmoonDay) + ((Time.hour() - LastFullmoonHour) / 24.00);
void MoonUpdate() { // bestimme den Status des Mondes (Akutelle Phase)
double MoonPhaseAsFloat = MoonUpdateDouble();
Serial.println("Calculated moon result: " + String(MoonPhaseAsFloat,2));
if(MoonPhaseAsFloat == 0.0)
MoonPhaseAsFloat = 1.00;
if(MoonPhaseAsFloat < 0.25) // Abnehmender Dreiviertel Mond
{
Serial.println("Abnehmender Dreiviertel Mond");
MoonPhase = 5;
}
else if (MoonPhaseAsFloat == 0.25) // Abnehmender Halbmond
{
Serial.println("Abnehmender Halbmond");
MoonPhase = 6;
}
else if(0.25 < MoonPhaseAsFloat && MoonPhaseAsFloat < 0.50) // Abnehmende Sichel
{
Serial.println("Abnehmende Sichel");
MoonPhase = 7;
}
else if(MoonPhaseAsFloat == 0.50) // Neumond
{
Serial.println("Neumond");
MoonPhase = 0;
}
else if(0.50 < MoonPhaseAsFloat && MoonPhaseAsFloat < 0.75) // Zunehmende Sichel
{
Serial.println("Zunehmende Sichel");
MoonPhase = 1;
}
else if(MoonPhaseAsFloat == 0.75) // Zunehmender Halbmond
{
Serial.println("Zunehmender Halbmond");
MoonPhase = 2;
}
else if(0.75 < MoonPhaseAsFloat && MoonPhaseAsFloat < 1.00) // Zunehmender Dreiviertel Mond
{
Serial.println("Zunehmender Dreiviertel Mond");
MoonPhase = 3;
}
else //MoonPhaseAsFloat == 1 // Vollmond
{
Serial.println("Vollmond");
MoonPhase = 4;
}
}
double MoonUpdateDouble() // Berechne die Aktuelle Mondphase (1 = Vollmond / 0.5 = Neumond)
{
double dDaySinceLastFullmoon = Tage_Seit_Letztem_Vollmond / 29.53;
int iToHundret = (dDaySinceLastFullmoon - int(dDaySinceLastFullmoon)) * 100;
return (double) iToHundret / 100; //Needed to get only 2 decimal places
}