Hola a todos. Estoy creando un reloj, o bien un segundero. Y estoy haciendo que sólo un botón será el que controle todo. Es decir: con este mismo botón inicia a contar. Una vez iniciado, si lo presiono nuevamente, pausa el segundero(No lo detiene) y quiero implementar que cuando lo deje presionado durante más de 3 segundos se reinicie o bien se detenga y este regrese a 0. Ya intenté con PulseIn, pero realmente no lo logré
Les dejo el código para que se den una referencia de lo que hice.
#include <Servo.h>
Servo ServoReloj;
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
long TiempoAhora=0;
long time2=0;
int pinBoton = 12;
int EstadoBoton = 0;
int periodo = 1000;
int Min = 0;
int Seg = 0;
boolean encendido = false;
int PosServo;
int duracion;
int tiempo;
void setup()
{
Serial.begin(9600);
ServoReloj.attach(11);
pinMode(a, OUTPUT); // Establece las salidas digitales.
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop()
{
TiempoAhora = millis();
EstadoBoton = digitalRead(pinBoton);
if (EstadoBoton == HIGH)
{ //Si el boton1 esta pulsado
if (encendido == true) { //Comprueba si el reloj esta
encendido=false; //lo prende
Serial.println("Pausar");
}
else{
encendido= true;
Serial.println("Renaudar");
}
delay(500);
}
if (encendido == true) { //Comrprueba el estado del reloj
PosServo= PosServo + 3;
ServoReloj.write(PosServo);
if(PosServo>179){
PosServo=0;
}
Seg = Seg + 1; //Suma un segundo
if (Seg > 59) {
Seg = 0;
Min = Min + 1;
}
time2 = millis(); //comprueba el tiempo al final del loop
time2=time2 - TiempoAhora; //calcula la diferencia
if (time2 >=100 ){
time2=50;
}
periodo=900-time2; //hace la rectificacion con delay
delay(periodo);
printtime(); //Imrpime el tiempo en el LCD
printdisplay(Min);
}
}
void printtime(){
Serial.print(Min);
Serial.print(":");
Serial.println(Seg);
}
void printdisplay(int minutos)
{
switch(minutos)
{
case 0: display (1,1,1,1,1,1,0); break;
case 1: display (0,1,1,0,0,0,0); break;
case 2: display (1,1,0,1,1,0,1); break;
case 3: display (1,1,1,1,0,0,1); break;
case 4: display (0,1,1,0,0,1,1); break;
case 5: display (1,0,1,1,0,1,1); break;
case 6: display (1,0,1,1,1,1,1); break;
case 7: display (1,1,1,0,0,0,0); break;
case 8: display (1,1,1,1,1,1,1); break;
case 9: display (1,1,1,1,0,1,1); break;
default: display (1,1,1,1,1,1,0); break;
}
}
void display (int a, int b, int c, int d, int e, int f, int g)
{
digitalWrite (2,a);
digitalWrite (3,b);
digitalWrite (4,c);
digitalWrite (5,d);
digitalWrite (6,e);
digitalWrite (7,f);
digitalWrite (8,g);
}