const uint8_t nbLigneBuffScrool = 10;
const uint8_t nbLigneVisible = 6;
uint8_t idxBufferMsgOled = 0;
String bufferMessageOLED[nbLigneBuffScrool];
int LEDgroupe = 13;
int oled = 1;
// change le contenu d'un texte pour traiter les caracteres hors Ascii
String Ascii(String S) {
char rep[2]; // On utilise un tableau de char de taille 2 : le caractère cible + '\0'
rep[1] = '\0';
rep[0] = 'e';
S.replace("é", rep);
rep[0] = 'a';
S.replace("â", rep);
rep[0] = 'a';
S.replace("à", rep);
rep[0] = 'c';
S.replace("ç", rep);
rep[0] = 'e';
S.replace("ê", rep);
rep[0] = 'e';
S.replace("è", rep);
rep[0] = 'u';
S.replace("ù", rep);
S.replace("œ", "oe");
return S;
}
void PrintScroll(String m) {
// nettoyage avant envoi vers Port série, telnet et LCD
if (m.indexOf("<a ") >= 0 && m.indexOf(">") > m.indexOf("<a ") && m.indexOf("</a>") > m.indexOf(">")) { // on a un hyperlien inexploitable hors navigateur
while (m.indexOf("<a ") >= 0) {
int d = m.indexOf("<a "); // pointe sur < ouvrant
int f = m.indexOf(">", m.indexOf("<a ")); // pointe sur > fermant
f++;
String s = m.substring(0, d) + m.substring(f);
s.replace("</a>", "");
m = s;
}
}
Serial.printf("Ligne a traiter : %s\n", m.c_str());
// if (LEDgroupe >= 10 && oled != nullptr) {
if (LEDgroupe >= 10) {
int idxDernierMessage = (idxBufferMsgOled - 1 + nbLigneBuffScrool) % nbLigneBuffScrool;
String dernierMessage = bufferMessageOLED[idxDernierMessage];
Serial.printf("old : '%s' <==> m : '%s'\n", dernierMessage.c_str(), m.c_str());
if (dernierMessage != m) {
Serial.println("Ajout et affichage");
bufferMessageOLED[idxBufferMsgOled] = m; // ajoute le nouveau texte dans le buffer circulaire seulement s'il n'existe pas déja
idxBufferMsgOled = (idxBufferMsgOled + 1) % nbLigneBuffScrool;
//oled->setTextSize(1);
//oled->fillRect(0, 16, oled->width(), oled->height() - 16, RGB565_BLACK); // efface la zone de scroll
//oled->setCursor(0, 16);
for (int i = nbLigneVisible - 1; i >= 0; i--) { // probleme si un message est sur plusieurs ligne ?
int idx = (idxBufferMsgOled - 1 - i + nbLigneBuffScrool) % nbLigneBuffScrool;
//oled->println(Ascii(bufferMessageOLED[idx]));
}
//oled->flush();
} else {
Serial.println("Non géré");
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
PrintScroll("Ligne 1");
PrintScroll("Ligne 2");
PrintScroll("Ligne 3");
PrintScroll("Ligne 4");
PrintScroll("Ligne 4");
PrintScroll("Ligne 4");
PrintScroll("Ligne 5");
PrintScroll("Ligne 6");
PrintScroll("Ligne 7");
PrintScroll("Ligne 8");
PrintScroll("Ligne 9");
PrintScroll("Ligne 10");
PrintScroll("Ligne 11");
PrintScroll("Ligne 12");
for (int i = 0; i < 26; i++) {
PrintScroll(String(i) + String(char('A' + i)));
}
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}