int speakerPin = 8;
// темп воспроизведения, ноты, длительности
int tempo, notes, beats;
// процедура проигрыша ноты
void playNote(char note, int duration)
{
// массив для наименований нот в пределах двух октав
char names[] = {
'c', 'C', 'r', 'D', 's', 'E', 'f', 'F',
't', 'G', 'u', 'A', 'b',
'h', 'C', 'r', 'D', 's', 'E', 'F',
'f', 'T', 'G', 'u', 'A', 'B', 'H', 'F'
};
// массив частот нот
int tones[] = {
261, 277, 293, 311, 329, 349, 370, 392,
415, 440, 466, 494, 523, 554, 587, 622,
659, 698, 740, 784, 830, 880, 932, 988
};
// проиграть тон, соответствующий ноте
for (int i = 0; i < sizeof(tones); i++)
{
if (names[i] == note)
{
tone(speakerPin, tones[i], duration);
}
}
}
// мелодия
char melody[] = {
'G', 'G', 'G', 'G', 'E', 'H',
'G', 'E', 'H', 'G', '*',
'G', 'E', 'H', 'E', 'H',
'T', 'E', 'H', 'F',
'g', 'G', 'G', 'F', 't', 'e',
's', 's', 's', '*', 'U', 'r', 'c', 'B',
'H', 'A', 'H', 'H',
'H', 'G', 'H', 'd',
'g', 'G', 'G', 't', 'f',
's', 's', 's', '*', 'U', 'T', 'E', 'H',
'H', 'A', 'H', '*', 'E', 'T', 'E', 'H',
'G', 'E', 'H', 'G',
'%', '%'
};
// длительности нот
int bb[] = {
8, 8, 8, 6, 2,
8, 6, 2, 8, 8,
8, 8, 6, 2,
8, 6, 2, 16,
8, 6, 2, 8, 8,
2, 2, 4, 4, 2, 8, 6, 2,
2, 2, 4, 4, 2, 8, 6, 2,
8, 6, 2, 16,
8, 6, 2, 8, 8,
2, 2, 4, 4, 2, 8, 6, 2,
2, 2, 4, 4, 2, 8, 6, 2,
8, 6, 2, 16,
64, 64
};
void setup()
{
pinMode(speakerPin, OUTPUT);
tempo = 50; // скорость воспроизведения мелодии
}
void loop()
{
for (int i = 0; i < sizeof(melody); i++)
{
notes = melody[i];
beats = bb[i];
if (notes == '*')
tone(speakerPin, 0, beats * tempo); // пауза
else
playNote(notes, beats * tempo);
// пауза между нотами
delay(beats * tempo);
}
}