Semplice riga di codice che non capisco

boolean isPressed2 = (digitalRead(D2) == LOW);

Come si potrebbe “espandere” per rendere piu chiara ad un neofita?
Grazie

boolean isPressed2 = (digitalRead(D2) == LOW);

equivale a:

bool isPressed2=0;
if(digitalRead(D2)==LOW) isPressed2=1;

o, più formalmente:

bool isPressed2=0;
if(digitalRead(D2) == LOW) {isPressed2=1;}

Il neofita sei tu?
Non credo, hai anni di esperienza.
Di al neofita che quella riga è anche troppo lunga, e gli spieghi cosa fa e perché si potrebbe (dovrebbe accorciare), con queste parole o altre simili:

Quella riga dice di prendere '0', confrontarlo con lo stato del piedino chiamato D2, assegnare il risultato a una variabile boolean creata sul momento
Come vedi se leggi da destra invece che da sinistra è più chiaro, più facile da capire
La ragione per la quale è utile accorciata è che un test su 'zero' equivale a una negazione, tanto vale usare direttamente la negazione "!"

Se usi queste parole vedrai che il neofita capisce, anche magari ricorda di "leggere" le espressioni a partire da destra

Standardoil:
Se usi queste parole vedrai che il neofita capisce, anche magari ricorda di "leggere" le espressioni a partire da destra

Scusami, ma la spiegazione di Datman è più chiara della tua che sicuramente è parimenti corretta ed esaustiva.

Grazie comunque a tutti e due, ci stavo girando attorno da mezz'ora e come alle volte capita ci si incaglia su delle stupidaggini...

Proprio a voler fare i pignoli, bool nasce espressamente come “boolean” e quindi sarebbe meglio utilizzare SOLO i valori “true” e “false” che vengono definiti nelle varie implementazioni dei “boolean” (e che, NON è detto, siano ovunque 1 e 0 come su Arduino). :slight_smile:

Per cui sarebbe meglio scrivere:

bool isPressed2 = false;
if(digitalRead(D2) == LOW) isPressed2 = true;

Guglielmo

True e false
Uh, è vero! :slight_smile:

@ Guglielmo
Ok, vero quello che dici, è formalmente più corretto. Io ho solo riportato quello che avevo trovato in un codice in rete senza soffermarmi su questo aspetto visto che in origine il codice girava senza problemi.

Aggiungo che a voler espandere ancora un po si potrebbe scrivere anche così, vero?

boolean isPressed2;
void setup() {
...
}
if(digitalRead(D2)== FALSE){
   isPressed2 = TRUE; 
}else{
  isPressed2 = FALSE;
}

Per quanto riguarda l'else, in effetti mi sa che ci va anche quello.

Sai che per il digitalRead() va bene invece HIGH e LOW? :slight_smile: ... sono proprio definiti così a livello del "core" di Arduino e quindi, SOLO a fini di leggibilità, conviene usare la forma: "if(digitalRead(D2) == LOW) { ..." :slight_smile:

Guglielmo

... ho ripulito il thread da post ... non propriamente tecnici sui quali vi prego invece di restare. Grazie :slight_smile:

Guglielmo