ich benötige Ideen, wie ich bsp. eine Ansteuerung eines Relais für 1h alle zwei Tage um 05:00 Uhr morgens starten könnte.
Das RTC 3231 Modul habe ich mir bereits zugelegt. Zeitliche Abfragen mit den 05:00 Uhr morgens wären zunächst kein Problem, nur wie realisiere ich die "zwei Tages" Differenz? Mit delay() oder millis() würde ich bei so einer langen Zeitspanne ungern arbeiten wollen.
Die Ausführung könnte so aussehen:
Z.B. Montag, Mittwoch, Freitag, Sonntag, Dienstag, Donnerstag....
die RTC hat nicht nur Uhrzeit sondern auch Datum und Wochentagzähler. So kannst du den Wochentag bei der Uhrzeit zusätzlich auswerten und jeden zweiten Tag starten.
Alternativ kannst du die Weckerfunktion der RTC nutzen. Sie könnte alle zwei Tage den Arduino aus dem Standby wecken.
noiasca:
die nächste Startzeit in UTC vorgeben.
Periodisch die Zeit in UTC umrechnen und bei erreichen (überschreiten) der Startzeit,
Alarm ausführen und
nächste Startzeit in UTC vorgegeben
sollte jede Sommerzeitumstellung/Schaltjahr/ überleben.
Die UTC Zeit ist aber eine normale Zeit inkl. Datum. Wie würdest du es denn bei einem Monatswechsel / Schaltjahr machen? Z.B. hat der Februar mal 28 Tage, mal 29. Dahinter steckt doch bestimmt noch eine weitere Berechnung?
Ich hatte mir das eher so vorgestellt:
int naechsterTag = (Funktion, die den Tag als Integer liefert, also den "22");
int Berechnung = 0;
void loop() {
int aktuellerTag = (Funktion, die den Tag als Integer liefert, also den "22");
Berechnung = aktuellerTag - naechsterTag;
if (Berechnung <= 0) {
FÜHRE DEN CODE AUS;
naechsterTag = aktuellerTag + 2
}
Wäre natürlich nicht elegant bei einem Monatswechsel gelöst, würde aber für den Anfang laufen?!
Theseus:
Hallo,
die RTC hat nicht nur Uhrzeit sondern auch Datum und Wochentagzähler. So kannst du den Wochentag bei der Uhrzeit zusätzlich auswerten und jeden zweiten Tag starten.
Alternativ kannst du die Weckerfunktion der RTC nutzen. Sie könnte alle zwei Tage den Arduino aus dem Standby wecken.
Wochentag im Sinne von "Montag" (als Char) oder z.B. "01" (als Int)?
Falls ja, dann könnte man es über eine Switch Case Abfrage lösen.
Die Weckerfunktion ist mir unbekannt und mit dem Standby habe ich mich leider noch nicht beschäftigt.
Ich komme leider aus einem anderen Bereich (Prozessleittechnik mit Siemens PCS 7 inkl. BATCH und SCL Bausteinprogrammierung sowie Honeywell Experion PKS), so dass ich nicht gerade der Fitteste im Bereich Mikrocontrollerprogrammierung bin.
Der Tag wird als laufende Nummer von 1 bis 7 ausgegeben. Der Wochentagwechsel läuft unabhängig von Schaltjahr und usw. einfach durch. Für deine Zwecke ideal.
Um einen Einstieg in die Programmierung der DS3231 zu finden kann ich dir sehr diese Seite und das Datenblatt empfehlen.
sorry, ich habe mich unpräzise ausgedrückt. Mir ging es um einen Unix-Zeitstempel Unixzeit – Wikipedia
Sekunden seit 1. Januar 1970, 00:00 Uhr UTC
Die meisten Time-Libraries haben derartiges zur Verfügung, bzw. kannst du derartiges abkupfern. Damit kommst du auf ein unsigned Variable mit der du gemütlich rechnen kannst ala
vielen Dank für eure Antworten. Der Link zum Tutorial scheint meine Probleme in einfacher Art zu lösen.
Ich hätte noch eine Frage, die jetzt zwar Off-Topic ist, aber hoffentlich noch von euch (oder jemand Anderem) beantwortet werden kann.
Ich habe so ein Mini OLED Display 128*64, welche über den I2C Bus ebenso wie die RTC 3231 kommuniziert. Jetzt bin ich mir aktuell noch nicht sicher, ob beide Teilnehmer gleichzeitig über den Bus funktionieren können.
Aus der Prozessleittechnik kenne ich es so, dass die verschiedenen Busteilnehmer unterschiedliche Adressen parametriert bekommen müssen, um mit diesen kommunizieren zu können.
Kann man Busadressen auch per Software überschreiben?
der RTC hat eine Adresse am I2C,
Wenn das Display für I2C geeignet ist - dann hat es auch eine.
Lass mal einen I2C-Scanner drüberlaufen und dann sollst du die zwei Adressen sehen.
Das Auslesen hat für das RTC Modul perfekt geklappt, leider ist das Display aktuell im Garten, so dass ich es erst die Tage testen kann.
Was würde man machen, wenn zwei Bauteile dieselbe Adresse haben? Kann man die Adresse ändern? Falls nein, hat man wohl mit dem Bauteil Pech gehabt, korrekt?
Beogradjanin:
Was würde man machen, wenn zwei Bauteile dieselbe Adresse haben? Kann man die Adresse ändern? Falls nein, hat man wohl mit dem Bauteil Pech gehabt, korrekt?
Da musst du dir aktuell keine Gedanken machen.
Deine RTC und das Display haben unterschiedliche Adressen.
Die RTC kannst du nicht ändern, das Display evtl. schon.