Hotboards MX
/
Buzzer
program that sound the imperial march
Revision 0:21479e8cb575, committed 2016-04-21
- Comitter:
- Hotboards
- Date:
- Thu Apr 21 19:27:56 2016 +0000
- Commit message:
- first release
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 21479e8cb575 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Apr 21 19:27:56 2016 +0000 @@ -0,0 +1,123 @@ +#include "mbed.h" + +// Definimos los tonos de frecuencia en Hertz +#define c 261 +#define d 294 +#define e 329 +#define f 349 +#define g 391 +#define gS 415 +#define a 440 +#define aS 455 +#define b 466 +#define cH 523 +#define cSH 554 +#define dH 587 +#define dSH 622 +#define eH 659 +#define fH 698 +#define fSH 740 +#define gH 784 +#define gSH 830 +#define aH 880 + +// Definimos una matriz con el orden en que se reproducen los tonos +int imperialMarch[] = { a, a, a, f, cH, + a, f, cH, a, + eH, eH, eH, fH, cH, + gS, f, cH, a, + aH, a, a, aH, gSH, gH, + fSH, fH, fSH, + + aS, dSH, dH, cSH, + cH, b, cH, + + f, gS, f, a, + cH, a, cH, eH, + aH, a, a, aH, gSH, gH, + fSH, fH, fSH, + + aS, dSH, dH, cSH, + cH, b, cH, + + f, gS, f, cH, + a, f, c, a}; + +// Definimos otra matriz con la duración de los tonos +int tones[] = { 500, 500, 500, 350, 150, + 500, 350, 150, 1000, + 500, 500, 500, 350, 150, + 500, 350, 150, 1000, + 500, 350, 150, 500, 250, 250, + 125, 125, 250, + + 250, 500, 250, 250, + 125, 125, 250, + + 125, 500, 375, 125, + 500, 375, 125, 1000, + 500, 350, 150, 500, 250, 250, + 125, 125, 250, + + 250, 500, 250, 250, + 125, 125, 250, + + 250, 500, 375, 125, + 500, 375, 125, 1000}; + +// Definimos el número total de tonos que empleamos +int tones_num = 66; + +// Establecemos una salida PWM( PB_3 ) para el buzzer, y una digital para el LED +// de la Núcleo( PA_5 ) como indicador de que se está reproduciendo un tono +PwmOut Buzzer(PWM_OUT); +DigitalOut Led1(LED1); + +// Definimos una función prototipo +void Play_tunes(PwmOut name, int notes, int tones); + +// ----- FUNCIÓN PRINCIPAL DEL PROGRAMA ----- +int main(void) +{ + // Declaramos una variable i para el siguiente ciclo FOR + int i; + + // Con este ciclo FOR recorremos cada uno de los tonos y sus duraciones + for(i=0; i<tones_num; i++) + { + // Mandamos a llamar a la función Play_tunes dandole los valores del + // pin del buzzer, el valor i de la matriz de notas y de los tonos + Play_tunes(Buzzer, imperialMarch[i], tones[i]); + // Aquí separamos las estrofas de nuestra melodía + if( i == 27 || i == 34 || i == 51 || i == 58 ) + { + // ... estas estrofas se separan 250ms una de la otra + wait_ms(250); + } + } +} + +// Esta es la función Play_tunes que mandamos a llamar dandole algunos +// valores anteriormente +void Play_tunes(PwmOut name, int notes, int tones) +{ + // Declaramos una variable tipo flotante + float period; + // Calculamos el periodo de la nota en turno a reproducir + period = 1000000/notes; + // Activamos el led de la Núcleo para indicar que estamos reproduciendo + // una nota + Led1 = 1; + // Establecemos el periodo calculado a la salida PWM + name.period_us(period); + // Establecemos un ciclo de trabajo del %50 + name.write(0.50f); + // Esperamos el tiempo establecido por el tono i + wait_ms(tones); + // Desactivamos el led de la Núcleo para indicar el fin de la nota + Led1 = 0; + // Terminamos la nota + name.period_us(0); + // Esperamos un poco para diferenciar entre una nota y otra + wait_ms(20); +}
diff -r 000000000000 -r 21479e8cb575 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Apr 21 19:27:56 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/082adc85693f \ No newline at end of file