| Funziona! |
Anche se poi non l'ho fatto... ma la tentazione era forte
NOTA: il codice è stato aggiornato. Se vuoi vedere la versione a cui si riferisce questo post vai quì
Iniziamo ad osservare il codice.
All'inizio, come è solito fare includo le librerie che uso; in questo caso solo la liquid crystal è necessaria.
L'LCD si trova collegato sui pin 7, 8, 9, 10, 11, 12.
Con delle variabili indichiamo i pin dei sensori analogici, con mis indico un numero di cicli dopo il quale aggiorniamo i valori delle letture (così da non aggiornare troppo spesso l'LCD che altrimenti diventa illeggibile)
vrif è una variabile che utilizziamo per indicare il voltaggio di riferimento (1.1 V è perfetto perchè molto preciso). Più avanti vedremo dove è stato impostato il valore esterno.
Se vi chiedete a cosa serve un array di byte, vi consiglio di andarvi a vedere la libreria Liquid Crystal; è molto utile per creare caratteri che non esistono. Un tool online per disegnare questi caratteri su schermi con "quadretti" da 5*7 pixel o 5*8 è su questo sito. Mi è stata molto utile varie volte. (il segno del grado non esiste infatti!)
Vedremo più avanti come stampare un carattere creato da noi sull'LCD.
Passiamo al setup.
Il pin 13, dato che a me dà fastidio tenerlo sempre acceso, lo spengo fin dall'inizio del setup.
Ecco: analogReference(INTERNAL); serve per impostare il tipo di riferimento per il voltaggio analogico interno. Vi sono vari valori che possiamo impostare:
- DEFAULT: viene impostato il valore di base: 5V per le schede arduino a 5V e 3.3 per quelle a 3.3V
- INTERNAL: è una riferimento interna, equivalente a 1.1V sull' ATmega168 o ATmega328 (Arduino UNO e MICRO) and 2.56V sull' ATmega8. Non si può utilizzare questo parametro su un arduino MEGA (ATmega2560 o 1280)
- INTERNAL1V1: riferimento a 1.1V SOLO per il MEGA
- INTERNAL2V56: riferimento a 2.56V SOLO per il MEGA
- EXTERNAL: il voltaggio applicato al pin AREF ( solo da 0 a 5V ) è utilizzato come riferimento.
- Dopo aver cambiato il riferimento i primi valori restituiti da analogRead() potrebbero essere "sporchi"
- Se colleghiamo il pin AREF a un voltaggio di riferimento e poi non impostiamo l'analog reference ( prima di utilizzare analogRead() ) o passiamo per il pin un voltaggio superiore a 5 volt o inferiore a 0 volt, manderemo in corto l'AREF e il riferimento interno attivo, danneggiando irreparabilmente il vostro processore.
Se applichiamo 2.5V all'AREF, 2.5 * 32 / (32 + 5) = ~2.2V che il processore riceverà.
Continuando
A questo punto finiamo la funzione setup stampando alcune cose a schermo in seriale (dopo aver utilizzato Serial.begin(baudrate) ) e sull'LCD (indicando la dimensione, prima delle colonne, 20, e poi delle righe, 4).
Il void loop()
Innanzitutto incrementiamo il contatore delle misurazioni ( mis++ ) e poi aggiungiamo alle attuali letture salvate nelle variabili media1 e media2 i valori conversi in gradi Celsius attraverso l'utilissima funzione readTemp() che accetta come parametro il valore del pin analogico che si vuole analizzare.
Analizziamo quindi la funzione:
il calcolo è semplice: moltiplichiamo 100 per il valore di riferimento e per una lettura analogica del sensore. Il tutto poi è diviso per 1024, il valore massimo + 1 leggibile da un processore dell'UNO (il DUE può dare il doppio della precisione, 2048 - 1 valori. -1 per includere lo 0)
Se abbiamo effettuato 5 letture, dividiamo i valori per 5 per effettuare la media; dopodichè li stampiamo sull'LCD e in Seriale se è collegato.
Non dimentichiamo di resettare mis e le medie dei valori.
Tutto quà, non era neanche troppo lungo :)
Spero che vi sia interessato; non sapete quanto tempo mi ci è voluto per ridocumentare tutto x)
Il codice che lascio quà sopra è utilizzabile da chiunque; basta che non sia per opere commerciali, che per definirlo proprio abbiate apportato modifiche grosse allo sketch e che lo condividiate in rete con gli stessi termini.
Alla prossima con un nuovo progetto!
Nessun commento:
Posta un commento