/
buzzer.ino
71 lines (52 loc) · 2.26 KB
/
buzzer.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
short pinBuzzer = 9; //a este pin conecto el cable rojo del buzzer
/*
// AMAGO DE CUMPLEAÑOS FELIZ
short longitudMelodia = 14;
char melodia[] = "ddrdfmddrdsf ";
short duracionNota[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //duración de cada nota
*/
short longitudMelodia = 9; // longitud de la melodía a tocar
char melodia[] = "drmfslsD "; //melodía
short duracionNota[] = {2,2,2,2,2,2,2,2,4}; //duración de cada nota
short ritmo = 300;
void tocarTono(short tono,short duracion){
Serial.println("\t\t\t-- inicio función tocarTono --");
for(long i=0;i<duracion*1000L;i+=tono*2){
digitalWrite(pinBuzzer,HIGH);
delayMicroseconds(tono);
digitalWrite(pinBuzzer,LOW);
delayMicroseconds(tono);
}//for
Serial.println("\t\t\t-- fin función tocarTono --");
}//tocarTono
void tocarNota(char nota,short duracion){
Serial.println("\t----- inicio función tocarNota -----");
short numeroNotas = 8; //el sketch es capaz de tocar 8 notas, del do menor al do mayor
//char nombres[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; //notación inglesa
char nombres[] = {'d','r','m','f','s','l','s','D'}; //notación latina
short tonos[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // estos están ya de internet
// busco a que nota corresponde y la toco
for(int i=0;i<numeroNotas;i++){
if(nombres[i]==nota){
Serial.print("\tEncontrada nota ");Serial.println(nombres[i]);
tocarTono(tonos[i],duracion);
}
}//recorro cada nota
Serial.println("\t----- fin función tocarNota -----");
}//tocarNota
void setup(){
pinMode(pinBuzzer,OUTPUT); // activo el pin al que he conectado el buzzer como salida
Serial.begin(9600); // para depurar
}//setup
void loop() {
Serial.println("---------- Inicio loop ----------");
for(short i=0;i<longitudMelodia;i++){
Serial.print("La nota número ");Serial.print(i);Serial.print(" es la ");Serial.print(melodia[i]);Serial.print(" y tiene una duración de ");Serial.println(duracionNota[i]);
if(melodia[i] == ' ') // no toco nada
delay(duracionNota[i] * ritmo);
else // toco la nota correspondiente
tocarNota(melodia[i],duracionNota[i] * ritmo);
delay(ritmo/2);
}//recorro la melodía
Serial.println("---------- Fin loop ----------");
}//loop