Matrice LED 8x8 Bluetooth avec texte défilant – Projet Arduino
Composants et fournitures
| Arduino Nano R3 | ×1 |
| Module Bluetooth HC-05 | ×1 |
| Module matrice LED 8x8 avec MAX7219 | ×7 |
| Résistance 6,8 kΩ | ×1 |
| Résistance 2,2 kΩ | ×2 |
Outils et machines nécessaires
- Fer à souder (générique)
Applications et services en ligne
- Arduino IDE
- Bluetooth SPP Pro (application Android)
À propos du projet
Après plusieurs tentatives pour faire défiler du texte sur une matrice 8x8, j'ai trouvé le tutoriel le plus complet sur la page Embedded Lab : https://embedded-lab.com/....
L'appareil contient un Arduino Nano, un module Bluetooth pour recevoir les données du smartphone, et des matrices LED 8x8 pilotées par MAX7219.
Contrairement au tutoriel original, j'ai utilisé des modules matrice 8x8 prêts à l'emploi avec puce MAX7219, disponibles très bon marché sur eBay ou AliExpress. Pour l'instant je n'avais que 7 modules, donc j'ai fait une petite modification du code. L'application Android n'existe plus sur le Play Store, vous pouvez la télécharger depuis : https://bluetooth-spp-pro.en.uptodown.com/android. Elle permet de contrôler la vitesse de défilement, la luminosité des LEDs, pause, effacement du texte, et plusieurs boutons de textes pré-définis.
Finalement, j'ai mis tout l'appareil dans une boîte fabriquée en PVC recouvert de papier peint noir.
Bibliothèques Arduino :
Code
Code
/* Commandes reconnues par l'Arduino :
1. Tout flux de caractères doit être envoyé entre parenthèses.
Exemple : Pour afficher "Hello! How are you doing?" envoyez : (Hello! How are you doing?)
À la réception de '(', l'Arduino comprend que les caractères suivants sont des données d'affichage jusqu'à ')'.
Le message défile de droite à gauche.
2. L'intensité d'affichage peut être incrémentée/décrémentée par /+ ou /- respectivement.
À chaque réception de '/', l'Arduino comprend qu'il s'agit d'une commande. 16 niveaux de luminosité.
3. La vitesse de défilement peut être augmentée/diminuée par /< ou /> respectivement.
4. /p met en pause le défilement. Renvoyer cette commande reprend le défilement.
5. /e efface le buffer et éteint l'affichage.
Connexions :
Easy Matrix Arduino
VCC +5V
DIN MOSI (Broche 11)
LOAD pinCS (défini dans le programme)
CLK SCK (Broche 13)
GND Gnd
Communication UART à 9600 bauds.
Écrit par : Rajendra Bhatt
Contact : admin@embedded-lab.com
Produit Easy Matrix : https://embedded-lab.com/blog/?p=9186
*/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
int pinCS = 10; // CS sur cette broche, DIN sur MOSI et CLK sur SCK
int numberOfHorizontalDisplays = 7;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
int scrollspeed = 100; // Vitesse de défilement par défaut (millisecondes)
int spacer = 1; // Espace entre deux caractères
int width = 5 + spacer; // Largeur police = 5 pixels
boolean inChar = false, NewData = false, pause = false;
boolean dataAvailable = false;
char inputString[512];
int count = 0, BTvalue = 5;
void setup() {
matrix.setIntensity(1); // Valeur entre 0 et 15 pour la luminosité
matrix.setPosition(0, 0, 0);
matrix.setPosition(1, 1, 0);
matrix.setPosition(2, 2, 0);
matrix.setPosition(3, 3, 0);
matrix.setPosition(4, 4, 0);
matrix.setPosition(5, 5, 0);
matrix.setPosition(6, 6, 0);
matrix.fillScreen(0);
matrix.write();
Serial.begin(9600);
pinMode(2, INPUT);
digitalWrite(2, LOW);
attachInterrupt(0, serialInterrupt, CHANGE);
}
void loop() {
if (dataAvailable) {
display_data();
}
}
void display_data() {
for (int i = 0; i < width * count + matrix.width() - 1 - spacer; i++) {
matrix.fillScreen(0);
int letter = i / width;
int x = (matrix.width() - 1) - i % width;
int y = (matrix.height() - 8) / 2; // Centrer verticalement
while (x + width - spacer >= 0 && letter >= 0) {
if (letter < count) {
matrix.drawChar(x, y, inputString[letter], HIGH, LOW, 1);
}
letter--;
x -= width;
}
matrix.write();
if (!dataAvailable) {
i = width * count + matrix.width() - 1 - spacer;
matrix.fillScreen(LOW);
matrix.write();
}
if (NewData) {
i = 0;
matrix.fillScreen(LOW);
matrix.write();
NewData = false;
}
while (pause == true) {
delay(0);
}
delay(scrollspeed);
}
}
volatile boolean inService = false;
void serialInterrupt() {
if (inService) return;
inService = true;
interrupts();
while (!Serial.available());
while (Serial.available()) {
char ch = Serial.read();
if (ch == '(') {
count = 0;
inChar = true;
while (inChar) {
if (Serial.available()) {
ch = Serial.read();
if (ch == ')') {
inChar = false;
dataAvailable = true;
} else {
inputString[count] = ch;
count++;
}
if (count > 0) {
NewData = true;
}
}
}
}
if (ch == '/') {
inChar = true;
while (inChar) {
if (Serial.available()) {
ch = Serial.read();
// '/+' pour incrémenter la luminosité
if (ch == '+') {
if (BTvalue < 15) { BTvalue++; matrix.setIntensity(BTvalue); }
break;
}
// '/-' pour décrémenter la luminosité
if (ch == '-') {
if (BTvalue > 0) { BTvalue--; matrix.setIntensity(BTvalue); }
break;
}
// '/>' pour ralentir le défilement
if (ch == '>') {
if (scrollspeed < 200) { scrollspeed += 20; }
break;
}
// '/<' pour accélérer le défilement
if (ch == '<') {
if (scrollspeed > 10) { scrollspeed -= 10; }
break;
}
// '/e' pour effacer l'affichage
if (ch == 'e') {
dataAvailable = false;
break;
}
// '/p' pour mettre en pause
if (ch == 'p') {
if (pause == false) { pause = true; } else { pause = false; }
break;
}
else { break; }
}
}
}
}
inService = false;
}
Schémas

Processus de fabrication
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Construire une console Pong 24×16 LED avec Arduino Nano et MAX7219
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Téléporteur de texte Bluetooth : Projet Arduino + Android
- Appareils électroménagers à commande vocale : contrôle Bluetooth avec Google Assistant
- Maîtriser une matrice LED 8×8 avec Arduino Uno : Guide pas à pas
- Mesure précise du rayonnement solaire avec Arduino UNO et shield Ethernet
- Contrôle à distance d'une voiture avec Arduino Uno et Bluetooth : Guide pas à pas
- Envoyez et recevez des SMS facilement avec le shield GSM SIM900 pour Arduino Mega