ARDUINO: Pulsador como Interruptor



La siguiente práctica consta de que al momento de presionar  un pulsador este prenderá un led hasta que se vuelva a presionar, convirtiendo este pulsador a un interruptor con programación, esto no solo nos servirá con pulsadores sino con muchos otros componentes.

 
 

Materiales:

  • 1x Arduino

  • 1x LED

  • 1x Resistor de 220Ω

  • 1x Pulsador de 4 o 2 pines

  • 1x Resistor de 10KΩ

  • 1x Protoboard

  • Jumpers

Esquema de montaje

El esquema de montaje es combinando los esquemas de "lectura de un pulsador" y "mi primer programa". 

Clic en la imagen para ampliar.

Código

Creamos tres variables del tipo int, una para almacenar la lectura del pulsador que es push_lee, estadoLed para almacenar el estado que entrará en el if para que prenda o apague el led, incluso cualquier otro actuador.

La variable estadoAnterior almacenará el estado anterior del pulsador, estas tres variables se igualan a cero para tener un valor por defecto, ya en el setup() se configuran los pines como entrada y salida respectivamente, ahora viene lo más interesante que es nuestro programa de ejecución que sirve para usar un pulsador como un switch.

Primero almacenamos en push_lee la lectura que se le hace al pulsador, ahora escribiremos un if en el cual tendremos dos condiciones unidas por un AND o sea un &&, la primera condición nos dice que al estado de push_lee debe ser uno y se hace la comparación además de que este estado debe ser verdadero y esto se cumple cuando presionamos el pulsador, la segunda condición dice que el estado anterior debe ser cero y esto es verdad ya que al principio nosotros le dimos un valor de cero, después tiene una operación muy interesante la cual es estadoLed = 1 – estadoLed.

Después dentro del if viene un delay(), es un pequeño tiempo llamado antirrebote y es el tiempo en que tardamos presionando el pulsador, al terminar este if se le asigna a la variable estadoAnterior el valor de push_lee.

Ahora bien, explicaremos la operación estadoLed = 1 – estadoLed, como el pulsador están en modo pull-downn al presionar nosotros el pulsador el valor de la variable push_lee cambia a uno, después entra al if donde las dos condiciones se evalúan y se encuentran verdaderas ya que se cumple la primera al presionar el pulsador y la segunda se cumple pues le dimos el valor de cero, por consiguiente entra al if donde tenemos la operación estadoLed = 1 – estadoLed.

Como la variable estadoLed tiene valor cero porque así lo hemos puesto al principio entonces tenemos que estadoLed = 1 – 0, eso nos da el valor de uno en estadoLed, y ahora en la variable estadoAnterior fuera del if tiene un valor cero ya que el valor de uno lo toma únicamente cuando presionamos el pulsador y cuando se suelta toma el valor de cero nuevamente, después de esto entra el segundo if, como el estadoLed vale uno y no se ha cambiado este valor permanece en ese if y prende el led hasta que se vuelva a presiona el pulsador cambiará de estado porque ahora se tendrá:  estadoLed = 1 – 1, que es cero y entra en el else ya que no se cumple la primera condición y se apaga el led, y así es como se hace para que un pulsador funcione como switch, como ya se mencionó esto no sirve solo para pulsadores, sino para muchas más aplicaciones.

#define LED 2
#define push 3

int push_lee = 0;
int estadoLed = 0;
int estadoAnterior = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(push, INPUT);
}

void loop() {
  push_lee = digitalRead(push);
  if ((push_lee == 1) && (estadoAnterior == 0)) {
    estadoLed = 1 - estadoLed;
    delay(10);
  }
  estadoAnterior = push_lee;
  
  if (estadoLed == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}