control para un reloj cukoo

Dependencies:   mbed DebouncedIn Pulse1

Revision:
0:ed0fa031f04b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 06 06:12:59 2019 +0000
@@ -0,0 +1,148 @@
+/*
+CONTROL DE RELOJ CUCU
+produce sonidos mp3 almacenados en un moduludo de audio YX5300
+usa un modulo FRDMKL25Z
+los sonidos se reproducen desde una tarjeta micro SD que los almacena y son 3:
+sonido de cucu
+sonido de apertura
+sonido de cierre
+los sonidos se reproducen enviando el comando respectivo en formato HEX
+se tomo la señal de audio de sonido de un reloj con pendulo EDMINISTER y se le filtro la componente de alta frecuencia para
+conformar un pulso Alto que dura lo que dure los campanazos del reloj son un poco mas de 10 segundos.
+para filtrar las campanazos intermedios que duran menos de diez segundos este programa detecta que la duracion del pulso
+que marca la hora dedel CUCU y verifica que dura mas de 10 segundos procede a hacer sonar el cucu con todo su acionamiento respectivo
+el conteo se hace de 1 a 12, se puede incorporar una señal proveniente de una foto resistencia para que el cucu no suene en la oscuridad
+*/
+
+
+#include "mbed.h"
+#include "DebouncedIn.h"
+#include <Pulse1.h>
+int i=0,j=0,k=0;
+float T;
+Timer t;
+//...............salidas el sistema.....................
+DigitalOut led2(LED2);// motor casita
+DigitalOut m1(PTB8);// motor casita
+DigitalOut m2(PTB9);// motor casita
+DigitalOut m3(PTB10);// plunger pajaro
+DigitalOut m4(PTB11);// plunger pajaro
+//............entradas ........al sistema
+InterruptIn button(PTA13);
+Serial pc(USBTX, USBRX);
+Serial bird(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z
+
+//comandos del modulo YX5300 PARA HACER SONAR EL CUCU y otras cosas
+const char cucu1[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x01, 0xEF};//   CUCU
+const char openP[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x02, 0xEF};//   ABRIR PUERTA
+const char closeP[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x03, 0xEF};//  CERRAR PUERTA
+const char slep[8]={0x7E, 0xFF, 0x06, 0x0A, 0x00, 0x00, 0x00, 0xEF};//    modo sleep
+const char awake[8]={0x7E, 0xFF, 0x06, 0x0B, 0x00, 0x00, 0x00, 0xEF};//   despertar el modulo
+void up() {   //detecta flanco de subida del cucu en el parlanmte
+    t.start();  //flanco de subida dispara la cuen ta del cronometro.
+    
+}
+void dw() {   //detecta flanco de bajada en el reloj y para lee y borra el cronometro.......
+    t.stop();
+    T=t.read();
+    t.reset();
+}
+
+//...entrar en modo sleep para ahorar bateria........................
+//.....................SLEEP.........................................
+void slp(){
+    for(i=0;i<8;i++){
+    bird.printf("%c",slep[i]);    
+                    }
+          }
+       
+//.....................AWAKE.........despierta el modulo...............
+void awak(){
+    for(i=0;i<8;i++){
+    bird.printf("%c", awake[i]);    
+                    }
+           } 
+      
+//.....................CLOSE.......sonido..............................
+void closed(){
+    for(i=0;i<8;i++){
+    bird.printf("%c", closeP[i]);    
+                    }
+             } 
+//.....................OPEN........sonido..............................
+void open(){
+    for(i=0;i<8;i++){
+    bird.printf("%c", openP[i]);    
+                    }
+           } 
+
+//.....................SONIDOS DEL CUCU SEGUN LA HORA...............
+// esta funcion produce el sonido del cucu segun la hora se encarga de accionar todos los mecanismos del cucu
+// como la puerta y el pajaro, h es el valor de la hora de 1-12
+void cucu(int h){
+//.....................abrir la puerta..............................
+    awak();
+    wait(1);
+    m1=1;
+    m2=0;
+    open();//sonido abrir sonido de puerta chirriando..
+    wait(1);
+      
+//.................................................................. 
+    m1=0;
+    m2=0;
+//....termina apertura de puerta    
+     for(j=0;j<k;j++){//
+//.....................acciona plunger pico.........................
+     m3=1;
+     m4=0;
+     for(i=0;i<8;i++){
+     bird.printf("%c", cucu1[i]);
+                     }
+         
+     wait(1);                          
+//...............se desenergiza el plunger pico.....................
+     m3=0;
+     m4=0;
+                    }
+//..............se sierra la puerta..termino de sonar el cucu.......
+    m1=0;
+    m2=1;
+    closed();//...sonido de purta cerrada...........................
+    wait(1);
+    m1=0;
+    m2=0;  //desenergiza puerta para ahorrar bateria................
+    slp();
+    wait(1);
+    
+       }                 
+
+int main( ){
+    led2=0;
+    wait(1);
+    led2=1;
+    m1=0;
+    m2=0;
+    m3=0;
+    m4=0;
+    button.rise(&up);  // enlaza la señal del reloj con una interupcion para el flanco de subida
+    button.fall(&dw);  // enlaza la señal del reloj con una interupcion para el flanco de caida
+    while(1) {           
+             if(T>10){
+             ++k;
+             if(k>12){
+                       k=1;
+                      }
+             cucu(k);
+             pc.printf("T=%f,",T);
+             pc.printf("k=%d,",k);
+            
+             T=0;
+                                       
+              
+                     }    
+                      
+             }
+}         
+
+