Código Robotic 3 Intermedio – Pag51
1 int speakerPin = 9; //Declaramos el PIN digital D9 para el Piezo Speaker
2 int longitud = 33; //Numero de notas que contiene la melodia mas uno
3 char notas[] = “ccfagfg deffgfe ccfagfg deffedcd “; //Notas musicales. Los espacios son notas vacias
4 int golpes[] = { 1, 1, 4, 1, 1, 1, 4, 2, 1, 1, 4, 2, 1, 1, 4, 2, 1, 1, 4, 1, 1, 1, 4, 2, 1, 1, 4, 2, 1, 1, 1, 4, 2};
//Duracion de cada una de las notas musicales
5 int tiempo = 250; //Tiempo de duracion para el toque de notas
6 void setup() {
7 pinMode(speakerPin, OUTPUT); //Configuramos el puerto digital 9 como salida
8 }
9
10 void loop() {
11 for(int i=0;i<longitud;i++){
12 if(notas[i]==’ ‘){
13 delay(golpes[i]*tiempo); //Retardo de acuerdo a los golpes
14 }
15 else{
16 Tocar_Nota(notas[i],golpes[i]*tiempo); //Reproduce notas con su duracion
17 }
18 delay(tiempo/2); //Pausa entre notas
19 }
20 }
21
22 void Tocar_Tono(int tone, int duracion){ //Una funcion para la reproduccion de tonos
23 for(long i =0;i<duracion*1000L;i += tone*2){
24 digitalWrite(speakerPin,HIGH); //Presenta el tono en alto
25 delayMicroseconds(tone); //Duracion del tono
26 digitalWrite(speakerPin,LOW); //Presenta el tono en bajo
27 delayMicroseconds(tone); //Duracion del tono
28 }
29 }
30
31 void Tocar_Nota(char nota, int duracion){ //Una funcion para la reproduccion de notas
32 char nombres[] = { ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘a’, ‘b’, ‘c’};
33 //Variable local para el nombre de notas musicales existentes
34 int tonos[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
35 //Variable local para el ancho de pulso (us) de las notas
36
37 for(int i=0;i<8;i++){//Reproduciomos los tonos correspondientes al nombre de las notas
38 if(nombres[i] == nota){
39 Tocar_Tono(tonos[i], duracion); //Llamamos a la funcion para la reproduccion de tonos, segun el tono y duracion
40 }
41 }
42 }