Risolto Arduino: pulsante come interruttore

Stato
Discussione chiusa ad ulteriori risposte.

Davide27

Utente Bronze
4 Marzo 2022
38
17
1
20
Ultima modifica da un moderatore:
Ciao a tutti! Stavo cercando di far funzionare un pulsante come interruttore su Arduino ma non riuscendoci ho cercato su internet e ho trovato questo codice:
C:
#define led 10                              
#define pulsante 7                          
int stato=LOW;                              

void setup(){
  pinMode(led,OUTPUT);                      
  pinMode(pulsante,INPUT);                  
}

void loop(){
  int statoPulsante = digitalRead(pulsante);  
  if(statoPulsante == HIGH){                
    stato = !stato;                        
    delay(200);                            
  }
  if(stato == HIGH){                      
    digitalWrite(led,HIGH);                
  }else{                                    
    digitalWrite(led,LOW);                
  }
}
Per caso qualcuno riesce a spiegarmelo? Non ho capito perchè viene messo stato = !stato e poi l'if che viene subito dopo [if(stato == HIGH){...}]
Grazie a tutti!
 

DispatchCode

Moderatore
24 Maggio 2016
413
10
287
189
Immagino che digitalRead restituisca 0 o 1, in base allo stato.
HIGHT è uguale a 1 e LOW a 0. Quel codice mi sembra contenere quell'if inutilmente.

Il suo scopo è quello di modificare la variabile stato solo quando lo stato del bottone è HIGHT. Il !stato sta a significare un'inversione, ovvero se vale 1 diventa 0 e se vale 0 diventa 1 (viene valutato come valore booleano).

L'if mi sembra inutile perché il valore che contiene è già HIGHT o LOW, quindi penso sia equivalente a:

C:
digitalWrite(led, stato);
 

Davide27

Utente Bronze
4 Marzo 2022
38
17
1
20
Immagino che digitalRead restituisca 0 o 1, in base allo stato.
HIGHT è uguale a 1 e LOW a 0. Quel codice mi sembra contenere quell'if inutilmente.

Il suo scopo è quello di modificare la variabile stato solo quando lo stato del bottone è HIGHT. Il !stato sta a significare un'inversione, ovvero se vale 1 diventa 0 e se vale 0 diventa 1 (viene valutato come valore booleano).

L'if mi sembra inutile perché il valore che contiene è già HIGHT o LOW, quindi penso sia equivalente a:

C:
digitalWrite(led, stato);
grazie mille!
 
Stato
Discussione chiusa ad ulteriori risposte.