#define NBMESSAGE 10
bool HeureValide = true;
String DATE;
int idxMessage = 0;
String MessageH[NBMESSAGE];
void PrintScroll(String m) {
//Serial.println(m);
}
void StockMessage(const String &m) {
bool hasDate = (HeureValide && DATE.length() >= 16);
String fullMessage = hasDate ? (DATE + " : " + m) : m;
int prevIdx = (idxMessage == 0) ? NBMESSAGE - 1 : idxMessage - 1;
if (fullMessage == MessageH[prevIdx]) return; // Éviter les doublons exacts avec le message précédent
int8_t substitution = -1;
String replacement = "";
if (hasDate) {
String DATEcourt = DATE.substring(0, 10); // Extraction de la date JJ/MM/AAAA
if (m.indexOf("TEMPO") >= 0) { // cas particulier pour tempo, on remplace le texte en actualisant avec le dernier horaire qui devient le dernier message
for (int i = 0; i < NBMESSAGE; i++) {
if (MessageH[i].startsWith(DATEcourt) && MessageH[i].indexOf("TEMPO") >= 0) {
replacement = fullMessage;
substitution = i;
}
}
} else { // c'est pas un message TEMPO, on check s'il existe déja dans l'hitorique du jour
int derniereIdx = -1;
String suffixe = " : " + m;
for (int k = 0; k < NBMESSAGE; k++) { // Chercher si le message existe déjà pour aujourd'hui
int j = (idxMessage + 1 + k) % NBMESSAGE; // démarre du message le plus ancien
if (MessageH[j].startsWith(DATEcourt) && MessageH[j].endsWith(suffixe)) derniereIdx = j; // skip si jour different JJ/MM/AAAA ou pas le même message => derniere ligne avec le même message
}
if (derniereIdx >= 0) { // on a trouver une concordance
String& dernierMsg = MessageH[derniereIdx];
int separateur = dernierMsg.indexOf(" : ");
String heuresPart = dernierMsg.substring(11, separateur); // après JJ/MM/AAAA+espace jusque avant espace : espace (commence par HH:MM:SS existant)
int espacePos = heuresPart.indexOf(" "); // l'espace entre l'heure avec les secondes et la suite
if (espacePos != -1 && DATE.substring(11, 16) == heuresPart.substring(espacePos + 1, espacePos + 6)) { // Même minute : on rafraîchit juste les secondes sans dupliquer
replacement = DATE + dernierMsg.substring(19);
substitution = derniereIdx;
} else { // l'heure est différente : On décale l'ancienne "première heure" vers la "suite"
String historique = heuresPart.substring(0, 5);
if (heuresPart.length() > 9) historique += "+" + heuresPart.substring(9);
replacement = DATE + " " + historique + suffixe;
if (replacement.length() > 50) { // 100 !!! // Figer la ligne courante avec (A suivre)
MessageH[derniereIdx] = dernierMsg.substring(0, 16) + "+" + dernierMsg.substring(20) + " (+suite)"; // le message sera consideré différent lors de la prochaine analyse
substitution = -1;
} else {
substitution = derniereIdx;
}
}
}
}
}
// Finalisation de l'insertion
if (substitution >= 0) {
for (int i = substitution; i != prevIdx; i = (i + 1) % NBMESSAGE) // Décalage pour remonter le message substitué à la fin (plus récent)
MessageH[i] = MessageH[(i + 1) % NBMESSAGE];
MessageH[prevIdx] = replacement;
} else { // Cas standard : Nouvel ajout
MessageH[idxMessage] = fullMessage;
idxMessage = (idxMessage + 1) % NBMESSAGE;
}
PrintScroll(m);
}
void showMessage() {
int j = idxMessage;
Serial.println("*****");
for (int i = 0; i < NBMESSAGE; i++) {
if (MessageH[j] != "") Serial.println(MessageH[j]);
j = (j + 1) % NBMESSAGE;
}
Serial.println("-----");
}
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
//DATE = "09/03/2026 01:22:07";
//StockMessage("Test 1");
//showMessage();
DATE = "09/03/2026 01:22:11";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:23:22";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:24:33";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:25:44";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:26:55";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:27:00";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:28:11";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:29:22";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:30:33";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:31:44";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:32:55";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:33:00";
StockMessage("Test 1");
showMessage();
DATE = "09/03/2026 01:34:11";
StockMessage("Test 1");
showMessage();
//DATE = "09/03/2026 01:24:33";
//StockMessage("Test 2");
//showMessage();
}
void loop() {
delay(10);
}