Ich habe in einem Beispiel von Bonezegei die RTC ausprobiert.
Bim umstellen von 12 auf 24h Format stimmt allerdings die Uhrzeit nicht mehr.
Statt zB 11 Uhr steht dann 31 Uhr. Wo ist da der Fehler ?
Ich habe eine Arduino MEGA 2560 von Elegoo mit dem RTC Modul DS1307 Module V03
/*
Set Time And Date
Author: Bonezegei (Jofel Batutay)
Date: Jan 26 2024
*/
#include <Bonezegei_DS3231.h>
Bonezegei_DS3231 rtc(0x68);
void setup() {
Serial.begin(9600);
rtc.begin();
rtc.setFormat(24); //Set 12 Hours Format
//rtc.setAMPM(1); //Set AM or PM 0 = AM 1 =PM
rtc.setTime("11:22:00"); //Set Time Hour:Minute:Seconds
rtc.setDate("6/25/25"); //Set Date Month/Date/Year
}
void loop() {
char d[32];
if (rtc.getTime()) {
//Serial.printf("Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());
sprintf(d, "Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());
Serial.print(d);
if (rtc.getFormat() == 12) { // returns 12 or 24 hour format
if (rtc.getAMPM()) { //return 0 = AM 1 = PM
Serial.print("PM ");
} else {
Serial.print("AM ");
}
}
//Serial.printf("Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());
sprintf(d, "Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());
Serial.print(d);
}
delay(1000);
}
Da bei beiden Uhren die Stunden und die Kennungen 12/24 und AM/PM auf denselben Bits sind, tippe ich drauf, dass du dich schon entscheiden musst,und beim Zeit stellen und abrufen dasselbe Format wählen. (Wieso willst du überhaupt 2*1..12 statt 0..23 ?)
Vielleicht hast du ja nur die Doku zur Lib(?) falsch gelesen.
Wenn es Nachmittag ist und Du von 12h auf 24H umschaltest, dann wird das Bit PM/AM, das 1 ist, weil es Nachmittag (PM) ist, als zweites Bit der Zehner der Stunden interpretiert, also die Stunden ( 0 oder 1) als 2 bzw 3 interpretiert und dann kommst Du auf bis zu 32 Stunden.
Ich würde sagen, wenn Du von 12 auf 24 umschaltest bzw zurück, mußt Du die Stunden vorher auslesen und nach dem Wechsel im richtigen Format zurückschreiben. Die RTC macht das nicht automatisch da allgemein üblich ist, die eine oder die andere Zeitdarstellung zu wählen und dann niemals zu wechseln.