/*********
AFFICHAGE TEXTE LONG DEFILANT SUR OLED
PP le 1/03 /2025
d'apres :weggooier Rsd
https://www.youtube.com/watch?v=sTYPuDMPva8
et
https://stackoverflow.com/questions/40564050/scroll-long-text-on-oled-display
materiel: ESP 32; afficheur OLED 0,96"
*********/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
char message[]="Ceci est un message tres long"; // le message qui défilera
int x; // position du curseur sur la ligne défilante
int minX; // position minimale du curseur,fonction de la longueur du message
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(200);
display.clearDisplay(); // efface l'afficheur
display.setTextColor(WHITE); // texte en blanc sur fond noir
display.setTextWrap(false); // inhibe le retour a la ligne sur OLED
display.display(); // met a jour l'affichage
x = display.width(); // initialise le curseur a longueur OLED en pixel
minX = -12 * strlen(message); // 12 = 6 pixels/character * text size 2
delay(200);
}
void loop() {
display.clearDisplay(); // efface l'afficheur
display.setCursor(0,7); // positionne le curseur 7 eme ligne de pixel
display.setTextSize(1); // taille 1 pour le texte statique
display.print(" Texte Statique"); // Texte statique
display.setTextSize(2); // taille 2 pour le texte défilant
display.setCursor(x,20); // position curseur variable (x) en longueur, 20 pixels en hauteur
display.print(message); // texte défilant fonction de x
display.display(); // met a jour l'affichage
x=x-4; // vitesse du défilement: 1 lent, 10 rapide etc..
if(x < minX) x= display.width(); // reinitialisation curseur en x a chaque défilement complet
// affichage sur moniteur série pour compréhension du code
Serial.print("longueur display en pixel: ");
Serial.print(display.width());
Serial.print(" longueur du texte: ");
Serial.print(strlen(message));
Serial.println(" caracteres ");
Serial.print("position curseur (x): ");
Serial.print(x);
Serial.print(" valeur minimum position curseur (minx): ");
Serial.println(minX);
}