Vous êtes sur la page 1sur 3

4- Detección de Cambio de Estado de un 

Pulsador 

Cuando se tiene un pulsador trabajando, a menudo se requiere algún tipo de acción


basado en las veces que se ha pulsado. Para ello, necesitas saber cuando el estado del botón
cambia de apagado (off) a encendido (on), y contar cuántas veces se produce este cambio de
estado. Esto se llama detección de cambio de estado.

Conecte tres cables a la placa Arduino. El primero va de una patilla del pulsador a
través de una resistencia pull-down (en este caso 10 KOhms) a tierra. El segundo va desde la
patilla del mismo lado del botón a la fuente de 5 voltios. El tercero se conecta al pin digital de
E/S (I/O) (en este caso el pin 2), que lee el estado del botón.

Cuando el pulsador está abierto (sin pulsar) no hay conexión entre los dos extremos del
pulsador, de modo que el pin está co olnectado a tierra (a través de la resistencia pull-down) y
leemos un LOW (bajo ó 0). Cuando el botón se cierra (pulsado), se establece una conexión
entre sus dos extremos, conectando el pin al voltaje, para que podamos leer un HIGH (alto ó 1).
(El pin sigue conectado a tierra, pero la resistencia limita el flujo de corriente, por lo que la
resistencia hacia +5V es menor)

Si desconectas el pin de E/S del todo, el LED puede parpadear de forma errática. Esto
se debe a que la entrada es "flotante", es decir, no está conectada ni a positivo ni a masa. Será
más o menos aleatorio devolviendo HIGH o LOW. Esta es la causa por la que se usa la
resistencia pull-down en el circuito.
El siguiente programa (sketch) lee constantemente el estado del botón. En cada lectura
compara el estado del botón con el estado la anterior vez que fue leído en el bucle principal. Si
el estado actual del botón es diferente del último estado leído y el estado actual es HIGH (alto o
1), entonces cambia de apagado (off) a encendido (on). Despues el programa incrementa un
contador de pulsaciones del botón.

El programa comprueba también el valor del contador de pulsaciones de botón, y si es


múltiplo de cuatro, pone el LED del pin 13 a ON (encendido). De lo contrario, lo apaga.

/*
Detección de cambios del Estado

A menudo, no es necesario conocer el estado de una entrada digital todo el tiempo, pero si saber
cuando la entrada cambia de un estado a otro.
Por ejemplo, saber cuando un pulsador pasa de OFF a ON. Esto se llama detección de cambio de
estado.
Este programa muestra cómo detectar cuando el pulsador cambia de OFF a ON y viceversa.

El circuito:
* Pulsador conectado al pin 2 de 5 V
* Resistencia de 10K conectada al pin 2 del suelo
* LED fijada desde el pin 13 a tierra (o utilizar el built-in LED
la mayoría de las placas Arduino)

*/

// this constant won't change:


const int buttonPin = 2; // the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to

// Variables will change:


int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button

void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}

void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state


if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;

// turns on the LED every four button pushes by


// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}

Vous aimerez peut-être aussi