Moin,
ich habe nochmal eine Frage zum RTC3231, die gilt sicher auch für die anderen Zeitgeber.
Es gibt ja diese o.g. Funktion, welche mir die Wochentage ausgibt. Gibt es auch eine ähnliche Funktion, die mir die Monate ausgibt? Also eigentlich monthOfTheYear? Diese Funktion scheint es in der Bibliothek (RTClib) nicht zu geben. Oder muss ich mir die selbst zusammenbasteln?
Ich nutze Arduino MEGA 2560.
Gruß Uwe.
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.
Welche Lib benutzt Du (Link bitte)?
Normalerweise sollte month() das liefern.
Gruß Tommy
wirf doch mal eine Blick in die Dokumentation oder in die mitgelieferten Beispiele.
sollte ziemlich klar sein oder?
Bin mir nicht sicher, hab die direkt in der IDE über die Bibliothekverwaltung installiert.
Gruß Uwe.
Ja klar. Die Funktion dayOfTheWeek ist ja implementiert. Aber für die Monatsnamen scheint es das wirklich nicht zu geben. Ich weiß nicht, ob man das in der Bibliothek selbst nachstricken kann, dazu fehlt mir dann doch das Wissen. Dann müsste ich das über die month Variable selbst im Programmteil versuchen.
Gruß Uwe.
Das kannst Du doch genau so machen, wie in dem Beispiel mit den Tagesnamen.
Gruß Tommy
du hast das now.month() und weist somit den Monat numerisch.
Davon ziehst 1 ab und liest in einem char array ... - ja sehr ähnlich wie die Tagesnamen.
Halt aufpassen dass die Monatsnamen in das char array passen müssen (Längster Monatsname + 1!).
Du veränderst kein Library File - du machst das alles in deinem Usersketch!
ungeprüft
const char monthname[12][10] = {"Jaenner","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"};
// ... und dann:
DateTime now = rtc.now();
Serial.println(monthname[now.month()-1]);
Also: Ist ein wenig verwirrend.
Wie gesagt, die Funktion dayOfTheWeek ist ja in der Bibliothek implementiert. Der Aufruf erfolgt mit
tft.print(daysOfTheWeek[now.dayOfTheWeek()]);
Wenn ich statt dessen
tft.print(daysOfTheWeek[now.day()]);
schreibe, ist die Ausgabe auf dem tft nicht mehr lesbar, und im seriellen sowie auf dem tft Monitor wird mir eine Textzeile aus einer anderen Funktion ausgegeben. Dies führte zu der Annahme, die Ausgabe des Monats könne so auch nicht funktionieren. Aber, mit now.dayOfTheWeek() und now.month() funktioniert es. Warum, keine Ahnung (also die falsche Ausgabe bei now.day() ). Ist mir aber jetzt erstmal egal.
Den Dezember habe ich ins Array an die erste Stelle gesetzt und spare mir dadurch das -1 beim Aufruf.
Ziel erreicht. Habt vielen Dank!!!
@noiasca du hast mir vorauseilend gleich noch die Antwort auf eine Frage geliefert, die ich noch stellen wollte. Ich wusste nicht, wofür das zweite Argument im Array steht. Maximale Anzahl der Zeichen in den Arraykonstanten. Auch dafür danke!!!
Beste Grüße Uwe.
Dann warte mal auf den Dezember.
Gruß Tommy
dir ist aber schon klar dass dayOfTheWeek
/**************************************************************************/
/*!
@brief Return the day of the week.
@return Day of week as an integer from 0 (Sunday) to 6 (Saturday).
*/
/**************************************************************************/
uint8_t DateTime::dayOfTheWeek() const {
uint16_t day = date2days(yOff, m, d);
return (day + 6) % 7; // Jan 1, 2000 is a Saturday, i.e. returns 6
}
was anderes zurück gibt als day()
/*!
@brief Return the day of the month.
@return Day of the month (1--31).
*/
uint8_t day() const { return d; }
Tag der Woche vs. Tag im Monat?
day() ist für sich nicht falsch - es gibt nur ganz was anderes Zurück als dayOfWeek()!
wenn du mit beispielsweise - heute 22.6. - 22. Tag im Monat in ein Array reingehst, dass nur 7 Einträge hat ... kein Wunder dass dann Schrott angezeigt wird.
na, hast dir schon überlegt was passieren wird, wenn du dann mit Monat 12 in ein Array abfragst, dessen Nummerierung immer mit 0 beginnt? Für die Abfrage von Index 12 brauchst du also ein Array das mindestens 13 Felder hat!
Merke: Nummerierung von Arrays beginnt mit 0! (!!!).
Boah... wie blöd kann man sein
Ja klar. Der erste Fehler hat sich ja gleich bemerkbar gemacht. Naja, ob ich das mit dem Dezember gemerkt hätte, weiss ich nicht so genau. Das Programm betreibt eine Bewässerungsanlage auf meinem Balkon. Die wird ja spätestens im Oktober abgeschaltet und im April oder Mai wieder in Betrieb genommen. Dann hätte ich meine Fehler irgendwann in ein anderes Programm mitgenommen und wäre dann erst drauf gekommen, dass da was nicht stimmt ![]()
Nochmal Danke!!!
Gruß Uwe.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.