Led matrix, lenta!

Sto giocando con 5 matrici di led 8x8 collegate con dei max7219 in cascata.
L'obiettivo è quello di ottenere un testo scorrevole sui display.

Ho codificato i caratteri alfanumerici e li ho messi in un array bidimensionale, in questo modo

tabellaCaratteri [numero caratteri] [colonne ciascun carattere] = { {},{},.....};

L'array contenente i caratteri l'ho anche memorizzato nella flash.

Ho scritto lo sketch e funziona bene, però è molto lento nonostante non ci sono ritardi dovuti a delay o altro.
Ho fatto inoltre calcolare la ram libera e mi risultano disponibili 1740 byte.

Vi mostro la funzione che si occupa di far scorrere il testo:

for(int b=0;b<=sizeof(messaggio)-2;b++) // lettere
{
for(int n=0;n<8;n++) // bitshift
{
for(int y=0;y<8;y++) // colonne
{
for(int x=0;x<5;x++) // display
{
lc.setColumn(x,y,pgm_read_byte(&arrayChars[int(messaggio[b+x])][y])<<n | pgm_read_byte(&arrayChars[int(messaggio[b+x+1])][y])>>8-n);
}
Serial.println(freeRam());
}
}
}

Sapete dirmi cosa rallenta il tutto e se sto procedendo nella maniera giusta?

Ciao,
non so che Arduino tu stia usando, comunque ... ti sei reso conto vero che, per OGNI carattere, richiami 8 x 8 x 5 = 320 volte la funzione di libreria ls.setColumn e, nei parametri che gli passi, fai tutta una serie di operazioni ... :astonished:

Guglielmo

Eh lo so, appunto chiedevo se era il modo corretto di procedere :slight_smile:
Comunque sono 5 display, ogni display ha 8 colonne e ogni carattere va fatto scorrere di 8 posizioni... le operazioni sono necessarie per concatenare le varie lettere durante lo scorrimento.

Non sono un programmatore perciò non mi rendo conto se c'è un metodo più snello e funzionale.
Inizialmente avevo pensato di popolare un altro array grande quanto il numero delle lettere del messaggio moltiplicato per 8 ( dato che ogni lettera è composta da 8 colonne) e far scorrere quello.
Usava più ram ed inoltre comparivano anche "pixel" anomali sui display, nonostante il messaggio scorreva ugualmente in modo corretto.

Sto usando un ATmega328P a 16 mhz

Togli la Serial.print e poi potresti provare a pilotare i MAX7219 usando l'SPI al posto del bitbang software dei bit.
Ti rimando a questa discussione: