Scorrimento led?

Ragazzi, ho un problema, è dalle 9 di stamattina che ci ragiono su con ricerche varie ma non riesco a trovare una soluzione....supponendo che io abbia, una matrice led 5x5 fatta in casa, e che deppa scrivere una semplice linea verticale di led ON ...come devo fare per far scorrere tutta la linea verso sinistra di un singolo led, cioè, di una singola colonna, con una funzione senza dover necessariamente riscrivere ogni volta manualmente tutto il codice spostato evrso sinistra? (ps, come se in uno shift register volessi far scorrere i pin premendo il tasto di clock(clock esatto)? ringrazio tutti in anticipo :blush:

Con cosa e' fatta questa matrice?

led?...collegati direttamente con resistenze all'arduino?

Pensavo fosse fatta con le candele XD XD
A parte le battute, la domanda di Federico è pertinente perché se usi un led driver è un conto, se usi uno shift register un altro.
Tu usi i led direttamente collegati ai pin dell'arduino? Uhmm... intanto occhio a non bruciare l'Atmega...
Uno schemettino aiuterebbe a capire cmq in linea di max ricorda che da un pin non può uscire più di 40 mA e da tutto l'Arduino non possono uscire più di 200 mA. 25 led, se li accendi tutti, ti potrebbero bruciare il micro.

un semplice collegamento : pin ---> Transistor---->resistenza---->led.... (arduino mega 2560) e mi serve per forza collegato cosi, per una dimostrazione semi scolastica diciamo :wink:

Potresti provare tante vie. Una è quella di usare una matrice bidimensionale e scrivere lì nelle varie celle il valore del corrispondente led e poi con un piccolo ciclo, spedire la configurazione ai pin così da reimpostare i led.

leo72:
Potresti provare tante vie. Una è quella di usare una matrice bidimensionale e scrivere lì nelle varie celle il valore del corrispondente led e poi con un piccolo ciclo, spedire la configurazione ai pin così da reimpostare i led.

Con la configurazione che ha fatto, mi pare l'idea piu' pulita.
F

leo72:
Potresti provare tante vie. Una è quella di usare una matrice bidimensionale e scrivere lì nelle varie celle il valore del corrispondente led e poi con un piccolo ciclo, spedire la configurazione ai pin così da reimpostare i led.

O.o non ho ben capito...anzi, per nulla...scusa la schiettezza...ma...non riesco a capire quale sia la funzione per letteralmente fa "scorrere" il valore mostrato, (HIGH o LOW) da un led all'altro.... tipo se io dovessi passare da questa figura : (* = HIGH, . = LOW)
....
..
..
....
..
..
..+..

a questa :

....
.
...
....
.
...
.*...

senza dovermi riscrivere tutto il codce ma semplicemente "shiftando" il valore? che funzione devo usare? cercano ho trovato un "array" ma non capisco come usarlo...scusate l'ignoranza...

Mah... per prima cosa, se devi disegnarci sopra, io multiplexerei (così puoi usare anche led singoli e consumi molto di meno assai). Invece la matrice bidimensionale non serve, se devi solo scorrere una riga di led :wink:

Ad ogni modo:
dovresti farti una matrice (monodimensionale) e darle dei valori

boolean led[5]{false,false,false,false,false};

poi ti fai un ciclo for

for (char i = 0; i <5; i++){
 led[i] = !led[i];
 digitalWrite(i,led[i]);
 delay(200);
}

Dovrebbe funzionare (:
Scusa ma adesso non ho arduino con me, e non posso verificare :S

forse potresti anche usare bithsift, infondo lo stato di un pin è un bit :wink:

L'ho detto. Ci sono tanti modi.
Anche a me piacciono le operazioni coi bit però mi par di capire che le conoscenze informatiche di babbu siano limitate per cui non l'ho neanche proposta come soluzione.

@babbu:
dichiari una matrice bidimensionale
byte matriceLed[5][5];
se vuoi accendere il 3° Led della 2° fila non devi far altro che fare
matriceLed[2][1]=1;
(perché la numerazione parte da 0. Quindi 0=1° led; 1=2° led ecc...)

fatte tutte le modifiche, non hai che in fondo al tuo codice di spedire il tutto ai pin e poi riparti

leo72:
L'ho detto. Ci sono tanti modi.
Anche a me piacciono le operazioni coi bit però mi par di capire che le conoscenze informatiche di babbu siano limitate per cui non l'ho neanche proposta come soluzione.

@babbu:
dichiari una matrice bidimensionale
byte matriceLed[5][5];
se vuoi accendere il 3° Led della 2° fila non devi far altro che fare
matriceLed[2][1]=1;
(perché la numerazione parte da 0. Quindi 0=1° led; 1=2° led ecc...)

fatte tutte le modifiche, non hai che in fondo al tuo codice di spedire il tutto ai pin e poi riparti

credo di aver capito...il primo numero fra [] corrisponde alla fila, e il secondo [] alla colonna giusto?....ma ora ho un altro problema...supponendo di utilizzare un 74hc595 per ogni colonna...come faccio a dire ad arduino che il [0][0] corrisponde al dover scrivere nell'integrato il dato " B00000001" ? grazie

A parte che non si legge il primo punto, per comandare un 595 devi spedire un byte in cui ogni suo singolo bit corrisponde ad un'uscita dell'integrato ed il valore dello stesso bit corrisponde allo stato che deve assumere il LED (1=acceso; 0=spento). Però se devi fare la conversione da array a byte allora tanto vale partire subito con le operazioni sui bit, e nel Reference è tutto spiegato molto bene.

leo72:
A parte che non si legge il primo punto, per comandare un 595 devi spedire un byte in cui ogni suo singolo bit corrisponde ad un'uscita dell'integrato ed il valore dello stesso bit corrisponde allo stato che deve assumere il LED (1=acceso; 0=spento). Però se devi fare la conversione da array a byte allora tanto vale partire subito con le operazioni sui bit, e nel Reference è tutto spiegato molto bene.

Scusa se ti disturbo ancora...questo "reference" dov'è? potresti linkarmelo_? grazie

Lo raggiungi dal sito principale: clicca in alto su Main Site, e poi su Reference nel menu orizzontale.