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