Lezione 3
Filed under: Programmazione Arduino
Comments: None
Operazioni di controllo (mascherature)
In questa terza lezione passiamo ad analizzare la parte essenzialmente di “controllo” svolta da un microcontrollore. Una volta acquisite le situazioni in cui si trovano gli ingressi, collegati al mondo esterno, il microcontrollore può effettuare una serie di controlli, spesso andando a verificare lo stato di un singolo bit, tramite una sequenza di “mascherature” per eliminare, di volta in volta, i bit non influenti ed isolare solo quelli necessari.
Esercitazione 7: Uso di mascherature di controllo
Con la piattaforma TinkerCad realizziamo questo circuito
Si vuole realizzare il seguente funzionamento:
- Il dip switch 1 accende/spenge il Led Verde
- Il dip switch 2 accende/spenge il Led Rosso
- Quando il dip switch 3 è alto allora il terzo led (Blu) si accenderà quando i primi due led hanno stati diversi, altrimenti resterà spento
- Quando il dip switch 4 è alto allora il terzo led (Blu) si accenderà quando il primi due led hanno il medesimo stato, altrimenti resterà spento.
Nella richiesta non sono state prese in esame le altre due possibili combinazioni del 3° e 4° dip-switch, eventualmente si potrebbe prevedere l’ipotesi che il Led Blu sia sempre spento quando i suddetti dip-switch sono entrambi bassi ovvero sempre acceso quando i due dip-switch sono entrambi alti.
Il codice sorgente completo per ottenere questa comportamento lo trovate qui.
Esercitazione 8: Uso del controllo switch()
Con la piattaforma TinkerCad realizziamo questo circuito
Il microcontrollore di Arduino pilota, tramite sette (od otto) uscite un display a 7 segmenti LED. Si vuole realizzare quindi un convertitore binario-decimale con relativo visualizzatore. Come ci siamo accorti ben presto durante la lezione, le combinazioni possibili sul dip-switch a 4 contatti sono 16, ben oltre le dieci combinazioni della numerazione decimale.
Il display utilizzato ha una struttura come indicato di seguito
Il display da noi utilizzato è però del tipo a catodo comune, quindi tutti e otto i led sono invertiti ed il piedino comune (Common) è collegato a tutti i catodi e pertanto, per poter accendere il segmento, andrà collegato a GND (alimentazione negativa), mentre il pin di uscita di Arduino porterà al singolo segmento il positivo.
I singoli segmenti hanno una sigla indicata con le lettere alfabetiche dalla A fino G, partendo dal segmento in alto e proseguendo in senso orario. Il punto decimale (Decimal Point) è indicato dalla sigla DP.
Mentre è abbastanza ovvio capire quali segmenti vanno accesi per ottenere le combinazioni numeriche da 0 fino a 9 (numerazione decimale), un po’ meno chiaro è cosa fare con le combinazioni da 10 a 15. Utilizzeremo per la visualizzazione sul display la codifica esadecimale, faremo quindi un visualizzatore in base 16. I simboli ,da sempre utilizzati in ambiente elettronico/informatico per visualizzare queste combinazioni, sono le lettere dell’alfabeto dalla A fino alla F.
Per visualizzare questi ulteriori simboli utilizzeremo a volte le lettere maiuscole e a volte le lettere minuscole, poichè questo tipo di display, molto semplice e con pochi piedini è nato ben prima di queste esigenze. Qui sotto potete vedere alcuni esempi di visualizzazione di caratteri alfabetici
Per la cronaca esistono altri modelli di display che arrivano fino a 14/16 segmenti e che riescono a visualizzare qualsiasi carattere alfabetico.
Il codice sorgente completo per ottenere questa comportamento lo trovate qui.
Riepilogo dei contenuti della lezione:
- Abbiamo creato una funzione separata Visualizza() per cercare di non “intasare” la funzione loop() facendola diventare estremamente lunga. Questo modo di procedere è consigliato perchè permette di mantenere “leggibile” il codice sorgente e permette anche di creare funzioni che, tramite il copia/incolla, possono essere facilmente riutilizzate in altri programmi (non bisogna mai “riscoprire l’acqua calda” tutte le volte).
- Abbiamo i vari tipi di controllo if()/else anche con più ramificazioni if()/elseif()/else.
- Abbiamo utilizzato il controllo switch() quando il numero di ramificazioni del controllo if() cominciare a diventare insostenibile.
- Abbiamo utilizzato le “mascherature” con le funzioni AND (&) ed OR (|). Qui potete vedere alcuni esempi che abbiamo visto durante la lezione. Anche qui potete vedere altri esempi.
- Abbiamo utilizzato la scrittura delle maschere in esadecimale (0x5B ad esempio) per poter passare direttamente e velocemente da numeri binari a numeri facilmente leggibili da noi “umani”.
Alla prossima lezione…