control para un reloj cukoo

Dependencies:   mbed DebouncedIn Pulse1

main.cpp

Committer:
tony63
Date:
2019-05-06
Revision:
0:ed0fa031f04b

File content as of revision 0:ed0fa031f04b:

/*
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;
                                       
              
                     }    
                      
             }
}