hola alguien me puede decir si este código el buzzer solo suena al final del ciclo o si suena cada segundo, si no es asi como podía hacerlo.
gracias.
gracias.
code: [select]
[code//temporizador ehrja 26/02/2015
//originalmente de una duda en el ciclo do, de un codigo escrito por flecho.
//http://forum.arduino.cc/index.php?topic=300828.0
#include <liquidcrystal.h> //libreria del display lcd
#include <wire.h>
liquidcrystal lcd(7,8,9,10,11,12); //inicializamos la libreria con el numero de los pines utilizar
byte horas, minutos, segundos;
byte pinbuz = 13;
byte pinsta = a0;
byte pinhor = a1;
byte pinmin = a2;
byte pinseg = a3;
boolean sss; //start stop state
byte seguro;
unsigned long lastmillis;
void setup() {
pinmode(pinbuz, output); //pin salida visual y/o sonora
pinmode(pinsta, input_pullup); //pin boton start
pinmode(pinhor, input_pullup); //pin boton horas
pinmode(pinmin, input_pullup); //pin boton minutos
pinmode(pinseg, input_pullup); //pin boton segundos
startlcd();
//inicializamos las variables del tiempo, ese sera el valor inicial.
horas = 1;
minutos = 15;
segundos = 00;
}
void loop() {
do {//<------inicia do
manage_sss(); //función que activa y libera el ciclo y el ciclo while
//--------rutina escoger el tiempo en pantalla.
lcd.home(); //regresa el cursor la posición (0,0)
lcd.print("elige el tiempo");
printtime(); // imprime el tiempo en la segunda linea de la pantalla
//--------rutina botones de tiempo.
if (digitalread(pinhor) == low)
{ delay(200); //retraso para evitar falso conteo
horas++;
if (horas > 99) horas = 0; //horas máximas permitidas 99
}
if (digitalread(pinmin) == low)
{ delay(200); //retraso para evitar falso conteo
minutos++;
if (minutos > 60) minutos = 0; //minutos máximos permitidos 60
}
if (digitalread(pinseg) == low)
{ delay(200); //retraso para evitar falso conteo
segundos++;
if (segundos > 60) segundos = 0; //segundos máximos permitidos 60
}
}
while (!sss); //sss = false
while (sss) //<----inicia whie // sss = true
{ manage_sss();//<----función que activa y libera el ciclo y el ciclo while
lcd.home();
lcd.print("tiempo restante");
// printtime(); // imprime el tiempo en la segunda linea de la pantalla
//a partir de aquÍ inicia el calculo del tiempo restante, cada 1000 ms
if (millis() - lastmillis >= 1000)
{
lastmillis = millis();// junto con la comprobación, posibilita ejecutarse una vez cada segundo.
if (segundos > 0 ) segundos--; //decremento un segundo cada vez
if (segundos == 0 && minutos > 0) //si segundos = 0 y hay minutos
{
minutos--; //decremento un minuto cada vez
segundos = 59; //decremento un segundo del minuto restado
}
if (minutos == 0 && horas > 0) //si minutos = 0 y hay horas
{
horas--; //decremento una hora
minutos = 59; //decremento un minuto la hora restada.
}
} //termina el calculo del tiempo restante
//empieza la rutina "tiempo finalizado"
if (horas == 0 && minutos == 0 && segundos == 0) //<---- ¿no hay tiempo?.
{
lcd.clear();
lcd.setcursor(5, 0);
lcd.print("tiempo");
lcd.setcursor(3, 1);
lcd.print("finalizado");
digitalwrite(pinbuz, high);
delay(200);
digitalwrite(pinbuz, low);
delay(200);
}else printtime(); // imprime el tiempo en la segunda linea de la pantalla
}
}
void manage_sss() { //función que cambia el estado de sss, y evita atascos
//se ejecuta en ambos ciclos, para poder salir de ambos.
if (digitalread(pinsta) == low && seguro == 0) //si el pinsta esta en low y seguro = 0
{lcd.clear(); //agrego un clear porque cuando termina el tiempo queda f00:00:00o
sss = !sss; //el valor de sss = cambia su contrario
seguro++; //seguro cambia de cero 1 y con esto evitamos un falso cambio
} //cuando el pinsta continua en low,es decir solo pasara una vez.
if (digitalread(pinsta) == high) seguro = 0;
//cuando pinsta sea liberado cambiara su estado high y seguro = 0
//con esto posibilitamos que la condición anterior se pueda ejecutar nuevamente
// y por una vez cuando sea presionado nuevamente (pinsta = low)
//no necesita delay pues el seguro entra inmediato
}
void printtime() {
// función simple que imprime el tiempo en la segunda linea
// con esto evitamos repetir código en el ciclo y en el ciclo while
lcd.setcursor(4, 1);
if (horas < 10)lcd.print("0");
lcd.print(horas);
lcd.print(":");
if (minutos < 10)lcd.print("0");
lcd.print(minutos);
lcd.print(":");
if (segundos < 10)lcd.print("0");
lcd.print(segundos);
}
void startlcd() {
// + + + + + + + + + + + + + + + + + + + + + //
// ---- rutina de inicio splash screen ---- //
// + + + + + + + + + + + + + + + + + + + + + //
lcd.begin(16, 2);
byte customchar1[8] = {
b00000,
b00100,
b01110,
b11111,
b01110,
b00100,
b00000,
b00000
};
byte customchar2[8] = {
b00000,
b00100,
b01010,
b10101,
b01010,
b00100,
b00000,
b00000
};
lcd.createchar(0, customchar1);
lcd.createchar(1, customchar2);
// --- inicia rutina --- //
lcd.setcursor(0, 0);
lcd.print("activacion");
lcd.setcursor(0, 1);
lcd.write(byte(0));
lcd.setcursor(1, 1);
lcd.print("--------------");
lcd.setcursor(15, 1);
lcd.write(byte(1));
delay(2500);
lcd.clear();
lcd.setcursor(0, 0);
lcd.print("temporizador con");
lcd.setcursor(1, 1);
lcd.print("arduino + lcd");
delay(2500);
lcd.clear();
}]
Arduino Forum > International > Español > Proyectos (Moderators: surbyte, Hector_A) > Buzzer off
arduino
Comments
Post a Comment