Bonjour, j'aimerai doubler mon panneau lumineux type journal défilant de deux panneaux WS2812B (de 64 colonnes de 8 lignes à 128 colonnes de 8 lignes). Je n'arrive pas à dépasser 66 colonnes de 8 lignes; l'affichage se fige à la fin du téléchargement. J'utilise une carte Nano et 4 panneaux WS2812B en grappe IN - OUT.
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”
avez vous calculé la mémoire nécessaire pour vos LEDs ? est-ce compatible avec un Nano ?
(la mémoire est allouée dynamiquement lors de l'instantiation du ruban donc le compilateur ne vous dira pas que vous utilisez trop de mémoire)
Bonjour JML, excuses pour le post mis au mauvais endroit. Merci de l'avoir déplacé dans le forum francophone.
J'aimerai doubler mon panneau lumineux type journal défilant de deux panneaux WS2812B (de 64 colonnes de 8 lignes à 128 colonnes de 8 lignes). Je n'arrive pas à dépasser 67 colonnes de 8 lignes; l'affichage se fige à la fin du téléchargement. Je voudrai utiliser une carte Nano ou Uno et 4 panneaux WS2812B en grappe IN - OUT.
Je n'ai pas calculé la mémoire nécessaire, ça fonctionne très bien avec une Nano, 2 panneaux et un message de 128 caractères (espaces compris) défilant sans cesse et en changeant de couleur (4 utilisées) au format matriciel 5 pixels en largeur et 8 en hauteur.
#include <Adafruit_GFX.h>
#include <Adafruit_NeoPixel.h>
#include <Adafruit_NeoMatrix.h>
#ifndef PSTR
#define PSTR
#endif
#define PIN 8
#define mw 67
#define mh 8
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(mw, mh, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
const uint16_t colors[] = {
matrix.Color(255, 0, 0), matrix.Color(0, 255, 0),
matrix.Color(0, 0, 255), matrix.Color(255, 255, 255),
};
void setup() {
matrix.begin();
matrix.setTextWrap(true);
matrix.setBrightness(15);
matrix.setTextColor(colors[0]);
}
int x = matrix.width();
int pass = 1;
void loop() {
matrix.fillScreen(0);
matrix.setCursor(x, 0);
matrix.print(F("Forum des Associations : vitrine des Associations environnantes de CAZERES a votre service, renseignements, activites, inscriptions"));
if (--x < -890) {
x = matrix.width();
if (++pass >= 4) pass = 0;
matrix.setTextColor(colors[pass]);
}
matrix.show();
delay(20);
}
Pourriez-vous me donner une astuce, svp
castres
Changer de carte Arduino passer à un modèle ayant un peu plus de ressources.
Le besoin en mémoire c'est 128 * 8 * 3 soit 3K octets comme la Uno ne dispose que de 2Ko de RAM cela ne peut pas fonctionner. Déjà avec un affichage 64 * 8 tu passes limite.
Bonsoir fdunews,
Je viens de rentrer et au vue de ta réponse, je suis aller voir le croquis avec 2 panneaux (mw = 67), il occupe 9286 octets (28%) / 32256 de l'espace de stockage de programme et 291 octets (14%) de mémoire dynamique / 1757 possible. Avec 3 panneaux (mw = 96) le téléversement arrive au bout et le message ne défile plus. Je ne comprends pas. A priori, je n'occupe que 14% de mémoire dynamique et 28% de stockage programme; il devrait y en avoir assez !
Le buffer est alloué dynamiquement lors de la création de l'objet Adafruit_NeoMatrix. Donc le compilateur ne connait pas la taille de la mémoire qui sera utilisée.
Comment peut-on faire pour augmenter sensiblement la RAM pour que ça fonctionne ?
oui comme je vous l'avais dit:
➜ le problème est caché
en passant à une autre carte Arduino, avec plus de SRAM comme suggéré par @fdufnews
Bonjour J-M-L, a quoi servent les lignes #ifndef PSTR, #define PSTR et #endif ?; qu'est-ce que "PSTR" ?
C’est une macro spécifique aux AVR qui met le texte en mémoire flash, comme la macro F() d’Arduino
Si vous n’êtes pas sur AVR elle ne sera pas définie donc pour que le code compile on associe à ce mot la chaîne vide ce qui fait que PSTR("Salut\r\n")
devient juste ("Salut\r\n")
soit une cString normale
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.