Nell’articolo precedente della guida in questione sono stati esposti i concetti teorici del comportamento di una funzione.
In questo articolo si potrà ben evincere il comportamento di una funzione all’interno del software Arduino IDE.
Nel progetto in questione il LED RGB si accenderà dapprima nello stato di colore rosso, poi nel colore verde ed infine nel colore blu per poi tornare nuovamente in modo ciclico al colore rosso.
Per realizzare questo progetto servono i seguenti materiali:
- (1) x Elegoo UNO R3
- (1) x Breadboard con 830 punti di aggancio
- (4) x Connettori M-M (Connettori Maschio-Maschio)
- (1) x LED RGB
- (3) x Resistenza da 220 ohm
Il diagramma di collegamento è il seguente:
Lo schema elettrico è il seguente:
Codice con la funzione void (la spiegazione nel dettaglio è riportante nelle righe successive):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
//definzione dei vari pin utilizzati dal LED RGB #define BLUE 3 #define GREEN 5 #define RED 6 //dichiarazioni delle funzioni void rosso (); void verde (); void blu(); void setup() { pinMode(RED, OUTPUT); //La variabile RED è impostata come variabile di output pinMode(GREEN, OUTPUT); //La variabile GREEN è impostata come variabile di output pinMode(BLUE, OUTPUT); //La variabile BLUE è impostata come variabile di output digitalWrite(RED, HIGH); //imposto il LED rosso come acceso digitalWrite(GREEN, LOW); //imposto il LED verde come spento digitalWrite(BLUE, LOW); //imposto il LED blu come spento } //dichiarazione variabili int redValue; int greenValue; int blueValue; void loop() { #define delayTime 1000 //definizione dell'intervallo di tempo //chiamata delle funzioni rosso(); verde(); blu(); } void rosso (){ redValue=255; //assegno alla variabile redValue il valore 255 greenValue=0; //assegno alla variabile greenValue il valore 0 blueValue=0; //assegno alla variabile blueValue il valore 0 analogWrite(RED, redValue); //il led si accenderà nel colore rosso delay(delayTime); //ci sarà 1 secondo di pausa tra le due esecuzioni di stato digitalWrite(RED, LOW); //spengo il led del colore rosso } void verde () { greenValue=255; //assegno alla variabile greenValue il valore 255 redValue=0; //assegno alla variabile redValue il valore 0 blueValue=0; //assegno alla variabile blueValue il valore 0 analogWrite(GREEN, greenValue); //il led si accenderà nel colore verde delay(delayTime); //ci sarà 1 secondo di pausa tra le due esecuzioni di stato digitalWrite(GREEN, LOW); //spengo il led del colore VERDE } void blu (){ blueValue=255; //assegno alla variabile blueValue il valore 255 greenValue=0; //assegno alla variabile greenValue il valore 0 redValue=0; //assegno alla variabile redValue il valore 0 analogWrite(BLUE, blueValue); //il led accenderà nel colore blue delay(delayTime); //ci sarà 1 secondo di pausa tra le due esecuzioni di stato digitalWrite(BLUE, LOW); //spengo il led del colore BLUE } |
La funzione void è un tipo di funzione molto utile, poiché permette di effettuare varie istruzioni (procedure) in base al numero di chiamate della funzione in questione effettuate. Il comportamento di tale funzione è abbastanza autoesplicativo se si osserva il programma.
Il secondo sketch utilizza delle funzioni di tipo float. Lo scopo del programma consiste nel calcolare il valore della tensione applicata in un determinato punto della breadboard. Una volta calcolata, tale valore sarà convertito nel valore corrispondente a 8 bit (0-255 anziché 0-1023).
Lo sketch è il seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
float converti_valore (float a); //dichiarazione della funzione int lettura = 0; //0 corrisponde al pin analogico A0, il quale permetterà di leggere i valori di tensione. void setup () { Serial.begin (9600); <span class="crayon-c">//Apro la comunicazione seriale</span> } void loop (){ float l; //dichiaro la variabile che sarà utilizzata per le letture della tensione l = analogRead (lettura); //leggo il valore della tensione. Tale valore sarà assegnato alla variabile l l = converti_valore (l); //chiamo la funzione converti_valore. tale funzione restituirà un valore, che sarà assegnato alla variabile l; Serial.print(l); //leggo sul monitor serial il valore l convertito delay (2000); //ci saranno 2 secondi di pausa tra una lettura e un'altra } //definizione della funzione float converti_valore (float a){ float p; //dichiaro la variabile p, utilizzata per convertire il valore della tensione p=a/4; // scala a 8 bit (valori da 0 a 255) return p; //la funzione converti_valore restituirà il valore della variabile p. Tale valore sarà assegnato alla variabile l, che ha chiamato la funzione. } |
Per quanto concerne il secondo sketch possiamo osservare la somiglianza tra la dichiarazione, chiamata e definizione della funzione. Vi è lo stesso numero di parametri utilizzati.
Cosa accade nel momento in cui si chiama una funzione?
Come riportato nell’articolo precedente, i parametri (o il parametro) utilizzati nel momento in cui si chiama una funzione prendono il nome di parametri attuali. Mentre i parametri utilizzati nel momento in cui si definisce una funzione prendono il nome di parametri formali.
Nel momento in cui si chiama una funzione nel void loop (o void setup) il valore del parametro attuale della funzione chiamata in questione sarà assegnato al parametro formale della funzione definita. In poche parole, per quanto riguarda questo sketch, il valore della variabile del parametro attuale “l” sarà assegnato al parametro formale “a” (della funzione definita).
Come si comporta l’istruzione return?
L’istruzione return possiede un certo argomento. Questo argomento è rappresentato da un numero o una variabile. Per quanto concerne il secondo sketch l’istruzione return ha come argomento la variabile “p”.
Il valore della variabile sarà assegnato alla variabile che ha chiamato la funzione (in questo il valore della variabile “p” sarà assegnato alla variabile “l”, che ha chiamato la funzione).
Link guida:
- Arduino IDE: cosa sono le funzioni #9
- Arduino IDE: comporre canzoni con un array #8.1
- Arduino IDE: che cos’è un array o vettore #8
- Arduino IDE: led RGB e cicli for, while e do while #7
- Arduino IDE: ciclo for e differenze con while e do while #6
- Arduino IDE: ciclo while e do while #5
- Arduino IDE: accendere led con un bottone (if) #4.1
- Arduino IDE: la struttura condizionale IF #4
- Arduino IDE: operatori aritmetici, relazione e logici #3
- Arduino IDE: variabili, costanti e macro #2
- Arduino IDE: in che maniera si crea un programma? #1
- Arduino IDE: che cos’è e come funziona #0
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
Seguici per non perdere le prossime novità!