program that sound the imperial march

Dependencies:   mbed

Committer:
Hotboards
Date:
Thu Apr 21 19:27:56 2016 +0000
Revision:
0:21479e8cb575
first release

Who changed what in which revision?

UserRevisionLine numberNew 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 }