Condizionali if else Arduino, operatori logici

Gli operatori condizionali if … else in Arduino IDE creano un comodo costrutto in un programma che dirama l’esecuzione del codice in base al valore di una variabile o in base ad alcuni dati ricevuti, ad esempio, da sensori e sensori collegati al microcontrollore Arduino. In questo articolo prenderemo in considerazione esempi di utilizzo del costrutto condizionale if else in Arduino, nonché degli operatori di confronto logico (== != < >).




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • LED e resistenza
  • sensore d’acqua
  • breadboard
  • cavi di collegamento

L’istruzione condizionale if nel linguaggio Arduino verifica la condizione e, se è vera, il blocco di istruzioni viene eseguito. Esistono due tipi di utilizzo dell’istruzione if in un programma: con le parentesi graffe e senza parentesi graffe. Senza parentesi graffe dopo l’istruzione condizionale if, verrà eseguito solo il primo comando. Si consiglia di utilizzare sempre le parentesi graffe, perché in questo caso è più difficile commettere errori nel programma.

Operatori condizionali if, if…else in Arduino IDE

Come usare il sensore di livello acqua con Arduino Uno
Come usare il sensore di livello acqua con Arduino Uno

Consideriamo l’uso dei blocchi di condizione sull’esempio del collegamento di un sensore dell’acqua e dei LED (si può usare qualsiasi sensore). Nel linguaggio di Arduino, il simbolo if viene utilizzato con gli operatori logici per verificare la veridicità delle condizioni. Le parentesi raggruppano logicamente più operatori di confronto in un unico blocco. Il programma seguente verifica se il valore della variabile water supera un determinato intervallo.

Programma Arduino con operatori condizionali if




#define LED 13
#define WTR A1

int water;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(WTR, INPUT);
  Serial.begin(9600);
}

void loop() {
  water = analogRead(WTR);
  Serial.println(water);
 
  if (water > 100) { digitalWrite(LED, HIGH); }
  if (water < 100) { digitalWrite(LED, LOW); }
 
  delay(1000);
}

Spiegazione del codice con operatori condizionali if Arduino:



  1. operatori condizionali if viene utilizzato con gli operatori di confronto per verificare la veridicità delle condizioni.

Nel primo programma, la variabile water viene confrontata con il valore 100 e se la variabile è maggiore di questo valore, il LED si accende. Il costrutto if … else di Arduino offre un maggiore controllo sul programma rispetto a una singola istruzione if. Permette di definire azioni non solo quando l’espressione è vera, ma anche quando il valore è falso. Scaricate un esempio di programma con istruzioni if … else nel linguaggio Arduino.

Programma Arduino con operatori condizionali else

#define LED 13
#define WTR A1

int water;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(WTR, INPUT);
  Serial.begin(9600);
}

void loop() {
  water = analogRead(WTR);
  Serial.println(water);
 
  if (water > 100) { digitalWrite(LED, HIGH); }
  else { digitalWrite(LED, LOW); }
 
  delay(1000);
}

Spiegazione del codice con operatori condizionali else Arduino:

  1. se non viene trovata un’espressione vera, verrà eseguito il blocco else finale (se presente nel programma).

Operatori logici, operatori di confronto Arduino

Non confondere il segno di uguale “=” con l’operatore di confronto di Arduino “==”. L’uso del segno di uguale nell’istruzione condizionale if può produrre un risultato diverso quando il programma viene eseguito. Ad esempio, il frammento di codice if (y = 100) non è uguale a if (y==100). Il segno di uguale è un operatore di assegnazione che imposta il valore della variabile y a 100 e non verifica se la variabile y è uguale al valore 100.

Operatori di confronto Arduino

x == y (x è uguale a y)
x != y (x non è uguale a y)
x < y (x è minore di y)
x > y (x è maggiore di y)
x <= y (x è minore o uguale a y)
x >= y (x è maggiore o uguale a y)

Operatori logici Arduino

! (not) logico NOT, negazione
&& (and) logico AND
|| (or) logico OR

Nell’esempio seguente, abbiamo combinato due condizioni in un unico blocco utilizzando l’operatore logico and (&&). Ora il LED si accenderà quando la variabile water sarà maggiore del valore 100 e minore del valore 200, mentre negli altri casi il LED sarà spento. Non c’è limite al numero di utilizzi degli operatori logici in un blocco. Caricate il seguente codice nel microcontrollore Arduino, il circuito con il sensore dell’acqua rimane lo stesso.

Programma Arduino con operatori logici e confronto

#define LED 13
#define WTR 10

int water;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(WTR, INPUT);
  Serial.begin(9600);
}

void loop() {
  water = analogRead(WTR);
  Serial.println(water);
 
  if (water > 100 and water < 200) { digitalWrite(LED, HIGH); }
  else { digitalWrite(LED, LOW); }
 
  delay(1000);
}

Spiegazione del codice con operatori logici e confronto Arduino:

  1. il valore della variabile water viene inviato alla porta seriale di Arduino IDE.

In un programma possono essere presenti diverse condizioni if, creando un’intera catena di controlli. I controlli vengono eseguiti uno dopo l’altro fino a quando non si incontra un’espressione vera. Se non viene trovata alcuna espressione vera, verrà eseguito l’ultimo blocco else (se presente nel programma). Il costrutto else if può essere privo del blocco else finale e viceversa. Il numero di rami else if in un programma è illimitato.

Programma Arduino con diverse condizioni if … else

#define LED 13
#define WTR A1

int water;

void setup() {
  pinMode(13, OUTPUT);
  pinMode(A1, INPUT);
  Serial.begin(9600);
}

void loop() {
  water = analogRead(WTR);
  Serial.println(water);
 
  if (water < 100 or water > 400) { digitalWrite(LED, LOW); }
  else if (water > 100 and water < 200) { digitalWrite(LED, HIGH); }
  else if (water > 200 and water < 300) { digitalWrite(LED, LOW); }
  else if (water > 300 and water < 400) { digitalWrite(LED, HIGH); }
 
  delay(1000);
}

Conclusione. L’ordine delle condizioni in un blocco gioca un ruolo importante quando si tratta di ottimizzare il codice e cercare di rendere un programma più veloce. L’idea è che le espressioni logiche vengano controllate da sinistra a destra e se il primo controllo rende l’espressione non valida, i controlli successivi si interrompono. In questo modo è possibile liberare il microcontrollore Arduino dall’esecuzione di controlli non necessari.

Rate this post


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.