Guide e TutorialIngegneria Informatica

Fondamenti di programmazione per Arduino

Dopo aver trattato dell’ IDE di Arduino nell’articolo precedente, andiamo oggi a parlare di programmazione.

Il linguaggio di programmazione Arduino è basato su linguaggio C e sul progetto Wiring. In questo articolo, illustreremo in breve i rudimenti di programmazione che ci saranno utili a creare il nostro primo progetto.

Innanzitutto, possiamo notare che ogni programma Arduino, come quelli degli esempi di default dell’IDE, è diviso in due blocchi di codice, quello racchiuso in void setup() e quello in void loop(). Queste due funzioni sono fondamentali e contengono le impostazioni e le istruzioni necessarie al corretto funzionamento di quanto richiesto dall’utente.

Simile a quanto avviene in C (e ad esempio in Java), in Arduino bisogna dichiarare il tipo di ritorno di una funzione (ovvero, la tipologia di dato che presenterà come risultato). Nel caso dei due blocchi sopracitati, mettiamo “void” ovvero “vuoto”, perché al termine della loro esecuzioni, non restituiranno nulla all’utente in sé, ma svolgeranno solo i compiti assegnati nel codice stesso.

La parte di codice contenuta nel ciclo setup(), contiene le impostazioni che vogliamo dare al nostro programma, mentre nella seconda parte loop(), verranno messe le righe di codice che faranno partire la vera e proprio esecuzione.

Blocco setup()

Questa funzione è la prima che parte quando carichiamo uno sketch. In questo blocco, il programmatore inserisce le variabili per inizializzarle, importa le librerie utili ed infine imposta lo stato dei pin (per più informazioni sui pin, consulta uno dei nostri precedenti articoli su Arduino!).

Blocco loop()

Finito di eseguire il setup(), il programma passa alla funzione loop(), che contiene le istruzioni base del programma, che come suggerito dal nome, dovranno essere ripetute ricorsivamente. Inoltre, in questo blocco avviene l’interazione “fisica” con la nostra scheda.

Sintassi

Come in ogni linguaggio di programmazione, la sintassi è fondamentale e va rispettata attentamente, quindi andiamo ora a vedere alcuni degli elementi principali.

Tipi di dati:

  • void: tipo di dato “vuoto”, che non restituisce nulla a schermo
  • boolean: dato che può essere solo o vero o falso
  • char: un solo carattere
  • byte: 8 bit
  • int: un numero intero senza cifre decimali, che può assumere anche valori negativi
  • unsigned int: un int che pul assumere solo valori positivi
  • long: un int che anziché occupare 2 byte di memoria come sempre, occupa 4 byte, in modo da poter rappresentare più cifre
  • float:  rappresenta un numero a virgola mobile
  • double: un float con precisione doppia
  • array[]: un insieme di valori raccolti insieme a quali si può accedere attraverso un indice
  • char string: in Arduino come in C, il tipo di dato stringe non esiste e viene invece rappresentato da un array di char string[]

Punto e virgola:

il punto e virgola ; è fondamentale ed una sua piccola dimenticanza può portare a molti errori di compilazione! Deve essere inserito alla fine di tutte le istruzione e per separare gli elementi, come ad esempio all’interno di un ciclo for.

Parantesi graffe:

Le parentesi graffe {} servono e definire l’inizio e ala fine di di un blocco di istruzioni. Ad ogni apertura deve per forza corrispondere una chiusura.

I commenti:

i commenti si inseriscono al fine di facilitare la comprensione del programma e non vengono presi in considerazione in compilazione ed esecuzione. Per scrivere una singola riga di commento, basta inserire i caratteri //commento all’inizio, invece per inserire un blocco di commenti, si deve racchiudere in questo modo /* …commento…*/.

Cicli:

Possiamo usare in cicli for/if/while/switch quando programmiamo, rispettando questa sintassi:

  • if (condizione){
         istruzione;
    }
  • for (condizione){
         istruzione;
    }
  • while(condizione){
         istruzione;
    }
  • switch(variabile){

    caso uno:
     istruzione;
     break;

    caso due:
     istruzione;
     break;

    default:
      istruzione;
    }

 

Operatori logici:

Ci sono tre operatori logici che possiamo utilizzare per confrontare due espressioni:

  • AND logico:

         if (…&&…) 

  • OR logico:

         if (…||….)

  • NOT logico:

Funzioni matematiche e trigonometriche:

Ovviamente è possibile utilizzare funzioni standard presenti nelle librerie come min(x,y,), max(x,y), abs(x), pow(base, esponente), sort(x), sin(rad), cos(rad), tan(rad), random() ecc.

Le costanti:

In Arduino abbiamo delle costanti particolari che sono INPUT, OUTPUT e  HIGH, LOW.

  • INPUT e OUTPUT servono ad impostare il comportamento di un pin, se dovrà leggere un determinato valore(input), oppure se dovrà fornire una certa quantità di corrente(output).
  • HIGH e LOW, invece, servono a definire il livello di un pin e possono essere utilizzati sia in input che in output (ad esempio, per impostare l’accensione di un led).

Funzioni I/O:

Le funzioni I/O si dividono in digitali ed analogiche.

Quelle digitali sono pinMode(…); digitalWrite(…); analogWrite(…); mentre quelle analogiche sono analogReference(type); analogRead(…);analogWrite(…);. Tutte queste funzioni sono utili a gestire i valori che andremo a leggere e a trasmettere tramite a dispositivi I/O, che vedremo nel dettaglio, più avanti.

 

Nei prossimi articoli vedremo degli esempi pratici per mettere alla prova le conoscenze finora acquisite!

Fonti:

Sara Qaddoumi
Studentessa di Ingegneria Informatica, da sempre appassionata di programmazione, astronomia e fantascienza.

    You may also like

    Leave a reply

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *