Après avoir joué avec des Max , je suis tombé sur le Uno version avec Led et Wifi. Plus de fils on joue seulement, Allumer et extinction des 96 leds: OK, et construction de 3 carrés de Led de taille différentes à des positions différentes: OK. On réfléchit ... et 60 lignes de codes suffisent. On peut peut être faire mieux, je ne sais pas. Je ne fais du C que depuis ma retraite, après du Basic, du Pascal, de l'assembleur (68HC11), Je m'amuse avec le C et je découvre la multitude de bibliothèques associées. La logique c'est bien, mais il faut encore que la mémoire travaille.
![]()
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.
Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone
vous avez une question ou c'était juste pour partager vos réflexions ?
(je l'ai mis pour le moment dans le bar)
Tu utilises des led adressables?
Ce serait bien que tu nous donnes le schéma et le code.
le UNO R4 WiFi a une petite matrice de leds adressables intégrées
vous pouvez allumer les LEDs individuellement
oui les led sont adressables directement sur la carte, pas un fil sauf l'alim et on peut créer ce que l'on veut caractères formes diverses, un petit plaisir ...
le code :// matrice led 12 X 8
#include "Arduino_LED_Matrix.h" // bibliothèque gestion led sur CI
ArduinoLEDMatrix matrix; // création de l'objet matrice led 12 X 8 du CI
// Représentation des LED matrice 8 lignes X 12 colonnes base tout éteint
byte ledX[8][12] = {
// 0 1 2 3 4 5 6 7 8 9 10 11 Colonne
// Ligne
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 0
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 1
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 3
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 4
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 5
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 6
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // 7
};
byte posx = 0; //pointeurs X et Y du tableau LedX
byte posy = 0;
// Proc 1
void t1(boolean statut){ // allumage ou extinction de toute les LED selon statut
for ( int x = 0; x <8 ; x++){ // lignes
for ( int y = 0; y <12 ; y++){ // colonnes
ledX[x][y] = statut; // affectation du statut led selon pos x pos y
matrix.renderBitmap(ledX, 8, 12); // recopie tableau dans structure définie
delay(10);
}
}
}
// Proc 2
// carre(taille_carré, état, position X, position Y );
void carre(byte nb_point, boolean statut, byte decalY, byte decalX){ // carré allumé éteint + décal
// mise à jour tableau pour recopie dans matrice
for( byte x = 0 ; x <= nb_point; x++){
ledX[x+decalX][0+ decalY]= statut; // vertical 1
ledX[x+decalX][nb_point+decalY]= statut; // vertical 2
}
for( byte y = 0; y <= nb_point; y++){
ledX[0+decalX][y+decalY]= statut; // Horizontal 1
ledX[nb_point+decalX][y+decalY]= statut; // horizontal 2
}
matrix.renderBitmap(ledX, 8, 12); // mise à jour matrice led selon tableau
}
void setup() { // Initialisation
Serial.begin(9600);
matrix.begin(); // Création de la matrice
// test fonction gestion LED
//ledX[7][5]= 1; // col 7 lig 5 Modification tableau matrice allumage(1)
//ledX[7][6]= 1; // col 7 lig 6 Modification tableau matrice allumage(1)
//matrix.renderBitmap(ledX, 8, 12); // Affichage modif envoi matrice à S/P gestion LED
}
void loop() { // // x 0 y 0 coté proc USB
t1(1); // allumage complet de toutes les led
delay(10);
t1(0); // extinction complet de toutes les led
delay(10);
carre(3,1,6,2); // largeur coté, etat, pos x, pos Y ALLUMAGE 1
delay(500);
carre(3,0,6,2); // largeur coté, etat, pos x, pos Y EXTINCTION 0
delay(500);
carre(5,1,3,1); // largeur, etat, pos x, pos Y ALLUMAGE
delay(500);
carre(5,0,3,1); // largeur, etat, pos x, pos Y EXTINCTION
delay(500);
carre(2,1,0,0); // largeur, etat, pos x, pos Y ALLUMAGE
delay(500);
carre(2,0,0,0); // largeur, etat, pos x, pos Y EXTINCTION
delay(500);
} `Texte préformaté`
@J-M-L @fnepk ah d'accord, je ne savais pas pour la R4. Il faut dire que je ne me suis jamais renseigné sur cette carte.
j'ai découvert par hasard cette carte, je joue avec des Méga, c'est les Led qui m'amusent c'est simple pour faire des démos à ceux qui veulent apprendre et commencer. Sans aucun fil qui nuit souvent et alourdit les montages.
Oui c'est certain. ![]()
Sinon, il suffit que de 3 fils pour contrôler une bande led adressables type ws2812b.
C"était pour partager mes réflexions, On réfléchit, 60 lignes de codes pour déjà jouer, rester logique, on peut être faire mieux, c'est la question que je pose. Je reste très surpris quand je relis certains bouts de prog ( j'ai appris à écrire à la petite cuillère, pas à la louche) c'est vrai c'était i l y a longtemps et la RAM coutait encore chère. Le vrai langage que j'ai vraiment apprécié après le Basic , le Pascal, c'était l'assembleur avec le 68HC11 et là chaque octet comptait. J'ai tout appris seul sans formation sauf Java mon dernier métier de développeur WEB. J'apprends le C comme un jeu et c'est pour cela que je me demande si ce que j'écris est bien ou peut être amélioré car seul il ne peut y avoir de comparaison
Je viens de voir ce composant 16 X 16 , 3 couleurs de bases, je vais commander et essayer, Merci
votre code c’est celui du post 7?
Les points qui sautent aux yeux susceptibles d’être améliorés (même si ça fonctionne)
- usage de nombres magiques (8 et 12)
- Pas de test aux limites (débordement possible)
- Non respect de l’homogénéité des types (bool et byte)
- variables globales posX et posY inutiles (?)
Sinon il y a aussi une perte de mémoire RAM pour la matrice (8 bits utilisés là où 1 suffit) mais ça c’est de l’optimisation à faire que si nécessaire. La classe ArduinoLEDMatrix sait travailler avec un tableau de 3 unsigned long pour les 92 bits - ce serait le plus compact.
c'est vrai tableau de bool et non de byte, un seul type pos X et pos Y inutiles ( anciens tests ) supprimés . Je sèche sur pas de test aux limites ( quelles limites quels tests ? boucles simples) et nombres magiques : 8 : 1000, 12 8 + 4 1100 ,je cherche ?, je ne connais pas la classe LEDMatrix, je vais chercher celle-ci et lire la doc associée ( Je ne suis qu'un débutant et il y tellement de librairies ...)
Une question intéressante ; Y a t il une encyclopédie des librairies ?
l y a ça
https://docs.arduino.cc/libraries/
Sinon, si tu cherches une librairies pour un besoîn specifique il y a le forum, google ou chatgpt.![]()
La fonction attend un tableau de byte dans la bibliothèque
C’est celle que vous utilisez pourtant ![]()
Pour les nombres magiques, la pratique c’est de définir des constantes
const byte nbLignes = 8;
const byte nbColonnes = 12;
Et ensuite vous utilisez ces constantes au lieu des nombres. Ça rend le code plus lisible.
Pour les tests aux Limites c’est dans votre fonction carre() par exemple où vous faites
Sans vous assurer que les indices restent dans le tableau. C’est le meilleur moyen d’avoir un débordement mémoire (si vous appelez la fonction avec de mauvais paramètres) qui va aller modifier une autre variable en mémoire et des bugs difficiles à trouver.
Pas de souci, on a tous débuter en ne sachant rien. Ne vous en faites pas, il suffit de pratiquer et lire un peu aussi des cours C++ pour progresser.
c'est vrai j'avais oublié pour les constantes, les utiliser une fois déclarée, On écrit souvent vite , ça marche on ne s'occupe plus et il faut penser aux autres qui reliront peut être le code un jour c'est plus simple. J' ai commencé il y a longtemps et seul Basic , turbo Pascal, Assembleur 68HC11, c'est vraiment la que j'ai appris à coder à l'octet près. Après des années de réseaux, X25 , IP, routeurs, 'j'ai appris à coder en Java mon dernier métier et maintenant la retraite, je m'amuse avec des Arduinos, led, afficheurs LCD, carte SD , clavier, moteurs pas à pas,vraiment tout pour s'amuser avec un livre Le guide complet O reilly Ce qui est impressionnant c'est le nombre de bibliothèques, il faudrait un dictionnaire de référence.
Comme dit plus haut, arduino encourage les développeurs à soumettre leurs bibliothèques et ils maintiennent ce "dictionnaire"
https://docs.arduino.cc/libraries/
c'est cette "base de données" qui est utilisée dans l'IDE quand vous cherchez une bibliothèque.
mais il y en a plein d'autres qui ne sont pas soumise dans le process arduino et que vous trouvez sur GitHub ou ailleurs, c'est en évolution constante et donc difficile de publier quelque chose de statique qui se voudrait exhaustif.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.

