Effetto Knight Rider

Lo scopo di questo esercizio è di utilizzare un nuovo metodo per indirizzare il livello logico “1 e zero”, alla porta di Arduino, dove sono collegati i led.

Anziché utilizzare un Ciclo (LOOP) con la sequenza, “OUT 1 – Delay - OUT 0 - Delay”, per accendere e spegnere il led i sequenza ,

utilizzerò una variabile a cui associo una serie di numeri corrispondenti al valore decimale della uscita  cui è collegato il led.

D0    D1    D2    D3    D4    D5    D6    D7

1       2       4       8      16    32    64    128

Definisco la variabile che chiamo LED, cui associo il valore del numero dei membri della serie pertanto LED[15],  indica che la serie è composta da 16 numeri (8 + 8); poiché conto anche lo zero, il numero che determina quanti sono i valori della serie tra la parentesi quadra sarà:  16 – 1 = 15.

Gioco di luci, molto in voga negli anni 80’.

kr LED[]

Per inserire il numero 15 nella parentesi quadra della variabile LED, scrivo 15 nello spazio

 Array Lengh (lunghezza della serie)

 e premo il pulsante

 “Add Array Dimension.

15

Questa serie di valori, saranno inseriti nella funzione calcolo, dove a fianco di ciascuna variabile che compone la serie, indicata come:

LED[X]=Y

X è la posizione nella sequenza, e Y è il valore numerico contenuto nella serie.

Così con:

LED[0] = 1, indico il led collegato alla uscita D0

LED[1] = 2, indico il led collegato alla uscita D1

LED[2] = 4, indico il led collegato alla uscita D2

LED[3] = 8, indico il led collegato alla uscita D3

LED[4] = 16, indico il led collegato alla uscita D4

LED[5] = 32, indico il led collegato alla uscita D5

LED[6] = 64, indico il led collegato alla uscita D6

LED[7] = 128, indico il led collegato alla uscita D7

 

Dopo LED[7], la sequenza procede in ordine inverso fino a

LED[14] =1, che indica il led collegato al D0

Per utilizzare questa serie di numeri in modo che siano inviati verso i pin di Arduino, definisco la variabile COUNTER, per accendere un led alla volta, a ogni ripetizione del LOOP (Ciclo) che preleva dalla serie, inserita nella funzione CALCOLO, il numero che corrisponde al pin della porta cui è collegato il led.

COUNTER = COUNTER + 1

kr counter

Variabile LED[x]

Variabile COUNTER

8led knight riderm serie in calcolo
8led knight rider calcolo

Inserimento della serie nella funzione CALCOLO.

l’ordine in cui sono inseriti i dati, determina la sequenza di uscita sui pins.

8led knight rider programma

Programma completo

8led knight rider LED[counter]
8led knight rider counter + 1

COUNTER = COUNTER + 1, è l’espressione che fa aumentare la variabile COUNTER ad ogni ciclo del programma.

OUTPUT

LED[COUNTER]  -> PORTB, la parentesi quadra , determina quale è il valore della serie da inviare alla porta B; la sequenza di uscita è quella scritta nella funzione CALCOLO

DELAY, il valore di Delay , determina la frequenza di accensione dei leds

La funzione “DECISIONE”, fa in modo che una volta esauriti i 15 numeri della serie, il programma con la funzione “GO TO” ripete il ciclo dall’inizio.

Senza queste ultime istruzioni il programma si fermerebbe all’ultimo numero della serie.

La Funzione Goto Connection  Point A, fa saltare il programma al Conection Point [A]:A

8led knight rider loop
8led knight rider goto

Poiché a ogni ciclo il valore di COUNTER aumenta di 1, avrò l’accensione dei led nella sequenza prestabilita dalla serie (Array).

Il ciclo (Loop) principale = 1, significa che il programma continua fino al termine del contenuto dela serie.

Funzione Goto Connection Point

Funzione Connection Point

8led knight rider delay
8led knight rider led

Collegamento dei Leds alla porta B

Poichè, ho usato un Array di 8 leds,con Zcount =8, trattandosi di una porta con8 uscite, non è necessario attribuire ogni led a ciascuna uscita della porta, perchè l’assegnazione è automatica.

Listato in C code

Riccardo Monti