mayo ha scritto:Ciao, grazie per la risposta. Si, mi restano proprio 7 pin digitali liberi, sempre che i due transistor non ne vogliano qualcuno anche per loro.
Ovviamente i transistor devono essere pilotati, ma per tale azione puoi sfruttare i due pin che adesso fanno capo ai pulsanti, senza perdere la possibilità di accettare i comandi.
Per essere più specifico dovrei vedere lo schema completo, ma come info generica puoi pensare al cinema.
Non è una burla: il cinema funziona perché i fotogrammi statici della pellicola vengono mostrati nella stessa posizione uno dopo l'altro oscurando il quadro durante i cambiamenti.
I nostri occhi hanno bisogno di un certo tempo per catturare una scena e inviarla al cervello, e durante questo tempo memorizzano l'immagine internamente senza più reagire agli stimoli esterni.
Grazie a tale caratteristica degli occhi, il meccanismo di proiezione del cinema può mostrare una scena fissa per un attimo, poi oscurare il quadro, cambiare al buio l'immagine con la successiva, e quindi ridare luce per un altro attimo.
L'occhio non si accorge delle alternanze luce - buio perché queste si succedono con intervalli più brevi del tempo di "memorizzazione biologica", stimabile in circa un decimo di secondo.
Nel circuito che vorresti realizzare puoi quindi accendere i segmenti dei due display come se fossero due fotogrammi di una pellicola cinematografica: se operi a velocità abbastanza alta da ingannare l'occhio, appariranno accesi fissi entrambi anche se in realtà lampeggiano a turno.
Tale pilotaggio rapido in sequenza viene tecnicamente chiamato "multiplex".
Uno dei vantaggi pratici del multiplex è proprio il risparmio di risorse fisiche: anziché avere 14 fili verso i segmenti dei due display, puoi scendere a 7 collegando insieme a con a, b con b, e via dicendo fino a g con g, e alimentare a turno i catodi (o gli anodi) comuni attraverso due transistor.
Anche I resistori di limitazione scendono a 7, poiché la corrente passerà sempre in un solo display per volta.
In breve, la sequenza multiplex da implementare nel programma è questa:
1) spegni i transistor e le uscite dei segmenti;
2) prepari sulle uscite dei segmenti la "sagoma" da mostrare sul display delle decine.
3) attivi il transistor che alimenta il display delle decine e lasci trascorrere un ventesimo di secondo;
4) spegni i transistor e le uscite dei segmenti;
5) prepari sulle uscite dei segmenti la "sagoma" da mostrare sul display delle unità.
6) attivi il transistor che alimenta il display delle unità e lasci trascorrere un ventesimo di secondo;
7) torni al punto 1.
Ovviamente, quando dico "lasci trascorrere" non intendo la chiamata di una funzione "wait" o "delay" consistente in un loop a vuoto, altrimenti non verranno eseguiti eventuali altri compiti che il micro deve svolgere.
Per il multiplex viene di norma usato un interrupt del timer, ma trattandosi di Arduino (che non conosco) non so dirti nel dettaglio come e dove agire.
La "lettura" dello stato dei pulsanti può essere incastrata nel multiplex sfruttando i due fili che comandano i transistor.
Anche qui, senza lo schema completo, non posso essere più specifico.
Prova a disegnare un nuovo circuito seguendo le indicazioni, e poi vedremo come e dove aggiungere il resto.
Se sbagli perché non sai, commetti un errore. Se sbagli perché non vuoi sapere, ne commetti due.