Reloj

Dependencies:   mbed

Revision:
1:987fe977d122
Parent:
0:4182cf86e3bd
--- a/main.cpp	Thu Dec 09 22:07:15 2021 +0000
+++ b/main.cpp	Thu Dec 09 23:12:37 2021 +0000
@@ -4,71 +4,147 @@
 #define botonNoPulsado 1
 #define tiempoMaximo 0.5
 
+int horas=0;
+int minutos=0;
+int segundos=0;
 
 Serial pc(USBTX, USBRX); // tx, rx
 
 DigitalOut led(LED1);
 DigitalIn boton(USER_BUTTON);
 Timer temporizador;
-enum estados {esperandoPulsacion,esperandoSoltarBoton, esperandoSegundaPulsacion,esperandoSoltarSegundaPulsacion};
+Timer tiempoPulsado;
+
+enum estados {normal,esperandoSoltarConf,esperandoPulsarHoras,esperandoSoltarHoras,esperandoPulsarMin,esperandoSoltarMin};
 estados estado;
 
-
-void funcionEsperandoPulsacion()
+void intrementarReloj()
 {
-    if(boton==botonPulsado) {
+    if(temporizador>1.0) {
         temporizador.reset();
-        temporizador.start();
-        estado=esperandoSoltarBoton;
-        pc.printf("Boton pulsado\n");
+        segundos++;
+        if (segundos==60) {
+            segundos=0;
+            minutos++;
+            if(minutos==60) {
+                minutos=0;
+                horas++;
+                if(horas==24) {
+                    horas=0;
+                }
+            }
+        }
+    }
+    pc.printf("%02d:%02d:%02d\n",horas,minutos,segundos);
+}
+
+void funcionNormal()
+{
+    if(temporizador>1.0) {
+        intrementarReloj();
+    } else if(boton==botonPulsado) {
+        tiempoPulsado.reset();
+        tiempoPulsado.start();
+        estado=esperandoSoltarConf;
     }
 }
 
-void funcionEsperandoSoltarBoton()
+
+
+void funcionEsperandoSoltarConf()
 {
-    if(boton==botonNoPulsado) {
-        estado=esperandoSegundaPulsacion;
-        pc.printf("Boton soltado\n");
+    if(temporizador>1.0) {
+        intrementarReloj();
+    } else if (boton==botonNoPulsado) {
+        if(tiempoPulsado>1) {
+            estado=esperandoPulsarMin;
+            pc.printf("Configurar Minutos\n");
+        } else {
+            estado=normal;
+        }
+    }
+
+}
+
+
+void funcionEsperandoPulsarMin()
+{
+    if (boton==botonPulsado) {
+        tiempoPulsado.reset();
+        tiempoPulsado.start();
+        estado=esperandoSoltarMin;
     }
 }
 
-void funcionEsperandoSegundaPulsacion()
+void funcionEsperandoSoltarMin()
 {
-    if(temporizador.read()>tiempoMaximo) {
-        estado=esperandoPulsacion;
-        pc.printf("Emporizador expirado\n");
-    } else if(boton==botonPulsado) {
-        led=!led;
-        estado=esperandoSoltarSegundaPulsacion;
-        pc.printf("Doble Click\n");
+    if (boton==botonNoPulsado) {
+        if(tiempoPulsado>1) {
+            estado=esperandoPulsarHoras;
+            pc.printf("Configurar Horas\n");
+        } else {
+            minutos++;
+            if (minutos==60) {
+                minutos=0;
+            }
+
+            pc.printf("%02d:%02d:%02d\n",horas,minutos,segundos);
+            estado=esperandoPulsarMin;
+        }
     }
 }
 
-void funcionEsperandoSoltarSegundaPulsacion()
+void funcionEsperandoPulsarHoras()
 {
-    if(boton==botonNoPulsado) {
-        estado=esperandoPulsacion;
-        pc.printf("Boton soltado Segunda pulsacion\n");
+    if (boton==botonPulsado) {
+        tiempoPulsado.reset();
+        tiempoPulsado.start();
+        estado=esperandoSoltarHoras;
     }
 }
 
+void funcionEsperandoSoltarHoras()
+{
+    if (boton==botonNoPulsado) {
+        if(tiempoPulsado>1) {
+            estado=normal;
+        } else {
+            horas++;
+            if (horas==24) {
+                horas=0;
+            }
+
+            pc.printf("%02d:%02d:%02d\n",horas,minutos,segundos);
+            estado=esperandoPulsarHoras;
+        }
+    }
+}
+
+
 int main()
 {
     pc.baud(115200);
-    estado=esperandoPulsacion;
+    estado=normal;
+    temporizador.start();
     while(1) {
         switch(estado) {
-            case esperandoPulsacion:
-                funcionEsperandoPulsacion();
+            case normal:
+                funcionNormal();
                 break;
-            case esperandoSoltarBoton:
-                funcionEsperandoSoltarBoton();
+            case esperandoSoltarConf:
+                funcionEsperandoSoltarConf();
+                break;
+            case esperandoPulsarHoras:
+                funcionEsperandoPulsarHoras();
                 break;
-            case esperandoSegundaPulsacion:
-                funcionEsperandoSegundaPulsacion();
+            case esperandoSoltarHoras:
+                funcionEsperandoSoltarHoras();
                 break;
-            case esperandoSoltarSegundaPulsacion:
-                funcionEsperandoSoltarSegundaPulsacion();
+            case esperandoPulsarMin:
+                funcionEsperandoPulsarMin();
+                break;
+            case esperandoSoltarMin:
+                funcionEsperandoSoltarMin();
                 break;
         }
     }