pugliasos newlogoDEF

Orario della segreteria: tutti i martedì, dalle ore 17 alle 19, su appuntamento.

   In questo esempio accenderemo e spegneremo un LED mediante un pulsante esterno al circuito del LED, che per questioni di praticità potrà essere inserito direttamente sulle porte GND e 13 di Arduino.

   Per prendere confidenza con diversi modi di risolvere lo stesso problema, vengono presentate più soluzioni leggermente diverse fra loro.

Comandare un LED con un pulsante esterno html 154b7c2f5820a7f7

 

 

 

 

 

 

 

Componenti

  •  1 LED
  •  1 pulsante 1
  •  3 cavetti MM
  •  1 resistenza da 10 kΩ

 

 

 

 

 

 

 

 

 

 


 

Esempio presente nell’IDE in 02.Digital/Botton

 

Comandare un LED con un pulsante esterno html 55a9cef09ca70f08 

 

const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
buttonState = digitalRead(buttonPin);

if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}

else {
digitalWrite(ledPin, LOW);
}
}

   A riposo, i due lati dell’interruttore non sono collegati tra loro, e si dice che il pulsante è normalmente aperto. In tale esempio il LED rimane acceso finché è premuto il pulsante, poi si spegne; negli esempi che seguono il pulsante si comporta da commutatore.



Prima proposta (con due variabili char)

 

   Memorizzeremo lo stato del LED e del pulsante, rispettivamente nelle variabile statoLED e statoPulsante ambedue di tipo char inizializzate con il valore “false” ossia 0.

int led = 13;
int pulsante = 2;
char statoLED = 0;
char statoPulsante = 0;

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

void loop() {
  statoPulsante = digitalRead(pulsante);
  if (statoPulsante == HIGH) {
    if (statoLED == 0) {
      digitalWrite(led, 1);
      statoLED = 1;
    }
    else {
      digitalWrite(led, 0);
      statoLED = 0;
    }
  }
delay(250);
}



Seconda proposta (con una sola variabile char)

 

int led=13;
int pulsante=2;
char statoLED=false;

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

void loop(){
  if(digitalRead(pulsante)==HIGH){
    statoLED=!statoLED;
    digitalWrite(led,statoLED);
  }
delay(250);
}

 


Terza proposta

 

int led = 13;
int pulsante = 2;

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

void loop() {
if (digitalRead(pulsante)) {
digitalWrite(led, !digitalRead(pulsante));
}
delay(250);
}


 

Nota

   Per come sono costruiti i pulsanti presentano il cosiddetto effetto rimbalzo, ovvero non appena premuti, nei primi millisecondi, generano rumore che potrebbe dare false letture.

Per alcuni il modo per superare questo problema può essere quello di ripetere la lettura dell’input a distanza di qualche millisecondo e verificare se sono uguali

...

void loop(){
  val1 = digitalRead(pinPulsante); // legge il valore
  delay(10); // aspetta 10 millisecondi
  val2 = digitalRead(pinPulsante); // rilegge il valore
  if (val1 == val2) { // se i due valori sono uguali...
etc. etc.

  Per altri basterebbe introdurre una pausa opportuna, ad esempio 100-300 ms, fra una lettura dello stato dell’interruttore e la successiva.

 


 http://mbortolotti.blogspot.com/2012/01/led-e-pulsante-digital-inputcontinua.html?m=1

 https://www.arduino.cc/reference/en/language/functions/math/constrain/

Save
Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
Read more
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Accept
Decline