Montaje 6: Reloj de cocina
Requisitos:
- 4 LEDs, 4 resistencias de 220 ohmios
- Un pulsador, una resistencia de 1Kohmio.
- Un potenciómetro (ej.:100K)
- Un zumbador.
Planteamiento: ¿Te olvidaste de retirar esos huevos cocidos?¿Se han pegado las lentejas?. Necesitas un reloj que te avise.
Al girar el potenciómetro se van encendiendo los LEDs y seleccionando intervalos de 5, 10, 15 y 20 segundos (que representarán los minutos en el caso real). Al presionar el pulsador los LEDs se van apagando según pasan los grupos de 5 segundos y, al terminarse el tiempo, suena una alarma sonora.
El único procedimiento nuevo respecto al ejercicio anterior, sensor de ángulo?, es el que produce los pitidos de la alarma, con una iteración simple.
El programa tiene que distinguir cuándo empieza a descontar el tiempo, y lo hace actualizando el valor de una variable, p, al presionar el pulsador.
Si no se ha pulsado, hace lo mismo que en [GuíaProfesores/U2E19 | sensor de ángulo]], y, cuando sí se ha pulsado, deja de leer la señal de entrada y sólo ejecuta la función muestra(m) con un argumento que decrece de uno en uno una vez que han pasado los 5 segundos.
En cada ciclo comprueba si el tiempo ha terminado, y si es así entra en un bucle cerrado con while en el que suena la alarma.
Variantes:
- Cambia los tiempos.
- Haz que los LEDs parpadeen en lugar de quedarse encendidos.
- Cambia la alarma de pitidos por otra con tonos.
VIDEO DEL MONTAJE 6
CODIGO FUENTE
Copyright (C) 2006 Juan Carlos Alonso de Mena
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation;
See the GNU General Public License for more details?
int cadenaLeds[]={6,7,8,9};
int puls=5;
int zumb=10;
int pot=0; //nº de la entrada analógica a la que va conectado
int n=0; //el potenciómetro
int m=0;
int c=0;
int p=0;
int medida=0; //variable que guarda la lectura de la señal en la entrada
int tiempo=200;
void setup(){
for(n=0;n<4;n++){
pinMode(cadenaLeds[n],OUTPUT);
}
pinMode(puls,INPUT);
pinMode(zumb,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 lectura(){ //procedimiento que acota en 4 tramos la señal de la entrada
medida=analogRead(pot);
if(medida<1024/4){
m=1;
}
if((medida>=1024/4)&&(medida<1024/2)){
m=2;
}
if((medida>=1024/2)&&(medida<1024*3/4)){
m=3;
}
if(medida>=1024*3/4){
m=4;
}
}
muestra(int m){ //procedimiento que enciende y apaga los LEDs
for(n=0;n<m;n++){ //correspondientes a cada tramo
digitalWrite(cadenaLeds[n],HIGH);
}
for(c=4;c>m;c--){
digitalWrite(cadenaLeds[n],LOW);
}
}
void alarma(){ //alarma sonora, en grupos de 3 pitidos
for(n=0;n<3;n++){
digitalWrite(zumb,HIGH);
delay(200);
digitalWrite(zumb,LOW);
delay(200);
}
}
void loop(){
if(p==0){ //si no se ha pulsado el pulsador
lectura();
muestra(m);
}
if(digitalRead(puls)==HIGH){ //al pulsar:
delay(500);
flash();
p=p+1; //queda recogida la pulsación en la variable
}
if(p>0){ //si se ha pulsado
muestra(m); //se encienden y apagan los LEDs correspondeientes
delay(5000); //pasan 5 segundos
m=m-1; //cambiamos al tramo inferior
}
while(m==0){ //Al acabarse el tiempo se repite la alarma sonora
digitalWrite(cadenaLeds[0],LOW);
alarma();
}
}
Volver?
Copyright (c) 2006 Juan Carlos Alonso de Mena
Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.2 or any later version published by the
Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts. A copy of the license is included in the section entitled
GNU Free Documentation License?.