La funzione "if" non mi FUNZIONA!!!!!

Ciao a tutti sono all’inizio ma mi sono entrato in un vortice e non riesco ad uscire.
sto lavorando su un mio piccolo progetto giusto per capire come procede il mio apprendimento ma mi sono impantanato quando usando la funzione “if” ho scoperto che non mi funziona.

Ho semplificato l’esempio e quello che trovo sulla porta seriale con una print in allegato.

ma dove s sbaglio

Mille Grazie per l’aiuto
patverg

[int x = 10;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
;
}

void loop() {
  // put your main code here, to run repeatedly:
if (x>120); {Serial.println("NO");}
if (x<120); {Serial.println("SI");}
Serial.print("Valore x: ");
Serial.println(x);


delay(10000);
}]

Non devi mettere il ; dopo la condizione tra tonde.
Viene interpretata come istruzione vuota, cioè che c’è ma non deve fare nulla.
Quindi scrivere

if (x>120); {Serial.println("NO");}
if (x<120); {Serial.println("SI");}

è un po’ come scrivere:

if (x>120) {
}
Serial.println("NO");
if (x<120) {
}
Serial.println("SI");

Quindi immagino stampi sia NO che SI

Grazie per la risposta ma mi sa che non mi sono spiegato in quanto trovo stampato sia il NO che il SI ponendo la x=10 mi aspetto che debba stampare SI in quanto viene soddisfatta la la condizione :

if (x<120); {
}
Serial.println(“SI”);

Grazie ancora
patverg

Mi pare che nel post di maubarzi ci siano ben evidenti sia la spiegazione sia la soluzione (proprio nella primissima riga della risposta). Qual è il dubbio specifico?

Guarda meglio come si struttura una istruzione condizionale qui

e guarda anche questo qui

stai attento all'uso del punto e virgola

Federico

In sintesi, questo,come hai scritto tu, non ha senso (ma viene accettato dal compilatore):
if (x>120); {Serial.println(“NO”);}
if (x<120); {Serial.println(“SI”);}

questo si è corretto come logica:
if (x>120) {Serial.println(“NO”);}
if (x<120) {Serial.println(“SI”);}

inoltre fai attenzione, se x==120 allora non stampa nulla

Quel piccolo e semplice ‘;’ … conclude l’istruzione, nel tuo caso la IF, e quindi … finita la IF esegue l’istruzione successiva.

Nell’esempio di Nid qui sopra:

if (x>120); {Serial.println("NO");}
if (x<120); {Serial.println("SI");}
  1. viene eseguito il primo IF che … NON fa nulla (né se è verso né se è falso)
  2. viene eseguito il blocco racchiuso tra {} e quindi la Serial.print(“NO”)
  3. viene eseguito il secondo IF che … ancora NON fa nulla (né se è verso né se è falso)
  4. viene eseguito il blocco racchiuso tra {} e quindi l’altra Serial.print(“SI”)

Semplice no?

Guglielmo

Grazie per i suggerimenti che mi hanno fatto capire l’importanza del “;” e di pensare che se il compilatore non segnala errore vuol dire è corretto e quindi esegue ciò che ho pensato.

Ho riscritto e funziona
Grazie ancora a tutti
patverg

[int x = 130;

void setup() {
  // Attiva la porta seriale
Serial.begin(9600);

}
void loop() {
 //Questa condizione è Falsa e quindi non deve stampare
if (x < 120){
Serial.println("-------------");
Serial.println("NO");
}
//Questa condizione è Vera e quindi deve stampare
if (x  == 130) {
Serial.println("SI'");
}
Serial.println("-------------");
Serial.print("Valore x: ");
Serial.println(x);


delay(10000);
}]

@patverg, occhio che il compilatore C accetta anche questo: if (x = 130) { // un solo = invece di due == Ovvero vorresti fare un confronto per uguale, ma per errore metti un solo uguale. Quella è una assegnazione, lecita in C anche dentro il test dell'if (e c'e' una valida ragione ma non mettiamo troppa carne al fuoco)

Punti e virgola, graffe e == sono gli errori tipici per chi inizia