|
Esercizio# 4 - Parametri, Chiamate (calls) e loop finiti - Output.spin
L'esercizio precedente esegue il lampeggio di un LED su di un pin. Il codice è funzionante, ma poco flessibile. In questo esercizio modificheremo il codice al fine di eseguire il lampeggio su due LED, collegati singolarmente su due diversi pin (16, 17) ed aventi frequenza differente.
Nella nuova versione del codice, è stato aggiunto un nuovo metodo 'Main' il quale sarà il punto d'inizio nell'esecuzione del programma (perchè è il primo metodo del file) e poi sono state apportate modifiche minori nel metodo Toggle. Il metodo Toggle verrà richiamato dal metodo Main ogni volta desideriamo che un LED lampeggi.
|
{{Output.spin
Esecuzione di un lampeggio LED su due pin, uno dopo l'altro.}}
PUB Main
Toggle(16, 3_000_000, 10) 'Toggle P16 10 volte, 1/4 s ciascuno
Toggle(17, 2_000_000, 20) 'Toggle P17 20 volte, 1/6 s ciascuno
PUB Toggle(Pin, Delay, Count)
{{Toggle Pin, Count times with Delay clock cycles in between.}}
dira[Pin]~~ 'Imposta il pin I/O come output
repeat Count 'Ripeti tante volte quanto indicato in Count
!outa[Pin] 'Esegui il lampeggio invertendo lo stato logico (toggle)
waitcnt(Delay + cnt) 'Ferma l'esecuzione quanto indicato in Delay
|
Inoltre nel nuovo codice è stato eliminato il blocco di dichiarazione delle costanti (CON), in quanto il metodo Main dovrà richiamare il metodo Toggle ad ogni accensione dei LED passando i parametri relativi al numero di pin e al tempo di attesa Delay. Questi valori ogni volta cambiano, quindi non possono essere delle costanti. In aggiunta è stato introdotto un nuovo valore Count, che in realtà è una variabile passata come parametro e che specifica quante volte il LED dovrà lampeggiare. Il contenuto della variabile Count verrà utilizzato nel ciclo (o loop) 'repeat' eseguendo il codice all'interno di esso, tante volte quanto contenuto in Count.
Il metodo Toggle.
Diamo un'occhiata solo al metodo Toggle. Questo metodo viene dichiarato come pubblico (PUB) e con tre parametri da ricevere, Pin, Delay e Count quando verrà richiamato. Ciascun parametro sarà, all'interno del metodo una variabile di tipo 'long' (4-byte), e potrà essere utilizzato e modificato nel suo valore solo all'interno del metodo. Le modifiche eventualmente apportate, non influiranno all'esterno del metodo Toggle.
Il metodo Main.
Il metodo Main è il primo ad essere eseguito all'accensione o al reset del propeller. Al suo interno troveremo solo due istruzioni di chiamata all'altro metodo Toggle, passando per ciascuno di esso, i parametri relativi a quale pin deve essere utilizzato per il lampeggio del LED, il ritardo nel lampeggio (Delay) e quante volte deve lampeggiare ogni LED (10 e 20 volte). All'avvio, viene eseguito il lampeggio del primo LED collegato al pin 16, per 10 volte, passando per il metodo Toggle. Quando questo finisce, l'esecuzione ritorna al metodo Main per eseguire la successiva istruzione che risulta ancora una volta una chiamata al metodo Toggle, ma con parametri diversi. Lampeggia il secondo LED collegato sul pin 17 per 20 volte. A questo punto l'esecuzione ritorna ancora in Main, ma questa volta non ci sono altre istruzioni da eseguire, quindi il Cog si spegne e il propeller si mette in uno stato dormiente, fintanto che si verifichi un ciclo di alimentazione elettrica o che avvenga un RESET del chip.
|