| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Practica5_Pulsador_ como_ interruptor

Page history last edited by cmartinez 5 years, 8 months ago

Utilización de un pulsador como un interruptor para activar/desactivar el parpadeo de los LEDs (conexión pull-down)

 

 

 

Componentes necesarios:

 

  • 4 diodos lumionosos LED
  • 4 resistencias de 220
  • 1 pulsador n.a.
  • 1 resistencia de 1k 

 

 

Novedades del código para esta práctica:

  • Uso de una variable para reflejar el estado de una entrada digital.
  • Uso del condicional if sobre el valor de una variable.
  • Cómo simular un interruptor con un pulsador normalmente abierto.
  • Cómo usar delay para evitar repeticiones en la lectura de una entrada digital.

 

En este ejercicio vamos a simular un interruptor que inicialmente está abierto, así que las pulsaciones impares lo cierran y las pares lo abren.

 

Para ello tenemos que llevar de algún modo la cuenta de las pulsaciones y hay muchas maneras de hacerlo, aunque teniendo dos estados (abierto y cerrado, que corresponden a par e impar) resulta interesante usar una variable y hacerla tomar dos valores.

En este ejemplo los dos valores son 1 y -1 y cambiamos de uno a otro cada vez que se detecta el pulsador presionado multiplicando por -1:

c=c*-1

 

Para entender esto, hay que interpretar que en el lado izquierdo tenemos el nuevo valor, actualizado, de la variable, mientras en el derecho, la c representa el valor anterior. Podemos leerlo como:

la variable c toma a partir de ahora un valor que es el resultado de multiplicar el que tenía por -1.

 

La estructura del condicional se ejecuta así:

  • Si se cumple la condición entre paréntesis, es decir si la variable tiene el valor indicado, se ejecuta el código entre llaves.
  • Si no, no se ejecuta el código entre llaves y se continúa ejecutando el resto.

Fíjarse cómo la condición de igualdad en el condicional se expresa con dos signos de = seguidos ==.

Al estar en bucle, el código se repite muy rápidamente y debemos ralentizarlo para dar tiempo a soltar el pulsador y que puedan considerarse pulsaciones independientes.

Si no pusiéramos el delay, en el tiempo en que presionamos el pulsador ocurrirían numerosos ciclos en los que c iría tomando los valores 1 y -1 alternativamente, con lo que su valor al soltar sería más asunto del azar que otra cosa.

 

Variaciones:

  • Cambiar el valor del delay y observar cómo cambia la sensibilidad y fiabilidad del interruptor. 

 

CÓDIGO FUENTE DEL PROGRAMA

 

 int cadenaLeds[]={6,7,8,9};

 int puls=5;

 int tiempo=500;

 int n=0;

 int c=1;                             //Declaración de la variable en la que guardamos el estado inicial del pulsador

 void setup (){

   pinMode(puls,INPUT); 

   for(n=0;n<4;n++){

     pinMode(cadenaLeds[n],OUTPUT);

   }

 }

 void flash(){

   for(n=0;n<4;n++){

     digitalWrite(cadenaLeds[n],HIGH);

   }

   delay(tiempo);

   for(n=0;n<4;n++){

     digitalWrite(cadenaLeds[n],LOW);

   }

   delay(tiempo);

 }

 void loop(){

   if(digitalRead(puls)==HIGH){

     delay(500);                      //Tiempo para levantar el dedo del pulsador y que no lea dos pulsaciones

     c=c*-1;                          //Actualización de la variable cuando cambia el estado

   }

   if(c==-1){                         //Detecta si se ha pulsado un nº impar de veces (está cerrado)

     flash();

   }

 }

 

 

Comments (0)

You don't have permission to comment on this page.