venerdì 23 ottobre 2015

Modulo con 14 LED per Arduino: uno sketch con tutti i giochi di luce - 1à parte

Ciao e ben ritrovati sul Blog Aspettando il Bus. 
Ricevo sempre richieste di aiuto su aspetti di programmazione legati all'unione di più sketch che controllano moduli diversi come LCD, display a LED , Bluetooth, Wifi, Moduli con relè , etc..
Ovviamente i singoli sketch da soli funzionano benissimo ma, insieme, sono incompatibili perché usano gli stessi PIN di Input/Output o semplicemente non stati pensati per funzionare con altri moduli.
Normalmente un programmatore incapsula il codice in librerie o funzioni, ma questo non è sempre facile.
Oggi vi mostrerò come integrare i sette sketch per il modulo con 14 LED in un solo sketch.

Fig.1 - Modulo con 14 LED per Arduino UNO R3 di Paolo Luongo
Fig. 1 - Modulo con 14 LED per Arduino UNO R3 di Paolo Luongo
Iniziamo dal progetto per il controllo di 14 LED che trovate qui.


Bene, vediamo quali modifiche dobbiamo fare allo sketch per far funzionare i vari sketch in sequenza uno dopo l'altro. Per prima cosa vi ricordo di dare uno sguardo alle prime lezioni di programmazione che ho pubblicato sul Blog e che trovate qui. Poi con molta calma ragioniamo su come modificare uno sketch per aggiungere altri giochi.
La prima idea, che è anche la più semplice, è quella di aggiungere tutti i giochi al foglio Calc e di incollarli come dati in un solo sketch. Facile e veloce.
Così facendo abbiamo aggirato il problema in modo veloce ma non abbiamo imparato nulla.
Ritorniamo ai nostri sketch: ognuno ha una parte comune e una parte che è legata al gioco che si vuole fare.
Il primo passo è incapsulare o meglio racchiudere la parte variabile in una funzione o procedura.

Ma cosa sono le funzioni o le procedure ? 
Facciamo qualche esempio: la mamma chiede al figlio di comprare un litro di latte e di portarle il resto. La mamma saprà sicuramente se è andato tutto bene perché il figlio nel portarle il resto le dirà anche se è andato tutto bene (c'è il resto) o niente resto (latte finito). Questa è una tipica funzione.
Altro esempio: La mamma deve uscire e chiede al figlio di comprare il latte. La mamma non si aspetta che il figlio le comunichi qualcosa sull'acquisto del latte e scoprirà solo al momento di rientrare se c'è o meno il latte in casa. Questa è una tipica procedura.

Come si riconoscono le funzioni e le procedure in C++? 
Facile, se davanti al nome della funzione c'è VOID allora è una procedura, altrimenti è una funzione.
Ma cosa ritornerà? Basta vedere il comando return() alla fine della funzione.

Nel nostro caso ecco come si presenterà lo sketch racchiuso in una procedura (notate il void):

Fig.2 - Sketch B messo in una procedura di Paolo Luongo
Fig. 2 - Sketch B messo in una procedura di Paolo Luongo
Come noterete c'è la parte variabile dello sketch di base con i valori numerici del gioco che vogliamo realizzare e c'è anche una nuova procedura LanciaICodici che si occupa di mostrare le singole combinazioni che costituiscono il gioco.

Fig. 3 - LanciaICodici() - Procedura del nuovo sketch di Paolo Luongo
Fig. 3 - LanciaICodici() - Procedura del nuovo sketch di Paolo Luongo
Una nota per i non addetti ai lavori: con la notazione valori[] si indica un insieme di valori o array che sono memorizzati in sequenza (in gergo si chiama vettore). Il numero che viene  messo fra le parentesi [ ] indica quale valore vogliamo. Nel nostro caso abbiamo utilizzato una variabile i che assumerà tutti i valori compresi fra 0 e nro meno uno perché è controllata dal for. 
Dimenticavo... in C++ i vettori iniziano con il posto 0 (zero), salvo diversa indicazione.

Dopo aver ripetuto il lavoro fatto in Fig.2 per tutti gli sketch, è il momento di modificare il programma principale: 

Fig.4 - Le modifiche del programma principale dello sketch di Paolo Luongo
Fig.4 - Le modifiche del programma principale dello sketch di Paolo Luongo
a questo punto non rimane che caricare il nuovo skecth su Arduino UNO R3 ed ammirare il risultato dei nostri sforzi.

Manca solo il video ed aspettare la seconda parte di questo articolo.


Nel frattempo, dai uno sguardo ad altri articoli del Blog...

Buon lavoro !
Paolo
:-)




Nessun commento: