Direttive.
#include - direttiva che consente di includere file aggiuntivi con codice nel progetto. Leggi di più qui.
#include <Servo.h> // include la libreria Servo.h
#include "Servo.h" // include la libreria Servo.h
Qual è la differenza tra <> e ""? Quando specifichiamo il nome "tra virgolette", il compilatore cerca prima il file nella cartella dello schizzo, quindi nella cartella delle librerie. Quando si utilizza <segni di spunta>, il compilatore cerca il file solo nella cartella della libreria.
#define - Una direttiva che indica al preprocessore di sostituire il nome specificato con il valore specificato. Il modo più comune per dichiarare le costanti:
#define MOTOR_PIN 10 // motore pin 10
#define LED_PIN 3 // LED pin 3
Dopo la compilazione, tutte le parole MOTOR_PIN nel testo del programma saranno sostituite dal numero 10 e LED_PIN - dal numero 3. Questo metodo di memorizzazione delle costanti non utilizza la RAM del microcontrollore. Anche #define ti permette di fare il cosiddetto macro funzioni. Ad esempio, la funzione Arduino sq (quadrato) è una macro che, una volta compilata, si trasforma in una moltiplicazione:
#define LED_PIN 3 // LED pin 3
Dopo la compilazione, tutte le parole MOTOR_PIN nel testo del programma saranno sostituite dal numero 10 e LED_PIN - dal numero 3. Questo metodo di memorizzazione delle costanti non utilizza la RAM del microcontrollore. Anche #define ti permette di fare il cosiddetto macro funzioni. Ad esempio, la funzione Arduino sq (quadrato) è una macro che, una volta compilata, si trasforma in una moltiplicazione:
#define sq(x) ((x)*(x))
#if, #elif, #else, #endif - direttive al preprocessore che consentono di includere o escludere sezioni di codice per condizione:
#define TEST 1 // definisce TEST come 1
#define TEST 1 // definisce TEST come 1
#if (TEST == 1) // se TEST 1
#define VALUE 10 // definisce VALUE come 10
#elif (TEST == 0) // TEST 0
#define VALUE 20 // definisce VALUE come 20
#else // in caso contrario
#define VALORE 30 // definisce VALORE come 30
#endif // fine della condizione
Con l'aiuto della compilazione condizionale, è molto conveniente assemblare e configurare progetti complessi con un sacco di impostazioni e librerie collegate "per condizione". Per esempio:
#define DEBUG 1
#define DEBUG 1
void setup()
{
#if (DEBUG == 1)
Serial.begin(9600);
Serial.println("Hello!");
#endif
}
Se il parametro DEBUG è impostato su 1, la libreria Serial sarà collegata, se 0 allora no. Pertanto, otteniamo un progetto ottimizzato universale con il debug.
Se il parametro DEBUG è impostato su 1, la libreria Serial sarà collegata, se 0 allora no. Pertanto, otteniamo un progetto ottimizzato universale con il debug.
#ifdef, #ifndef - direttive condizionali al preprocessore, consentono di includere o escludere sezioni di codice per condizione: ifdef - è definito? ifndef - non è definito?
#define TEST // definisce TEST
#ifdef TEST // se TEST è definito
#define VALUE 10 // definisce VALUE come 10
#else // se commento. #definisci TEST
#define VALUE 20 // definisce VALUE come 20
#endif // fine della condizione
