Problema con MATRIX led e libreria MD_Parola

Buongiorno,

premetto che è la prima volta che utilizzo Arduino e mi cimento in un progetto del genere; scrivo per un problema che ho riscontrato da poco, ma prima, vi illustro a dovere il contesto: ho da poco creato, con Arduino Uno, un lcd 20x4 , una semplice tastiera 4x4 , e due unità matrix led (una per ciascun giocatore) ciascuna da 32x8 led, un segnapunti per freccette, basandomi su quelli che normalmente si trovano in commercio. Finora ho creato il programma che gestisce la tastiera, l'lcd e quindi di fatto gestisce i turni, i punteggi dei due giocatori, il reset mode ecc: ora la mia intenzione è quella di aggiungere le due unità matrix per mostrare in modo più chiaro il punteggio di ciascun giocatore.

Ho scaricato alcune librerie per gestire lo scrolling del testo e altre (davvero ben fatte), tra cui MD_Parola di Marco Colli. Giungendo al problema vero e proprio, di fatto in parole povere il mio obbiettivo è riuscire a far comparire sui led le istruzioni seguenti:

1- Mostrare il punteggio attuale del giocatore, (le due unità sono collegate in serie per mancanza di pin su Arduino Uno, anche se nella pratica dovranno mostrare i punteggi di 2 giocatori diversi);

2-A fianco al punteggio del giocatore, mostrare una freccia/pallino/indicatore che compare solo sull'unità led del giocatore che sta giocando il turno.

Più che altro, ho problemi a gestire le zone del matrix, dato che grazie a MD_parola è possibile farlo, e quindi riassumendo il problema sta proprio nello scrivere contemporaneamente e sulla stessa unità cose diverse, andando a lavorare solo su alcune zone, senza che le altre si spengano o altro.

Dettò ciò, mi rivolgo a voi speranzoso che qualcuno sicuramente più esperto di me mi posso dare qualche suggerimento.

P.S: se servono ulteriori chiarimenti/disegni esemplificativi/lo sketch del programma chiedete pure

Grazie in anticipo per la disponibilità! ;)

Alessandro

Buongiorno, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente [u]evitando[/u] di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, [u]NON[/u] necessariamente inerenti alla tua domanda: - serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - pinout delle varie schede by xxxPighi: Pinout - link [u]generali[/u] utili: Link Utili

ciao...non conosco la libreria, quindi non conosco il/i suoi costruttori, metodi, attributi etc...però se non sbaglio il MAX72xx, che fa funzionare la matrice LED, è uno shift register quindi accetta un tot di "informazioni", ricevute dal suo PIN Din, fino al riempimento del suo buffer interno poi ad ogni nuova informazione invia, tramite il suo PIN Dout, la prima "vecchia" informazione ricevuta al MAX72xx seguente...quindi per fare un esempio semplice di gestione di un pacchetto 8 bit di due MAX72xx:

primo MAX = (in)00000000(out) secondo MAX = (in)00000000(out)

invio primi 8 bit (11100000)

primo MAX = (in)11100000(out) secondo MAX = (in)00000000(out)

secondo invio 8 bit (10111100)

primo MAX = (in)10111100(out) secondo MAX = (in)11100000(out)

come vedi al primo invio il primo MAX ha acquisito lo stesso valore degli 8 bit passati il secondo è rimasto a "tutti" 0...che in realtà sarebbero gli 8 zero del primo MAX passati al secondo; a conferma vedi che al secondo giro il primo MAX acquisisce nuovamente il valore degli ultimi 8 bit passati mentre il secondo prende il valore che aveva il primo precedentemente...

ti dico questo perchè, da quel che so, quando connetti più matrici LED non devi ragionare come nell'LCD che imposti la posizione del cursore dove aggiornare il valore, mentre le restanti posizioni rimangono immutate, ma devi passare tutto il flusso dati per scrivere l'intera videata. spero di essere stato chiaro ...ma soprattutto spero di non aver detto fesserie.

Ciao,

intanto grazie per la risposta. Ok già questo mi aiuta a chiarire le idee: adesso l'obbiettivo è scrivere sul MAX72xx punteggio 1 e punteggio 2 contemporaneamente e distaccati l'uno dall'altro...uno su una unità e uno sull'altra...considerato che punteggio1 e punteggio 2 sono variabili in continuo aggiornamento e che ad ogni aggiornamento le unità si "ripuliscono" totalmente per qualche secondo per gestire il flusso di dato in uscita ed entrata (da quel che ho capito).

ciao...ma sono 2 matrici distinte o sono due matrici in serie? se in serie vale il mio ragionamento...se sono due elementi distinti vanno trattati come due elementi distinti. detto questo...una volta inviato un "treno" di dati, equivalente ad accendere o spegnere il singolo LED della matrice, questa informazione, se non sbaglio, rimane nel MAX72xx e quindi se non sono necessari cambi di scritta non serve inviare continuamente...se invece il valore, per esempio, cambia ogni secondo...ad ogni secondo devi inviare il nuovo "treno" di dati.

Sono due unità in serie, ho dovuto metterle in serie per mancanza di pin sufficienti su Arduino Uno.
Comunque si, il punteggio si aggiorna ad ogni turno, più o meno con questo processo iterativo:

1- punteggio iniziale uguale per entrambi i giocatori (quindi su MAX72xx compaiono entrambi uguali) esempio: 501;
2- Inizio del gioco (turno del giocatore 1) e conseguente sottrazione dal punteggio iniziale del valore fatto nel turno. Quindi il display alla fine del turno 1 riscrive entrambi i punteggi (quello del giocatore 1 cambia, mentre quello del 2 rimane uguale a quello iniziale);
3- Il turno passa al giocatore 2 e quindi alla fine del turno 2 lo schermo mostrerà il punteggio 2 cambiato, mentre il primo rimane invariato.
4-…
5-…
n- e così via n volte finché uno dei due non arriva a 0.

Quindi sostanzialmente si, ad ogni “aggiornamento” il MAX72xx (composto dalle 2 unità in serie) si ripulisce per qualche millisecondo per poi mostrare i punteggi aggiornati.
La difficoltà (per me) sta nello scrivere ad esempio:

| 501 | 501 | :- < ----collegamento con arduino avviene da qua

(punteggio 1) (punteggio 2)
seconda unità prima unità del MAX72xx

con tutti gli spazi che dividono, ecc…