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!
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)
Comments (0)
You don't have permission to comment on this page.