control para un reloj cukoo

Dependencies:   mbed DebouncedIn Pulse1

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002 CONTROL DE RELOJ CUCU
00003 produce sonidos mp3 almacenados en un moduludo de audio YX5300
00004 usa un modulo FRDMKL25Z
00005 los sonidos se reproducen desde una tarjeta micro SD que los almacena y son 3:
00006 sonido de cucu
00007 sonido de apertura
00008 sonido de cierre
00009 los sonidos se reproducen enviando el comando respectivo en formato HEX
00010 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
00011 conformar un pulso Alto que dura lo que dure los campanazos del reloj son un poco mas de 10 segundos.
00012 para filtrar las campanazos intermedios que duran menos de diez segundos este programa detecta que la duracion del pulso
00013 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
00014 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
00015 */
00016 
00017 
00018 #include "mbed.h"
00019 #include "DebouncedIn.h"
00020 #include <Pulse1.h>
00021 int i=0,j=0,k=0;
00022 float T;
00023 Timer t;
00024 //...............salidas el sistema.....................
00025 DigitalOut led2(LED2);// motor casita
00026 DigitalOut m1(PTB8);// motor casita
00027 DigitalOut m2(PTB9);// motor casita
00028 DigitalOut m3(PTB10);// plunger pajaro
00029 DigitalOut m4(PTB11);// plunger pajaro
00030 //............entradas ........al sistema
00031 InterruptIn button(PTA13);
00032 Serial pc(USBTX, USBRX);
00033 Serial bird(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z
00034 
00035 //comandos del modulo YX5300 PARA HACER SONAR EL CUCU y otras cosas
00036 const char cucu1[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x01, 0xEF};//   CUCU
00037 const char openP[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x02, 0xEF};//   ABRIR PUERTA
00038 const char closeP[8]={0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x03, 0xEF};//  CERRAR PUERTA
00039 const char slep[8]={0x7E, 0xFF, 0x06, 0x0A, 0x00, 0x00, 0x00, 0xEF};//    modo sleep
00040 const char awake[8]={0x7E, 0xFF, 0x06, 0x0B, 0x00, 0x00, 0x00, 0xEF};//   despertar el modulo
00041 void up() {   //detecta flanco de subida del cucu en el parlanmte
00042     t.start();  //flanco de subida dispara la cuen ta del cronometro.
00043     
00044 }
00045 void dw() {   //detecta flanco de bajada en el reloj y para lee y borra el cronometro.......
00046     t.stop();
00047     T=t.read();
00048     t.reset();
00049 }
00050 
00051 //...entrar en modo sleep para ahorar bateria........................
00052 //.....................SLEEP.........................................
00053 void slp(){
00054     for(i=0;i<8;i++){
00055     bird.printf("%c",slep[i]);    
00056                     }
00057           }
00058        
00059 //.....................AWAKE.........despierta el modulo...............
00060 void awak(){
00061     for(i=0;i<8;i++){
00062     bird.printf("%c", awake[i]);    
00063                     }
00064            } 
00065       
00066 //.....................CLOSE.......sonido..............................
00067 void closed(){
00068     for(i=0;i<8;i++){
00069     bird.printf("%c", closeP[i]);    
00070                     }
00071              } 
00072 //.....................OPEN........sonido..............................
00073 void open(){
00074     for(i=0;i<8;i++){
00075     bird.printf("%c", openP[i]);    
00076                     }
00077            } 
00078 
00079 //.....................SONIDOS DEL CUCU SEGUN LA HORA...............
00080 // esta funcion produce el sonido del cucu segun la hora se encarga de accionar todos los mecanismos del cucu
00081 // como la puerta y el pajaro, h es el valor de la hora de 1-12
00082 void cucu(int h){
00083 //.....................abrir la puerta..............................
00084     awak();
00085     wait(1);
00086     m1=1;
00087     m2=0;
00088     open();//sonido abrir sonido de puerta chirriando..
00089     wait(1);
00090       
00091 //.................................................................. 
00092     m1=0;
00093     m2=0;
00094 //....termina apertura de puerta    
00095      for(j=0;j<k;j++){//
00096 //.....................acciona plunger pico.........................
00097      m3=1;
00098      m4=0;
00099      for(i=0;i<8;i++){
00100      bird.printf("%c", cucu1[i]);
00101                      }
00102          
00103      wait(1);                          
00104 //...............se desenergiza el plunger pico.....................
00105      m3=0;
00106      m4=0;
00107                     }
00108 //..............se sierra la puerta..termino de sonar el cucu.......
00109     m1=0;
00110     m2=1;
00111     closed();//...sonido de purta cerrada...........................
00112     wait(1);
00113     m1=0;
00114     m2=0;  //desenergiza puerta para ahorrar bateria................
00115     slp();
00116     wait(1);
00117     
00118        }                 
00119 
00120 int main( ){
00121     led2=0;
00122     wait(1);
00123     led2=1;
00124     m1=0;
00125     m2=0;
00126     m3=0;
00127     m4=0;
00128     button.rise(&up);  // enlaza la señal del reloj con una interupcion para el flanco de subida
00129     button.fall(&dw);  // enlaza la señal del reloj con una interupcion para el flanco de caida
00130     while(1) {           
00131              if(T>10){
00132              ++k;
00133              if(k>12){
00134                        k=1;
00135                       }
00136              cucu(k);
00137              pc.printf("T=%f,",T);
00138              pc.printf("k=%d,",k);
00139             
00140              T=0;
00141                                        
00142               
00143                      }    
00144                       
00145              }
00146 }         
00147 
00148