Nei precedenti articoli della guida abbiamo visto programmi caratterizzati dalla soluzione di problemi semplici. Nel momento in cui il livello di complessità del problema aumenta, conviene suddividere il programma in sottoprogrammi.
Si tratta in sostanza di definire quali siano le parti fondamentali di cui si compone il programma e procedere poi al dettaglio in ogni singola parte. Il problema e il programma viene scomposto in moduli funzionalmente indipendenti.
Nel linguaggio di programmazione di Arduino IDE i sottoprogrammi sono rappresentati attraverso le funzioni.
Ogni funzione riceve in ingresso un insieme di argomenti detti parametri e restituisce un valore.
Le funzioni in Arduino IDE sono utilizzate per evitare di replicare porzioni di codice; infatti invocare un sottoprogramma vuol dire mandare in esecuzione la porzione di codice ad esso relativa. Una funzione può essere invocata più volte.
Prima di utilizzare una funzione occorre dichiararla come si fa per le variabili. A differenza della dichiarazione delle variabili non è sempre necessario dichiarare una funzione prima di poterla invocare. La dichiarazione ci permette di capire unicamente come invocarla, ma non è obbligatoria. Essa infatti specifica quali e quanti argomenti prende in input, oltre al tipo del valore di ritorno.
La sintassi è dunque questa:
1 |
<tipo_ritorno> nome_funzione ([<elenco_parametri>]) |
Il primo elemento della dichiarazione è il tipo del valore restituito. Esso è seguito dal nome della funzione e da una lista di zero o più parametri tra parentesi tonde, separati da virgole. Per ognuno di essi si indica il tipo ed il nome. La dichiarazione è terminata dal simbolo “;”. Il nome scelto per la funzione dovrebbe dare un’idea del tipo di operazione che essa espleta.
Ecco alcuni esempi:
- double cubo(float c);
- int max(int x, int y);
- int minimo(double x, double y);
- void calcola_area (float a, float b);
Una funzione può essere definita anche dopo il void loop. Le funzioni si definiscono in questo modo:
1 2 3 4 5 |
<tipo_ritorno> nome_funzione ([<elenco_parametri>]) { <istruzioni> return valore_restituito; } |
L’invocazione, ovvero la chiamata di funzione, è un’istruzione che permette l’esecuzione della funzione. Viene effettuata all’interno del main() o del loop(). Occorre specificare il nome della funzione seguita dall’eventuale elenco, tra parentesi tonde, dei valori da assegnare ai parametri della funzione. Anche se non vi sono parametri, le parentesi che seguono il nome della funzione sono obbligatorie:
1 |
nome_funzione (elenco_dei_valori_da_passare_ai_parametri); |
Al momento della chiamata il compilatore esegue il controllo di corrispondenza tra i parametri specificati nella definizione della funzione e i valori passati alla funzione.
I parametri sono detti anche argomenti: sono i dati che vengono “passati” alla funzione al momento della chiamata.
I parametri formali sono quelli definiti nell’intestazione. I parametri attuali sono quelli utilizzzati nella chiamata vera e propria e possono avere un nome diverso dai parametri formali. I due tipi di parametri devono corrispondere IN NUMERO (se la funzione prevede due parametri, bisogna passargliene due), IN TIPO (es se il primo è int e il secondo char, occorre passarglieli in questo modo) e IN ORDINE (es. se i parametri sono prima la base e poi l’esponente, occorre seguire il medesimo ordine)
Una funzione di tipo void è una funzione che non restituisce nessun valore. In tal caso l’istruzione return è omessa. La funzione void è anche definita procedura, in quanto non restituisce nessun valore ma esegue le istruzioni all’interno delle funzioni. Il nome procedura è mutuato da linguaggi di programmazione più anziani, come il Pascal.
Link guida:
- 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à!