Files
Clément SAILLANT 1698c4d375 first commit
2025-08-01 17:22:17 +02:00

161 lines
4.5 KiB
C++

/**
* Test du module RTC DS3231
* Ce programme permet de tester et configurer le module RTC
*/
#include <Arduino.h>
#include <RTClib.h>
RTC_DS3231 rtc;
char daysOfTheWeek[8][10] = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "ERROR"};
String inputString = "";
bool stringComplete = false;
int d_year;
byte d_month, d_day, daysOfTheWeek_Val;
byte t_hour, t_minute, t_second;
unsigned long prevMill_Update_DateTime = 0;
const long interval_Update_DateTime = 1000;
// Fonction pour traiter les données reçues
String getValue(String data, char separator, int index) {
int found = 0;
int strIndex[] = { 0, -1 };
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) {
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
// Gestion des événements série
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n') {
stringComplete = true;
return;
}
inputString += inChar;
}
}
// Récupération date/heure
void get_DateTime() {
DateTime now = rtc.now();
d_year = now.year();
d_month = now.month();
d_day = now.day();
daysOfTheWeek_Val = now.dayOfTheWeek();
if (daysOfTheWeek_Val > 7 || daysOfTheWeek_Val < 0) daysOfTheWeek_Val = 7;
t_hour = now.hour();
t_minute = now.minute();
t_second = now.second();
char full_DateTime[60];
sprintf(full_DateTime, "%s | %02d-%02d-%d | %02d:%02d:%02d",
daysOfTheWeek[daysOfTheWeek_Val], d_day, d_month, d_year, t_hour, t_minute, t_second);
Serial.print("Date Time : ");
Serial.println(full_DateTime);
}
void setup() {
delay(2000);
Serial.begin(115200);
inputString.reserve(200);
Serial.println();
Serial.println("------------");
Serial.println("Starting the DS3231 RTC module.");
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
Serial.println("Successfully started the DS3231 RTC module.");
Serial.println("------------");
Serial.println();
Serial.println();
Serial.println("------------");
Serial.println("Serial monitor settings :");
Serial.println("- End Char : Newline");
Serial.println("- Baud Rate : 115200");
Serial.println("------------");
Serial.println();
Serial.println();
Serial.println("------------");
Serial.println("Example command to set the time and date on the RTC module : ");
Serial.println("SET,2024,8,1,12,30,0");
Serial.println();
Serial.println("SET = command to set.");
Serial.println("2024 = Year.");
Serial.println("8 = Month.");
Serial.println("1 = Day.");
Serial.println("12 = Hour.");
Serial.println("30 = Minute.");
Serial.println("0 = Second.");
Serial.println("------------");
Serial.println();
delay(3000);
}
void loop() {
serialEvent();
unsigned long currentMillis_Update_DateTime = millis();
if (currentMillis_Update_DateTime - prevMill_Update_DateTime >= interval_Update_DateTime) {
prevMill_Update_DateTime = currentMillis_Update_DateTime;
get_DateTime();
}
if (stringComplete) {
Serial.print("Input String : ");
Serial.println(inputString);
String command = getValue(inputString, ',', 0);
if (command == "SET") {
Serial.println();
Serial.println("------------");
Serial.println("Set the Time and Date of the DS3231 RTC Module.");
Serial.println("Incoming settings data : ");
d_year = getValue(inputString, ',', 1).toInt();
d_month = getValue(inputString, ',', 2).toInt();
d_day = getValue(inputString, ',', 3).toInt();
t_hour = getValue(inputString, ',', 4).toInt();
t_minute = getValue(inputString, ',',5).toInt();
t_second = getValue(inputString, ',', 6).toInt();
Serial.print("- Year : ");Serial.println(d_year);
Serial.print("- Month : ");Serial.println(d_month);
Serial.print("- Day : ");Serial.println(d_day);
Serial.print("- Hour : ");Serial.println(t_hour);
Serial.print("- Minute : ");Serial.println(t_minute);
Serial.print("- Second : ");Serial.println(t_second);
Serial.println("Set Time and Date...");
rtc.adjust(DateTime(d_year, d_month, d_day, t_hour, t_minute, t_second));
Serial.println("Setting the Time and Date has been completed.");
Serial.println("------------");
Serial.println();
}
inputString = "";
stringComplete = false;
}
}