Cosa significa la funzioni define Arduino

La direttiva #define di Arduino IDE consente di assegnare nomi ai valori (costanti) che rendono il programma più comprensibile. In altre parole, è possibile definire il nome di una costante o di un frammento di codice una volta all’inizio del programma, per poi utilizzare solo questo nome nel codice del programma. Vediamo alcuni esempi con la descrizione dei modi corretti di utilizzare la funzione #define nel linguaggio di programmazione Arduino IDE.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • LED RGB e resistenza
  • breadboard
  • cavi di collegamento

Come si usa #define di Arduino IDE?

Le costanti definite con la direttiva #define non occupano spazio in memoria, poiché l’IDE Arduino sostituisce i valori al posto dei nomi durante la compilazione dello sketch. Il funzionamento della direttiva può essere paragonato all’operazione Find and Replace di un editor di testo. Durante la compilazione di un programma, Arduino IDE trova un pezzo di codice nel programma ‘cosa cambiare’ e lo sostituisce con un pezzo di codice ‘cosa cambiare’.

Sintassi della funzione #define Arduino IDE

#define 'cosa cambiare' 'cosa cambiare'

Quando si usa la direttiva define, si deve evitare di usare il nome di un’altra variabile, costante o comando di Arduino, altrimenti verrà sostituito durante la compilazione. Si noti inoltre che la riga non contiene un punto e virgola e un segno di uguale, come avviene quando si dichiara una variabile, altrimenti il compilatore genererà un errore. Consideriamo l’uso di funzione define sull’esempio di un programma con una descrizione dettagliata.

Collegamento del LED RGB alla scheda Arduino
Collegamento del LED RGB alla scheda Arduino

Ecco una parte del codice di esempio con un LED tricolore lampeggiante. Nell’esempio abbiamo assegnato dei nomi ai pin digitali 11, 12 e 13 del microcontrollore. Nel programma, è più pratico usare i nomi piuttosto che i numeri, in modo da non dover ricordare ogni volta quale colore è collegato a quale pin. L’IDE Arduino sostituirà automaticamente i nomi RED, GRN, BLU con i valori corrispondenti durante la compilazione.

Programma Arduino con la funzione #define




#define RED 11
#define GRN 12
#define BLU 13
 
void setup() {
   pinMode(RED, OUTPUT);
   pinMode(GRN, OUTPUT);
   pinMode(BLU, OUTPUT);
}

void loop() {
   digitalWrite(RED, HIGH);
   delay(1000);
   digitalWrite(RED, LOW);
   delay(1000);

   digitalWrite(GRN, HIGH);
   delay(1000);
   digitalWrite(GRN, LOW);
   delay(1000);

   digitalWrite(BLU, HIGH);
   delay(1000);
   digitalWrite(BLU, LOW);
   delay(1000);
}

Spiegazione del codice per utilizzare funzione #define significato



  1. è possibile utilizzare un modulo con LED RGB;
  2. nell’istruzione #define, non si possono usare nomi che corrispondono a variabili o funzioni, ad esempio delay.

Sintassi della funzione #ifdef, #ifndef e #endif

#ifdef A PROPOS DE
   Serial.println ("Message");
#endif

L’istruzione #ifdef Arduino IDE controlla se questa definizione è stata incontrata in precedenza nel programma; se lo è stata, viene inserito un blocco di codice dalla riga successiva a #endif. Nell’esempio viene controllato se il segno di debug è stato definito in precedenza in #define; in caso affermativo, il codice (che invia il messaggio al monitor seriale di Arduino IDE) viene eseguito, mentre se il segno non è definito, il messaggio non viene inviato.

#ifndef RED
   #define RED 11
#endif

Le istruzioni #ifndef controllano se questa definizione è già stata incontrata nel programma e, in caso contrario, viene inserito un blocco di codice dalla riga successiva a #endif. Nel semplice esempio che segue, stiamo dichiarando una nuova costante, a meno che non l’abbiamo già dichiarata nello sketch. Se una costante con questo nome è già stata utilizzata, il programma ignorerà le righe all’interno del costrutto #ifndef … #endif.

Sostituzione di funzioni con #define Arduino

Oltre a utilizzare l’istruzione #define in un programma per dichiarare le costanti, è possibile sostituire interi frammenti di codice utilizzando la direttiva #define. Si tratta di una variante più complessa ma interessante dell’uso di define, che ci permette di creare diverse istruzioni semplificative nello sketch. Ad esempio, possiamo sostituire la funzione pinMode() del primo esempio con un LED lampeggiante con un costrutto #define con i parametri indicati.

Programma Arduino con sostituzione di funzioni

#define out(pin) pinMode(pin, OUTPUT)
#define on(pin, del) digitalWrite(pin, HIGH); delay(del)
#define off(pin, del) digitalWrite(pin, LOW); delay(del)
 
void setup() {
   out(11);
   out(12);
   out(13);
}

void loop() {
   on(11, 1000);
   off(11, 1000);
   on(12, 1000);
   off(12, 1000);
   on(13, 1000);
   off(13, 1000);
}

Spiegazione del codice per sostituzione di funzioni con #define

  1. si noti che on(11, 1000); e le altre righe non sono funzioni, il costrutto sostituisce semplicemente il testo richiesto nel programma.

Conclusione. A volte l’uso della funzione #define per creare costanti in un programma Arduino def non è pratico; in questo caso si usa la parola chiave const. A differenza delle variabili globali, il valore di const deve essere definito immediatamente quando si dichiara una costante. L’uso di l’istruzione #define o const in un programma non comporta alcun vantaggio in termini di risparmio di spazio di memoria nel microcontrollore Arduino.

5/5 - (1 vote)


Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.