Hotboards MX
/
Buzzer
program that sound the imperial march
main.cpp@0:21479e8cb575, 2016-04-21 (annotated)
- Committer:
- Hotboards
- Date:
- Thu Apr 21 19:27:56 2016 +0000
- Revision:
- 0:21479e8cb575
first release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Hotboards | 0:21479e8cb575 | 1 | #include "mbed.h" |
Hotboards | 0:21479e8cb575 | 2 | |
Hotboards | 0:21479e8cb575 | 3 | // Definimos los tonos de frecuencia en Hertz |
Hotboards | 0:21479e8cb575 | 4 | #define c 261 |
Hotboards | 0:21479e8cb575 | 5 | #define d 294 |
Hotboards | 0:21479e8cb575 | 6 | #define e 329 |
Hotboards | 0:21479e8cb575 | 7 | #define f 349 |
Hotboards | 0:21479e8cb575 | 8 | #define g 391 |
Hotboards | 0:21479e8cb575 | 9 | #define gS 415 |
Hotboards | 0:21479e8cb575 | 10 | #define a 440 |
Hotboards | 0:21479e8cb575 | 11 | #define aS 455 |
Hotboards | 0:21479e8cb575 | 12 | #define b 466 |
Hotboards | 0:21479e8cb575 | 13 | #define cH 523 |
Hotboards | 0:21479e8cb575 | 14 | #define cSH 554 |
Hotboards | 0:21479e8cb575 | 15 | #define dH 587 |
Hotboards | 0:21479e8cb575 | 16 | #define dSH 622 |
Hotboards | 0:21479e8cb575 | 17 | #define eH 659 |
Hotboards | 0:21479e8cb575 | 18 | #define fH 698 |
Hotboards | 0:21479e8cb575 | 19 | #define fSH 740 |
Hotboards | 0:21479e8cb575 | 20 | #define gH 784 |
Hotboards | 0:21479e8cb575 | 21 | #define gSH 830 |
Hotboards | 0:21479e8cb575 | 22 | #define aH 880 |
Hotboards | 0:21479e8cb575 | 23 | |
Hotboards | 0:21479e8cb575 | 24 | // Definimos una matriz con el orden en que se reproducen los tonos |
Hotboards | 0:21479e8cb575 | 25 | int imperialMarch[] = { a, a, a, f, cH, |
Hotboards | 0:21479e8cb575 | 26 | a, f, cH, a, |
Hotboards | 0:21479e8cb575 | 27 | eH, eH, eH, fH, cH, |
Hotboards | 0:21479e8cb575 | 28 | gS, f, cH, a, |
Hotboards | 0:21479e8cb575 | 29 | aH, a, a, aH, gSH, gH, |
Hotboards | 0:21479e8cb575 | 30 | fSH, fH, fSH, |
Hotboards | 0:21479e8cb575 | 31 | |
Hotboards | 0:21479e8cb575 | 32 | aS, dSH, dH, cSH, |
Hotboards | 0:21479e8cb575 | 33 | cH, b, cH, |
Hotboards | 0:21479e8cb575 | 34 | |
Hotboards | 0:21479e8cb575 | 35 | f, gS, f, a, |
Hotboards | 0:21479e8cb575 | 36 | cH, a, cH, eH, |
Hotboards | 0:21479e8cb575 | 37 | aH, a, a, aH, gSH, gH, |
Hotboards | 0:21479e8cb575 | 38 | fSH, fH, fSH, |
Hotboards | 0:21479e8cb575 | 39 | |
Hotboards | 0:21479e8cb575 | 40 | aS, dSH, dH, cSH, |
Hotboards | 0:21479e8cb575 | 41 | cH, b, cH, |
Hotboards | 0:21479e8cb575 | 42 | |
Hotboards | 0:21479e8cb575 | 43 | f, gS, f, cH, |
Hotboards | 0:21479e8cb575 | 44 | a, f, c, a}; |
Hotboards | 0:21479e8cb575 | 45 | |
Hotboards | 0:21479e8cb575 | 46 | // Definimos otra matriz con la duración de los tonos |
Hotboards | 0:21479e8cb575 | 47 | int tones[] = { 500, 500, 500, 350, 150, |
Hotboards | 0:21479e8cb575 | 48 | 500, 350, 150, 1000, |
Hotboards | 0:21479e8cb575 | 49 | 500, 500, 500, 350, 150, |
Hotboards | 0:21479e8cb575 | 50 | 500, 350, 150, 1000, |
Hotboards | 0:21479e8cb575 | 51 | 500, 350, 150, 500, 250, 250, |
Hotboards | 0:21479e8cb575 | 52 | 125, 125, 250, |
Hotboards | 0:21479e8cb575 | 53 | |
Hotboards | 0:21479e8cb575 | 54 | 250, 500, 250, 250, |
Hotboards | 0:21479e8cb575 | 55 | 125, 125, 250, |
Hotboards | 0:21479e8cb575 | 56 | |
Hotboards | 0:21479e8cb575 | 57 | 125, 500, 375, 125, |
Hotboards | 0:21479e8cb575 | 58 | 500, 375, 125, 1000, |
Hotboards | 0:21479e8cb575 | 59 | 500, 350, 150, 500, 250, 250, |
Hotboards | 0:21479e8cb575 | 60 | 125, 125, 250, |
Hotboards | 0:21479e8cb575 | 61 | |
Hotboards | 0:21479e8cb575 | 62 | 250, 500, 250, 250, |
Hotboards | 0:21479e8cb575 | 63 | 125, 125, 250, |
Hotboards | 0:21479e8cb575 | 64 | |
Hotboards | 0:21479e8cb575 | 65 | 250, 500, 375, 125, |
Hotboards | 0:21479e8cb575 | 66 | 500, 375, 125, 1000}; |
Hotboards | 0:21479e8cb575 | 67 | |
Hotboards | 0:21479e8cb575 | 68 | // Definimos el número total de tonos que empleamos |
Hotboards | 0:21479e8cb575 | 69 | int tones_num = 66; |
Hotboards | 0:21479e8cb575 | 70 | |
Hotboards | 0:21479e8cb575 | 71 | // Establecemos una salida PWM( PB_3 ) para el buzzer, y una digital para el LED |
Hotboards | 0:21479e8cb575 | 72 | // de la Núcleo( PA_5 ) como indicador de que se está reproduciendo un tono |
Hotboards | 0:21479e8cb575 | 73 | PwmOut Buzzer(PWM_OUT); |
Hotboards | 0:21479e8cb575 | 74 | DigitalOut Led1(LED1); |
Hotboards | 0:21479e8cb575 | 75 | |
Hotboards | 0:21479e8cb575 | 76 | // Definimos una función prototipo |
Hotboards | 0:21479e8cb575 | 77 | void Play_tunes(PwmOut name, int notes, int tones); |
Hotboards | 0:21479e8cb575 | 78 | |
Hotboards | 0:21479e8cb575 | 79 | // ----- FUNCIÓN PRINCIPAL DEL PROGRAMA ----- |
Hotboards | 0:21479e8cb575 | 80 | int main(void) |
Hotboards | 0:21479e8cb575 | 81 | { |
Hotboards | 0:21479e8cb575 | 82 | // Declaramos una variable i para el siguiente ciclo FOR |
Hotboards | 0:21479e8cb575 | 83 | int i; |
Hotboards | 0:21479e8cb575 | 84 | |
Hotboards | 0:21479e8cb575 | 85 | // Con este ciclo FOR recorremos cada uno de los tonos y sus duraciones |
Hotboards | 0:21479e8cb575 | 86 | for(i=0; i<tones_num; i++) |
Hotboards | 0:21479e8cb575 | 87 | { |
Hotboards | 0:21479e8cb575 | 88 | // Mandamos a llamar a la función Play_tunes dandole los valores del |
Hotboards | 0:21479e8cb575 | 89 | // pin del buzzer, el valor i de la matriz de notas y de los tonos |
Hotboards | 0:21479e8cb575 | 90 | Play_tunes(Buzzer, imperialMarch[i], tones[i]); |
Hotboards | 0:21479e8cb575 | 91 | // Aquí separamos las estrofas de nuestra melodía |
Hotboards | 0:21479e8cb575 | 92 | if( i == 27 || i == 34 || i == 51 || i == 58 ) |
Hotboards | 0:21479e8cb575 | 93 | { |
Hotboards | 0:21479e8cb575 | 94 | // ... estas estrofas se separan 250ms una de la otra |
Hotboards | 0:21479e8cb575 | 95 | wait_ms(250); |
Hotboards | 0:21479e8cb575 | 96 | } |
Hotboards | 0:21479e8cb575 | 97 | } |
Hotboards | 0:21479e8cb575 | 98 | } |
Hotboards | 0:21479e8cb575 | 99 | |
Hotboards | 0:21479e8cb575 | 100 | // Esta es la función Play_tunes que mandamos a llamar dandole algunos |
Hotboards | 0:21479e8cb575 | 101 | // valores anteriormente |
Hotboards | 0:21479e8cb575 | 102 | void Play_tunes(PwmOut name, int notes, int tones) |
Hotboards | 0:21479e8cb575 | 103 | { |
Hotboards | 0:21479e8cb575 | 104 | // Declaramos una variable tipo flotante |
Hotboards | 0:21479e8cb575 | 105 | float period; |
Hotboards | 0:21479e8cb575 | 106 | // Calculamos el periodo de la nota en turno a reproducir |
Hotboards | 0:21479e8cb575 | 107 | period = 1000000/notes; |
Hotboards | 0:21479e8cb575 | 108 | // Activamos el led de la Núcleo para indicar que estamos reproduciendo |
Hotboards | 0:21479e8cb575 | 109 | // una nota |
Hotboards | 0:21479e8cb575 | 110 | Led1 = 1; |
Hotboards | 0:21479e8cb575 | 111 | // Establecemos el periodo calculado a la salida PWM |
Hotboards | 0:21479e8cb575 | 112 | name.period_us(period); |
Hotboards | 0:21479e8cb575 | 113 | // Establecemos un ciclo de trabajo del %50 |
Hotboards | 0:21479e8cb575 | 114 | name.write(0.50f); |
Hotboards | 0:21479e8cb575 | 115 | // Esperamos el tiempo establecido por el tono i |
Hotboards | 0:21479e8cb575 | 116 | wait_ms(tones); |
Hotboards | 0:21479e8cb575 | 117 | // Desactivamos el led de la Núcleo para indicar el fin de la nota |
Hotboards | 0:21479e8cb575 | 118 | Led1 = 0; |
Hotboards | 0:21479e8cb575 | 119 | // Terminamos la nota |
Hotboards | 0:21479e8cb575 | 120 | name.period_us(0); |
Hotboards | 0:21479e8cb575 | 121 | // Esperamos un poco para diferenciar entre una nota y otra |
Hotboards | 0:21479e8cb575 | 122 | wait_ms(20); |
Hotboards | 0:21479e8cb575 | 123 | } |