JUEGO DE LUCES

Ruddy Viacha Mendoza

Ruddy Viacha Mendoza

Electrónica e informática

Objetivo

La idea es definir una variable llamada estado al principio para guardar la situación del LED. El loop comprueba si se ha pulsado el botón, y de ser así invierte su estado,  y después escribe el valor de estado en el LED. Si estaba encendido lo apaga. Si estaba apagado se enciende.

Aunque parece un plan perfecto, en la práctica no va a funcionar. En el tiempo que nosotros tardamos entre pulsar y liberar el botón, nuestro humilde Arduino es capaz de leer unos cuantos miles de veces el pulsador e invertir el valor del LED otras tantas.

Por eso, si lee un número par de veces dejara el LED como estaba y si lo lee un número impar de veces lo invertirá. En la práctica la situación del LED se torna aleatoria, y si pulsáis repetidamente el botón veréis que el resultado es impredecible.

Otra fuente de problemas es que en el mundo real un interruptor no cambia de un estado a otro de forma perfecta, sino que suele rebotar y causar varios conexiones y desconexiones muy rápidas antes de quedar en un valor estable. A esto se le llaman rebotes (bouncing) y al procedimiento para eliminar estos rebotes se le llama debouncing en la jerga electrónica.

El debouncing se puede hacer por hardware con un conjunto de resistencia y condensador, o por software, mucho más frecuentemente (por más barato) y para esto una solución es nuevamente frenar a Arduino y hacerle esperar un tiempo entre 50 y 250 mili-segundos una vez que detecta que se ha pulsado el botón, de modo que nos dé tiempo a liberar el pulsador:

Materiales

1
ARDUINO UNO R3
5
LEDS

Procedimiento

La idea es definir una variable llamada estado al principio para guardar la situación del LED. El loop comprueba si se ha pulsado el botón, y de ser así invierte su estado,  y después escribe el valor de estado en el LED. Si estaba encendido lo apaga. Si estaba apagado se enciende.

Aunque parece un plan perfecto, en la práctica no va a funcionar. En el tiempo que nosotros tardamos entre pulsar y liberar el botón, nuestro humilde Arduino es capaz de leer unos cuantos miles de veces el pulsador e invertir el valor del LED otras tantas.

Por eso, si lee un número par de veces dejara el LED como estaba y si lo lee un número impar de veces lo invertirá. En la práctica la situación del LED se torna aleatoria, y si pulsáis repetidamente el botón veréis que el resultado es impredecible.

Otra fuente de problemas es que en el mundo real un interruptor no cambia de un estado a otro de forma perfecta, sino que suele rebotar y causar varios conexiones y desconexiones muy rápidas antes de quedar en un valor estable. A esto se le llaman rebotes (bouncing) y al procedimiento para eliminar estos rebotes se le llama debouncing en la jerga electrónica.

El debouncing se puede hacer por hardware con un conjunto de resistencia y condensador, o por software, mucho más frecuentemente (por más barato) y para esto una solución es nuevamente frenar a Arduino y hacerle esperar un tiempo entre 50 y 250 mili-segundos una vez que detecta que se ha pulsado el botón, de modo que nos dé tiempo a liberar el pulsador:

Circuito

Programa

int LED = 10 ; int boton = 6 ;
     bool estado = true ;
     bool estado_anterior = true ;

     void setup()
          { 
               pinMode(boton, INPUT_PULLUP);        //Hemos eliminado R3 
               pinMode(LED, OUTPUT);
          }

     void loop()
          {
               estado = digitalRead(boton);
               if (estado != estado_anterior)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           digitalWrite(LED, !digitalRead(LED));
                     estado_anterior = estado ;     // Para recordar el ultimo valor
                  }
           }

5/5

Un comentario en “PROYECTOS

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

“La única posibilidad de descubrir los límites de lo posible es aventurarse un poco más allá de ellos, hacia lo imposible.”

© 2019 All Rights Reserved