Mettendo ordine tra la mia library di sketch ho ritrovato alcune bozze di tutorial per Arduino Esplora che avevo incominciato a scrive nel mese di novembre durante il viaggio di rientro in treno da Verona (JobOrienta). Condivido con voi quanto da me velocemente elaborato, sperando che possa essere utile anche ad altri.
L’attività di creazione dei tutorial incomincia ovviamente dagli esempi resi disponibili da Arduino e quello che vi allego e lo sketch per il rilievo della temperatura e la scrittura sul TFT.
Ho aggiunto alla soluzione dell’esempio standard modifiche alla modalità di visualizzazione su TFT, allarme nel caso di superamento di una temperatura di soglia, variazione di colore del led rgb e avvisi sonori.
Poiché lo sketch è destinato agli studenti, all’interno di esso, in modalità di commento trovate le spiegazioni delle funzioni di libreria in cui metto in evidenza (anche in maniera ripetuta) funzionalità, parametri e valori restituiti.
Vi allego inoltre una versione dello stesso sketch con meno commenti in modo che per i più esperti sia possibile vedere la struttura generale del codice.
Lo sketch non è stato ottimizzato e nasce come primo esempio su cui gli studenti dovranno poi effettuare modifiche e miglioramenti.
/* Rilevatore di temperatura con Esplora TFT - V03 Questo esempio è per il TFT collegato ad Arduino Esplora. Questo sketch e tratto dal tutorial disponibile su sito Arduino la cui prima versione è stata creata il 15 aprile 2013 da Scott Fitzgerald la potete trovare al seguente indirizzo http://arduino.cc/en/Tutorial/EsploraTFTTemp modified 23 November 2013 by Michele Maffucci https://www.maffucci.it La variante proposta permette di segnalare un allarme se viene superata una temperatura di soglia fissata dall'utente, inoltre a titolo didattico sono stati aggiunti commenti di spiegazione alle funzioni utilizzate. */ // inclusione delle librerie necessarie per // il funzionamento di Esplora, del TFT #include #include <Esplora.h> #include <TFT.h> #include <SPI.h> char tempPrintout[3]; // array in cui memorizzare i valori di temperatura in gradi C char tempPrintoutF[3]; // array in cui memorizzare i valori di temperatura in gradi F // temperatura di allarme const int maxTemp = 22; void setup() { // begin() // Inizializzazione dell'LCD // istanza della classe TFT quando si usa la scheda Esplora. // Se si usa il display deve essere presente. // parametri // nessuno // restituisce // nulla // EsploraTFT.background(0,0,0); // Cancella lo schermo con uno sfondo nero EsploraTFT.begin(); //-- // Cancella tutto quello che attualmente visualizzata sullo schermo LCD // con il colore indicato. Può essere utilizzato nel loop() per cancellare lo schermo. // La funzione background() accetta valori a 8 bit per ognuno dei canali rosso, verde e blu // però lo schermo non visualizza con questa fedeltà. // I valori di rosso e blu sono scalati a 5 bit e il verde a 6 bit. // sintassi // screen.background(red, green, blue); // parametri // red: int da 0 a 255 // green: int da 0 a 255 // blu: int da 0 a 255 // restituisce // nulla EsploraTFT.background(0,0,0); //--- // stroke() // La funzione stroke() accetta valori a 8 bit per ognuno dei canali rosso, verde e blu // però lo schermo non visualizza con questa fedeltà. // I valori di rosso e blu sono scalati a 5 bit e il verde a 6 bit. // sintassi // screen.stroke(red, green, blue); // parametri // red: int da 0 a 255 // green: int da 0 a 255 // blu: int da 0 a 255 // restituisce // nulla // EsploraTFT.stroke(255,0,0); // imposta il colore delle line e delle forme a rosso EsploraTFT.stroke(255,0,0); //--- // setTextSize(); // Imposta la dimensione del testo che segue // La dimensione di default è 1. // Ogni aumento di dimensione di una unità corrisponde ad un aumento di 10 pixel. // Quindi dimensione 1 = 10 pixel, dimensione 2 = 20 pixel e così via. // sintassi // screen.setTextSize(size); // parametri // size: intero da 1 a 5 // restituisce // nulla // EsploraTFT.setTextSize(2); // imposta la dimensione del testo a 2 (20 px) EsploraTFT.setTextSize(2); // il testo viene posizionato in alto a sinistra dello schermo // il testo rimane permanente sullo schermo // la prima riga alle coordinate (0,0) // la seconda riga alle coordinate (0,20) //--- // .text(); // sintassi // screen.text(text, xPos, yPos); // parametri // text : array di tipo char in cui viene memorizzato il testo da visualizzare sul display // xPos : variabile int, coordinata x del testo da scrivere // yPos : variabile int, coordinata y del testo da scrivere // restituisce // nulla // scrive il testo tra virgolette alle coordinate (0, 0) // scrive il testo tra virgolette alle coordinate (0, 20) EsploraTFT.text("Gradi\n ",0,0); EsploraTFT.text("centigradi:\n ",0,20); // il testo che segue, all'interno del loop, vine impostato a 5 (50 px) EsploraTFT.setTextSize(5); } void loop() { // viene letta la temperatura in Celcius e memorizzata come stringa // il metodo readTemperature permette di restituire la temperatura in gradi Celsius // oppure in gradi Faherenheit, dipende dal parametro che viene passato, nell'esempio // DEGREES_C gradi centigradi. L'intervallo in gradi oscilla da -40 °C a 150 °C // readTemperature() // Legge la temperatura ambiente rilevata dal sensore su Esplora // e in funzione del parametro passato restituisce il valore // in gradi Celsius che Fahrenheit // parametri // scale: la scala scelta per l'output. // può asumere i valori: DEGREES_C e DEGREES_F // restituisce // un valore intero che rappresenta la temperatura in gradi Celsius o Fahrenheit. // L'intervallo di temperatura in gradi Celsius è da -40°C a 150°C // L'intervallo di temperatura in gradi Fahrenheit è da -40°F a 302°F. String temperature = String(Esplora.readTemperature(DEGREES_C)); String temperatureF = String(Esplora.readTemperature(DEGREES_F)); //-- // toCharArray(); // Copia la stringa di caratteri nel buffer // sintassi // string.toCharArray(buf, len) // parametri // string: variabile di tipo string // buf: il buffer dove copiare la stringa di caratteri (char []) // len: la dimensione del buffer (unsigned int) // converte la stringa in array di caratteri temperature.toCharArray(tempPrintout, 3); temperatureF.toCharArray(tempPrintoutF, 3); controlTemp(); } void controlTemp(){ // controlliamo se la temperatura è maggiore del valore fissato maxTemp if (Esplora.readTemperature(DEGREES_C)>maxTemp){ // imposta il colore del testo a bianco EsploraTFT.stroke(255,0,0); // scrive la temperatura in gradi Celsius nelle linee sottostante alle coordinate indicate EsploraTFT.setTextSize(5); EsploraTFT.text(tempPrintout, 0, 50); // scrive i caratteri "." e "C" alle coordinate indicate EsploraTFT.text(".", 55, 25); EsploraTFT.text("C", 80, 50); // scrive la temperatura in gradi Fahrenheit nelle linee sottostante alle coordinate indicate EsploraTFT.setTextSize(1); EsploraTFT.text(tempPrintoutF, 110, 78); // scrive i caratteri "." e "F" alle coordinate indicate EsploraTFT.text(".", 121, 73); EsploraTFT.text("F", 126, 78); // imposta il testo a 2 EsploraTFT.setTextSize(2); // imposta il colore del testo EsploraTFT.stroke(255,255,0); // scrive il testo sottostante alle coordinate indicate EsploraTFT.text("Attenzione:\n ",0,90); EsploraTFT.text("troppo caldo!:\n ",0,110); // funzione che consente di effettuare il blink del led sulla scheda Esplora blinkLedOn(); // tone() // La funzione genera un'onda quadra di frequenza e durata stabilita dal buzzer di Esplora // La durata è espressa in milliseconds, se non è specificata nessuna durata l'emissione // del tono prosegue fino a quando non viene incontrata una finzione Esplora.noTone(). // Attenzione che l'uso di tone() interferisce con il fading del red rosso. // sintassi // Esplora.tone(frequency, duration) // parametri // frequency: un unsigned int che rappresenta la frequenza espressa in hertz // duration: un unsigned long che rappresenta la durata in millisecondi (ozionale) del tono // emissione di un tono di allarme. Nota LA per 1 secondo Esplora.tone(440, 1000); // ripristina il testo a 5 per il prossimo ciclo di controllo // EsploraTFT.setTextSize(5); // persistenza del messaggio per 1 secondo // prima che venga effettuato il successivo controllo delay(1000); // cancella il testo prima di avviare il successivo loop EsploraTFT.stroke(0,0,0); // imposta il testo ad una dimensione di 2 cioè 20 px EsploraTFT.setTextSize(2); // scrive il testo alle coordinate indicate EsploraTFT.text("Attenzione:\n ",0,90); EsploraTFT.text("troppo caldo!:\n ",0,110); // imposta il testo ad una dimensione di 5 cioè 50 px EsploraTFT.setTextSize(5); // stampa il valore della temperatura in gradi Celsius alle coordinate indicate EsploraTFT.text(tempPrintout, 0, 50); // imposta il testo ad una dimensione di 1 cioè 10 px EsploraTFT.setTextSize(1); // stampa il valore della temperatura in gradi Fahrenheit alle coordinate indicate EsploraTFT.text(tempPrintoutF, 110, 78); } else{ // nel caso in cui la temperatura è al di sotto dei 22 gradi Celsius // viene impostato il colore di linee e forme a bianco // spegne LED esterno blinkLedOff(); // imposta il colore del testo a bianco EsploraTFT.stroke(255,255,255); // scrive la temperatura in gradi Celsius nelle linee sottostante alle coordinate indicate // imposta il testo ad una dimensione di 5 cioè 50 px EsploraTFT.setTextSize(5); // stampa il valore della temperatura in gradi Celsius alle coordinate indicate EsploraTFT.text(tempPrintout, 0, 50); // scrive i caratteri "." e "C" alle coordinate indicate EsploraTFT.text(".", 55, 25); EsploraTFT.text("C", 80, 50); // imposta il testo ad una dimensione di 1 cioè 10 px EsploraTFT.setTextSize(1); // stampa il valore della temperatura in gradi Fahrenheit alle coordinate indicate EsploraTFT.text(tempPrintoutF, 110, 78); // scrive i caratteri "." e "F" alle coordinate indicate EsploraTFT.text(".", 121, 73); EsploraTFT.text("F", 126, 78); delay(1000); // cancella il testo prima di avviare il successivo loop EsploraTFT.stroke(0,0,0); // imposta il testo ad una dimensione di 2 cioè 20 px EsploraTFT.setTextSize(2); // scrive i caratteri "Attenzione:" (con ritorno a capo) e "troppo caldo!:" (con ritorno a capo) alle coordinate indicate EsploraTFT.text("Attenzione:\n ",0,90); EsploraTFT.text("troppo caldo!:\n ",0,110); // imposta il testo ad una dimensione di 5 cioè 50 px EsploraTFT.setTextSize(5); // stampa il valore della temperatura in gradi Celsius alle coordinate indicate EsploraTFT.text(tempPrintout, 0, 50); // imposta il testo ad una dimensione di 1 cioè 10 px EsploraTFT.setTextSize(1); // stampa il valore della temperatura in gradi Fahrenheit alle coordinate indicate EsploraTFT.text(tempPrintoutF, 110, 78); } } // funzione che permette di far lampeggiare in diversi colori il led di Esplora void blinkLedOn(){ // writeRGB() // Consente di controllare la luminosità di un determinato colore del led rgb di Esplora. // sintassi // Esplora.writeRGB(red, green, blue) // parametri // red, variabile int imposta la luminosità del rosso. Intervallo da 0 a 255. // green, variabile int imposta la luminosità del verde. Intervallo da 0 a 255. // blue, variabile int imposta la luminosità del blu. Intervallo da 0 a 255. // restituisce // nulla Esplora.writeRGB(255,0,0); // LED rosso delay(1000); // attesa di 1 sec Esplora.writeRGB(0,255,0); // LED verde delay(1000); // attesa di 1 sec Esplora.writeRGB(0,0,255); // LED blu delay(1000); // attesa di 1 sec Esplora.writeRGB(255,255,0); // LED giallo delay(1000); // attesa di 1 sec Esplora.writeRGB(0,255,255); // LED ciano delay(1000); // attesa di 1 sec Esplora.writeRGB(255,0,255); // LED magenta delay(1000); // attesa di 1 sec Esplora.writeRGB(255,255,255);// LED bianco delay(1000); // attesa di 1 sec } void blinkLedOff(){ Esplora.writeRGB(0,0,0); // spegne il LED }
Questa la versione con meno commenti:
Continua a leggere