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 }