page10

alcuni calcoli- restituisce un altro long (l’istruzione return di riga 35 deve far uscire dalla funzione un valore dello stesso tipo che abbiamo usato nella definizione della funzione: è la prima parola della riga 31).
Una volta definita la nostra funzione, possiamo anche invocarla (ovvero usarla effettivamente). A riga 22 c’è la chiamata della funzione: la richiamiamo per nome, passandole come argomento (tra parentesi rotonde) la variabile “tempo”. Il risultato dell’esecuzione della funzione è un valore di tipo long che assegniamo alla variabile “distanza”.
A proposito, come mai le funziono setup() e loop() non hanno nessuna istruzione di return? Semplicemente perché quando sono invocate svolgono dei compiti, ma non devono restituire alcun valore di ritorno: ed è proprio per questo che il loro tipo è void.
d) L’operatore ?: (riga 27): in fondo alla funzione loop() abbiamo usato un particolare operatore che si chiama “operatore di assegnazione condizionale” e che è definito in molti linguaggi di programmazione; è un operatore ternario (cioè prende in ingresso tre valori) e viene utilizzato per scrivere in modo molto compatto un’assegnazione che però dipende da una condizione.
Quanto trova una scrittura del tipo “condizione ? A : B” il processore di Arduino controlla la condizione che sta prima del “?”: se questa è vera, allora l’espressione vale A; se invece è falsa, l’espressione viene valutata come B.
In figura  è riportata la riga in cui abbiamo usato l’operatore ?: ed il codice che avremmo dovuto usare se avessimo voluto scrivere in forma espansa il controllo e le assegnazioni.
Come vedi la scrittura che utilizza l’operatore ?: (detto anche l’operatore di Elvis, dato che sembra un emoticon col ciuffo) è molto compressa, ma è anche meno chiara e leggibile delle istruzioni in cui abbiamo usato l’if-then-else. Impiega quindi quella scrittura a tuo rischio e pericolo: questo sarà il primo passo per diventare un vero hacker! :-D
e) I datasheet: se abbiamo un componente che non sappiamo usare bene o del quale non conosciamo le caratteristiche, possiamo cercare aiuto nella documentazione o nei vari tutorial che troviamo in rete; se però ancora mancano delle informazioni che ci permettono di capire come utilizzarlo, dobbiamo cercare il suo “foglio delle specifiche” (in inglese: datasheet). É un documento scritto di solito dalla casa costruttrice che riassume le caratteristiche tecniche del componente: le dimensioni, la piedinatura, i voltaggi coi quali può essere alimentato, l’intervallo di misurazione, la precisione, i fattori che possono influenzarla, le condizioni ambientali di utilizzo (alcuni componenti ad esempio non lavorano bene, se la temperatura è troppo alta o troppo bassa) e magari degli esempi tipici di utilizzo.
Cercando su internet il datasheet per il sensore HC-SR04 troviamo diversi documenti, ed andando a leggere uno dei primi risultati (http://elecfreaks.com/store/download/HC-SR04.pdf), scopriamo ad esempio la portata del sensore (misura distanze da 2 centimetri fino a 4 metri) e la sua la precisione (fino a 3 mm), come fare per attivare la misura (come dev’essere fatto il segnale che mandiamo come trigger: un impulso da 10 μs), le dimensioni e le caratteristiche dell’ostacolo per assicurare un buon rimbalzo dell’eco, l’angolo di lavoro, la frequenza con la quale può effettuare le misure (utile per capire se dobbiamo magari introdurre dei tempi di attesa come abbiamo fatto a riga 15 dello sketch) e così via.
Sperimenta per bene il comportamento di questo componente: usa una stecca centrimetrata per valutare la sua precisione, perché ci servirà nel prossimo progetto!
L’operatore ?:
Questa espressione vale HIGH o LOW, in base alla condizione (distanza < 10)
Possiamo espandere la riga precedente in questo blocco if-then-else
Licenza: CC-BY Alessandro Ebranati, CoderDojo Trento
Quest'opera è distribuita con Licenza Creative Commons Attribuzione 4.0 Unported
Trovi questo ed altri tutorial su coderdojotrento.it
Realizzato con il supporto di CoderDolomiti.
Pag.
<number>/13