#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
// Initialisation de la communication série simulée
Serial.begin(115200);
// Initialisation de l'écran OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
if (Serial.available()) {
String data = Serial.readStringUntil('\n'); // Lire les données reçues via série
processMessage(data);
}
}
void processMessage(String message) {
display.clearDisplay(); // Effacer l'affichage précédent
// Diviser les informations envoyées par Python (séparateur "|")
int sep1 = message.indexOf('|');
int sep2 = message.indexOf('|', sep1 + 1);
int sep3 = message.indexOf('|', sep2 + 1);
String title = message.substring(0, sep1);
String artist = message.substring(sep1 + 1, sep2);
String currentTime = message.substring(sep2 + 1, sep3);
String duration = message.substring(sep3 + 1);
// Organiser l'affichage sur l'écran OLED
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Affichage "Now Playing"
display.setCursor(0, 0);
display.println("Now Playing:");
// Affichage du titre (éventuellement tronqué s'il est trop long)
display.setCursor(0, 12); // Décalage en Y pour éviter le chevauchement
if (title.length() > 20) {
title = title.substring(0, 20); // Limiter la longueur du titre
}
display.println("Title: " + title);
// Affichage de l'artiste
display.setCursor(0, 24); // Ajustement du Y pour l'artiste
if (artist.length() > 20) {
artist = artist.substring(0, 20); // Limiter la longueur de l'artiste
}
display.println("Artist: " + artist);
// Affichage du temps de lecture et de la durée totale
display.setCursor(0, 36); // Ajustement du Y pour éviter les chevauchements
display.print("Time: " + currentTime + " / " + duration);
// Mettre à jour l'affichage OLED
display.display();
}