Sto cercando di accendere in sequenza 24 led collegati a 3 shift register 595
Ho fatto i collegamenti come sul playground... collegato il 3° 595 al 2° come il 2° al 1°
Tutto finziona ma quando parte la swquenza dei led
i primi 8 e gli ultimi 8 fanno la stessa cosa
(questi erano i led)
Quindi dato che il codice era scritto per 2 shift register non so come cambiarlo
ho provato a casaccio a sostituire un po di cose ma niente... riporto qui il codice che funziona bene per i primi 16 led
Cioè... qual'è la logica? la parte incriminata che gli fa capire che ci sono 3 registers?
...
void oneByOne(int left, int right, int numRepeat){
while (numRepeat!=0){
left=1;
right=0;
for (left=1;left<=64;left=left*2
){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, right);
shiftOut(dataPin, clockPin, left);
digitalWrite(latchPin, HIGH);
delay(time);
}
left=1;
right=0;
for (left=1;left<=64;left=left*2){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, left);
shiftOut(dataPin, clockPin, right);
digitalWrite(latchPin, HIGH);
delay(time);
}
numRepeat-=1;
}
}
...
EDIT:
L'effetto che esce è
si accendono in sequnza i led del primo e del terzo 595 in sicnrono (e invece quelli del terzo dovrebbero rimanere spenti)...
poi poi continua la sequenza sul secondo 595 (quindi il primo e il secondo funzionano bene)
qui dovrebbe iniziare la sequenza del terzo 595... invece riparte il ciclo!
Quale integrato mi consigliate al posto del 595 per accendere in sequenza più leds possibili?
Ne avevo segnato uno che ne gestiva 15 ma non ricordo più quale fosse, se non sbaglio, e occupava 2 soli pin Arduino, ma forse mi sbaglio
L'applicazione sarebbe gestire due file di led paralleli che si accendono in sequenza... restano tutti accesi... e poi si spengono ancora con la stessa sequenza
tipo le luci delle piste di atterraggio per gli arei o luci scale
Il massimo sarebbe poter creare dei moduli su pcb che possano essere incrementati in cascata senza dover mettere mano al codice (ma anche dovendo incrementare il codice non sarebbe un problema)
Stai facendo un errore logico.
Un 595 gestisce 8 uscite. Per comandare 8 uscite ti servono 8 bit, ossia 1 byte. Per comandare 24 uscite ti servono 3 byte ma un intero è composto solo da 2 byte. Inoltre tu spedisci 24 volte i byte 1 e 0.
Devi preparare 3 variabili di tipo byte e poi lavorare sui singoli pin ed in seguito spedire con shiftOut i 3 byte insieme. Come fai tu non va bene.
Ecco... su una logica così, per non sapere ne leggere ne scrivere, dedicando ci il tempo necessario sarei riuscito a venirne a capo (sempre seguendo un tutorial)
ma si vede che ho imbroccato ptoprio il tutorial sbagliato sul quale fare le prove e imparare!
Ora che ho un esempio LOGICO "in tutti i sensi" mi metto a cercare dei tutorials adeguati!
KrashNet:
Ora che ho un esempio LOGICO "in tutti i sensi" mi metto a cercare dei tutorials adeguati!
Tutorial non ti servono. Devi solo impostare i bit delle 3 variabili di tipo byte.
Io le ho caricate per comodo con dei valori predefiniti ma puoi usare benissimo le funzioni di Arduino bitSet e bitClear per impostare rispettivamente a 1 ed a 0 i singoli bit. Basta che ti ricordi l'ordine con cui inviare i byte e sai poi a quale led corrisponde ogni bit.
leo72:
Tutorial non ti servono. Devi solo impostare i bit delle 3 variabili di tipo byte.
Io le ho caricate per comodo con dei valori predefiniti ma puoi usare benissimo le funzioni di Arduino bitSet e bitClear per impostare rispettivamente a 1 ed a 0 i singoli bit. Basta che ti ricordi l'ordine con cui inviare i byte e sai poi a quale led corrisponde ogni bit.
A scuola quando alle riunioni con i professori dicevano: "suo figlio non è scemo... ma non si applica"...
vai a farglielo capire che ho il cervello come una tictac
Premesso che nessuno è scemo, secondo me è tutta questione di applicarsi.
Non mi dire che non riesci ad andare nel Reference ed a leggerti 2-schede-2 sulle funzioni che ti ho citato per capire come manipolare i singoli bit perché non ci credo.
Immagino che se la tua donna ti telefona e ti chiama a casa da lei perché i suoi non ci sono io dico che la voglia di applicarti al bunga-bunga la trovi, anche con una gamba rotta vero? 8)
Che poi ho modificato appunto per 3 74hc595 cambiando alcune righe sui file Ezexpander.h e Ezexpander.cpp (che allego)
Magari non è il massimo della finezza in fatto di codice (parlo delle mie modifiche) ma funziona perfettamente.
Ti permette di attivare i pin semplicemente indicandoli come i pin di base di Arduino
Mi da parecchi errori però già dallo sketch...
Ho visto le differenze tra EZExpander.h, EZExpander.cpp e quelli modificati da te, e ne ho capito il senso...
ora finisco di studiare i codici di prima poi ci ritorno su e vedo perchè mi da errori anche se non ho effettuato modifiche!
(penso errori di caratteri qui "void fastDigitalWrite(int pin, uint8_t signal);" boh per me è tutto arabo... poi controllo)
Win7... si si le ho caricate... stsera a mente fresca ci riprovo!
Per ora sto ancora lavorando sull'esempio di Leo, in maniere ridicola per il momento ho risolto, o per lo meno riesco a far fare accendere e spegnere i leds dove e quando dico io...
( con un listato lunghissimo, so che ci sarà il modo per un autoincremento e un reverse... ma ci penso dopo )
Ora sto iniziando a cercare come fare fade in e fade out su sti benedertti shift registers... cmq sono una figata e mi procurerò prima possibile i TLC5940
Anch'io all'inizio avevo usato un codice come Leo .. poi ho trovato comodissima la soluzione con Ezexpander che per un testone come me rende semplice la scrittura del codice.
leo72:
Immagino che se la tua donna ti telefona e ti chiama a casa da lei perché i suoi non ci sono io dico che la voglia di applicarti al bunga-bunga la trovi, anche con una gamba rotta vero? 8)
Leo XD mica sono tutti come te! Infatti non ti ha manco risposto... 8)
menniti:
Leo XD mica sono tutti come te! Infatti non ti ha manco risposto... 8)
sarebbe stata fuori luogo (alla fine non abbiamo tutta quella confidenza) e non volevo cominciare un flame dato che erano un po di ore che cercavo i capirci qualcosa di quei shift registers e mi giravano un pò!