OLED
tools
tools/OLED.h
tool
driver
experimental
driver
experimental
Terminal OLED (0.96") Affiche le dernier message reçu, avec un pictogramme Emoji optionnel (voir crepp::tools::Emoji) en 64x64 px, à gauche du texte. A cette taille, le pictogramme occupe toute la hauteur de l'écran : une seule ligne de contenu est visible à la fois (pas de défilement multi-lignes).
Méthodes publiques
| Méthode | Description | Paramètres | Retour |
|---|---|---|---|
|
OLED()
OLED(uint8_t screenWidth = 128, uint8_t screenHeight = 64, int8_t resetPin = -1);
|
Constructeur / | screenWidth: : largeur de l'écran en pixels (128 par défaut) screenHeight: : hauteur de l'écran en pixels (64 par défaut, 0.96") resetPin: : broche RESET matérielle si utilisée, -1 sinon (partagée avec le MCU) / |
|
|
begin()
begin(uint8_t i2cAddress = 0x3C);
|
Méthode begin() Initialise la communication I2C avec l'écran et efface l'affichage. / | i2cAddress: : adresse I2C de l'écran (0x3C par défaut sur la plupart des 0.96") | truetrue si l'écran a été détecté et initialisé correctement / |
|
println()
println(const char *text);
|
Méthode println() Affiche une ligne de texte (efface le contenu précédent : à cette taille d'icône, une seule ligne tient sur l'écran). / | text: : message à afficher (tronqué à MAX_LINE_LENGTH caractères) / | |
|
println()
println(const String &text);
|
|||
|
println()
println(Emoji::Type icon, const char *text);
|
Méthode println() avec pictogramme Emoji Identique à println(), mais affiche un pictogramme Emoji (64x64 px, météo ou système, cf. crepp::tools::Emoji::Type) à gauche du texte. / | icon: : pictogramme à afficher (Emoji::Type::EMOJI_NONE = comportement identique à println()) text: : message à afficher (tronqué, plus court qu'une ligne sans icône vu la place prise) / |
|
|
println()
println(Emoji::Type icon, const String &text);
|
|||
|
clear()
clear();
|
Méthode clear() Efface l'écran et vide l'historique des lignes. / | ||
|
configureGraph()
configureGraph(GraphType type, float minValue, float maxValue, uint16_t maxPoints = GRAPH_CAPACITY);
|
Méthode configureGraph() Configure un graphe (barres ou points) qui occupera tout l'écran au prochain addPoint(). Réinitialise les données déjà accumulées. / | type: : rendu du graphe (GRAPH_BAR ou GRAPH_POINT) minValue: : valeur minimale attendue (mappée en bas de l'écran) maxValue: : valeur maximale attendue (mappée en haut de l'écran) maxPoints: : nombre de points affichés simultanément (borné à GRAPH_CAPACITY) / |
|
|
addPoint()
addPoint(float value);
|
Méthode addPoint() Ajoute une valeur au graphe et redessine l'écran. Une fois le nombre de points configuré atteint, les données défilent : la plus ancienne valeur est supprimée pour faire de la place à la nouvelle. / | value: : valeur à ajouter (bornée à [minValue, maxValue] à l'affichage) / | |
|
clearGraph()
clearGraph();
|
Méthode clearGraph() Vide les données du graphe (conserve le type et les bornes min/max configurés par configureGraph()). / |
Méthodes privées
pushLine(const char *text, Emoji::Type icon);;
redraw();;
drawGraph();;
begin(9600);;
println("Erreur d'initialisation de l'ecran OLED !");;
while (1);;
println("Terminal OLED pret");;
println(EmojiType::EMOJI_SUN, "24C");;
delay(1500);;
println(EmojiType::EMOJI_RAIN, "14C");;
delay(1500);;
println(EmojiType::EMOJI_SETTINGS, "Config");;
delay(1500);;
println("Message sans icone");;
delay(1500);;
begin(9600);;
println("Erreur d'initialisation de l'ecran OLED !");;
while (1);;
configureGraph(crepp::tools::OLED::GraphType::GRAPH_BAR, 0.0f, 3300.0f, 64);;
addPoint(milliVolts);;
delay(100);;
Variables membres
Adafruit_SSD1306 _display;
Code source
#pragma once
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "Emoji.h"
namespace crepp::tools {
/*
* =========================
* Terminal OLED (0.96")
* -------------------------
* Affiche le dernier message reçu, avec un pictogramme Emoji optionnel
* (voir crepp::tools::Emoji) en 64x64 px, à gauche du texte. A cette
* taille, le pictogramme occupe toute la hauteur de l'écran : une seule
* ligne de contenu est visible à la fois (pas de défilement multi-lignes).
* S'appuie sur Adafruit_GFX / Adafruit_SSD1306 pour le rendu, et sur la
* classe Emoji pour le dessin des pictogrammes.
*
* @badge driver
* @badge experimental
*
* Fonctionnalités :
* - Initialisation de l'écran (I2C)
* - Affichage d'une ligne de texte (println)
* - Affichage d'un pictogramme Emoji (météo ou système) avec un libellé
* - Effacement de l'écran
* =========================
*/
class OLED {
public:
static constexpr uint8_t MAX_LINES = 1; // 64px / 64px : une seule ligne visible (icône pleine hauteur)
static constexpr uint8_t MAX_LINE_LENGTH = 21; // 128px / 6px par caractère, lignes SANS icône
static constexpr uint8_t ICON_SIZE = 64; // icônes carrées 64x64 px, pleine hauteur d'écran
static constexpr uint8_t ICON_TEXT_OFFSET = 66; // décalage du texte quand une icône est affichée
static constexpr uint8_t LINE_HEIGHT = 64; // hauteur d'une ligne (calée sur la taille de l'icône)
// Capacité max du buffer de points du graphe (RAM : 4 octets x 128 = 512 o)
static constexpr uint16_t GRAPH_CAPACITY = 128;
/*
* =========================
* Type de graphe
* =========================
*/
enum class GraphType : uint8_t {
GRAPH_BAR, // barres verticales
GRAPH_POINT // nuage de points
};
/*
* =========================
* Constructeur
* =========================
* @param screenWidth : largeur de l'écran en pixels (128 par défaut)
* @param screenHeight : hauteur de l'écran en pixels (64 par défaut, 0.96")
* @param resetPin : broche RESET matérielle si utilisée, -1 sinon (partagée avec le MCU)
*/
explicit OLED(uint8_t screenWidth = 128, uint8_t screenHeight = 64, int8_t resetPin = -1);
/*
* =========================
* Méthode begin()
* =========================
* Initialise la communication I2C avec l'écran et efface l'affichage.
* @param i2cAddress : adresse I2C de l'écran (0x3C par défaut sur la plupart des 0.96")
* @return true si l'écran a été détecté et initialisé correctement
*/
bool begin(uint8_t i2cAddress = 0x3C);
/*
* =========================
* Méthode println()
* =========================
* Affiche une ligne de texte (efface le contenu précédent : à cette
* taille d'icône, une seule ligne tient sur l'écran).
* @param text : message à afficher (tronqué à MAX_LINE_LENGTH caractères)
*/
void println(const char *text);
void println(const String &text);
/*
* =========================
* Méthode println() avec pictogramme Emoji
* =========================
* Identique à println(), mais affiche un pictogramme Emoji (64x64 px,
* météo ou système, cf. crepp::tools::Emoji::Type) à gauche du texte.
* @param icon : pictogramme à afficher (Emoji::Type::EMOJI_NONE = comportement identique à println())
* @param text : message à afficher (tronqué, plus court qu'une ligne sans icône vu la place prise)
*/
void println(Emoji::Type icon, const char *text);
void println(Emoji::Type icon, const String &text);
/*
* =========================
* Méthode clear()
* =========================
* Efface l'écran et vide l'historique des lignes.
*/
void clear();
/*
* =========================
* Méthode configureGraph()
* =========================
* Configure un graphe (barres ou points) qui occupera tout l'écran au
* prochain addPoint(). Réinitialise les données déjà accumulées.
* @param type : rendu du graphe (GRAPH_BAR ou GRAPH_POINT)
* @param minValue : valeur minimale attendue (mappée en bas de l'écran)
* @param maxValue : valeur maximale attendue (mappée en haut de l'écran)
* @param maxPoints : nombre de points affichés simultanément (borné à GRAPH_CAPACITY)
*/
void configureGraph(GraphType type, float minValue, float maxValue, uint16_t maxPoints = GRAPH_CAPACITY);
/*
* =========================
* Méthode addPoint()
* =========================
* Ajoute une valeur au graphe et redessine l'écran. Une fois le
* nombre de points configuré atteint, les données défilent : la plus
* ancienne valeur est supprimée pour faire de la place à la nouvelle.
* @param value : valeur à ajouter (bornée à [minValue, maxValue] à l'affichage)
*/
void addPoint(float value);
/*
* =========================
* Méthode clearGraph()
* =========================
* Vide les données du graphe (conserve le type et les bornes min/max
* configurés par configureGraph()).
*/
void clearGraph();
private:
Adafruit_SSD1306 _display;
char _lines[MAX_LINES][MAX_LINE_LENGTH + 1];
Emoji::Type _lineIcons[MAX_LINES];
void pushLine(const char *text, Emoji::Type icon);
void redraw();
// --- Graphe ---
GraphType _graphType = GraphType::GRAPH_BAR;
float _graphMin = 0.0f;
float _graphMax = 100.0f;
uint16_t _graphMaxPoints = GRAPH_CAPACITY;
uint16_t _graphCount = 0;
float _graphBuffer[GRAPH_CAPACITY];
void drawGraph();
};
/*
@example
@include
#include <crepp/tools/OLED.h>
@end_include
@instance
crepp::tools::OLED console;
@end_instance
@setup
Serial.begin(9600);
if (!console.begin()) {
Serial.println("Erreur d'initialisation de l'ecran OLED !");
while (1);
}
console.println("Terminal OLED pret");
@end_setup
@loop
using EmojiType = crepp::tools::Emoji::Type;
console.println(EmojiType::EMOJI_SUN, "24C");
delay(1500);
console.println(EmojiType::EMOJI_RAIN, "14C");
delay(1500);
console.println(EmojiType::EMOJI_SETTINGS, "Config");
delay(1500);
console.println("Message sans icone"); // fonctionne toujours comme avant
delay(1500);
@end_loop
@end_example
@example
// Variante : graphe défilant (ex: tension d'un capteur au fil du temps)
@include
#include <crepp/tools/OLED.h>
@end_include
@instance
crepp::tools::OLED console;
@end_instance
@setup
Serial.begin(9600);
if (!console.begin()) {
Serial.println("Erreur d'initialisation de l'ecran OLED !");
while (1);
}
// Graphe en barres, valeurs attendues entre 0 et 3300 mV, 64 points affichés
console.configureGraph(crepp::tools::OLED::GraphType::GRAPH_BAR, 0.0f, 3300.0f, 64);
@end_setup
@loop
float milliVolts = analogRead(A0) * (3300.0f / 4095.0f);
console.addPoint(milliVolts); // fait défiler automatiquement une fois les 64 points atteints
delay(100);
@end_loop
@end_example
*/
} // namespace crepp::tools