Questo progetto che permette di gestire una sequenza di eventi collegando all’uscita della porta B di Arduino, una serie di attuatori.
I led possono essere sostituiti da un foto accoppiatore per controllare un carico di potenza.
Il progetto richiama il funzionamento di un contatore Johnson, che permette di gestire una sequenza di eventi.
Premendo un pulsante il contatore accende i led in sequenza, premendo “reset,” il contatore, si azzera ; il contatore può essere impostato per contare da 1 a 8 collegando una delle sue uscite al piedino di reset.
3D system panel
nel 3D system panel, inserisco gli oggetti che utilizzo nel progetto
configuro i pulsanti “clock” , collegandolo al bit 2 della porta D, e “reset”, collegandolo al bit 3 della porta D
nel microchip ATMEGA328, utilizzato da Arduino UNO,i pin 2 e 3 della porta D, sono usati da INT0 e INT1.
imposto lo switch_array a 3 elementi e li collego ai bit 4,5 e 6 della porta D
collego il led_array alla porta B
variabili di progetto
in Project Explorer, aggiungo le Variabili che utilizzerò nel progetto
Variabile “clock”, di tipo Byte, per il conteggio
variabile “reset”, per azzerare il contatore
variabili “dip0, dip1 e dip 3”, di tipo Bool,
per gestire lo stato logico dei “dip switch”, che utilizzerò per impostare il contatore
combinazione dei “dip switch”
la variabile “luci[10]”, contiene le dieci combinazioni , richiamate dalla variabile “clock”
Add Array Dimension, determna la lunghezza dello Array
l’uscita in sequenza dei dati contenuti nello “Array”, dipende dalla variabile “clock”
i dati nello “Array”, sono rappresentati in “binario” (0B, seguito da zero e uno)
la rappresentazione in “binario”, permette di visualizzare quale sarà l’uscita attiva (1) e quale quella spenta (0).
Diagramma di flusso
per gestire il pulsante di “clock” e “reset”, utilizzerò la” funzione Interrupts”.
macro “clock”
macro “reset”
gestione dello Array
la funzione “calcolo”, messa prima del ciclo principale, rappresenta il contenuto dello Array “luci[10]”.
ogni posizione dello Array, richiama la combinazione di zero e uno, che verrà inviata alla uscita della porta B.
il valore nella parentesi quadra, rappresenta il valore raggiunto dal contatore .
la funzione “output”, inserita nel ciclo principale, invia il contenuto dello Array, alla porta B.
la funzione “Decisione”, nel ciclo principale, con l’istruzione : “if: clock=reset”, permette di far ripartire il conteggio, quando il contatore raggiunge il valore contenuto nella variabile “reset”.
con le funzioni “ Connection Point” e “Goto Connection Point”, il ciclo si ripete.
con lo stesso principio di funzionamento utilizzato nell’esercizio Knight Rider, il ciclo si ripete.
utilizzo dei “dip switch” per determinare quando il contatore si resetta e il conteggio riparte da zero.
nel ciclo principale inserisco tre funzioni “Inputs”, che leggono il valore, zero o uno, dei “Dip Switch”:
la funzione “calcolo” inserita in ogni ramo della funzione “switch case”, resetta il conteggio del contatore, al valore selezionato.
con la funzione “Switch case”, determino il numero delle uscite in funzione della combinazione dei “dip switch”
l’espressione “Switch dip0 + 2*dip1 + 4*dip2”, limita le combinazioni dei “dip switch” a 8 ( 0 - 7).
C Code
Riccardo Monti