Теперь создадим настоящий музыкальный автомат. Мы подготовим для него запись мелодии, а он будет ее воспроизводить. Возьмем всем известную мелодию «В лесу родилась ёлочка»
Рисунок 1. Ноты мелодии «В лесу родилась ёлочка»
Если ты не разбираешься в музыкальной грамоте, то не беда. Эксперимент получится и без этого, ведь мы уже перевели эту нотную запись в «язык» для нашего музыкального автомата. Но если тебе интересно, и ты хочешь сделать запись другой мелодии, то начать знакомство с нотной грамотностью можно, например, здесь.
#define SPEAKER_PIN 15 int tones[8] = {262, 294, 330, 349, 392, 440, 494, 523}; enum Note {c, d, e, f, g, a, b, C}; struct Sound { int note; int length; }; const int tempo = 2000; Sound melody[42] = { {c, 8}, {a, 8}, {a, 8}, {g, 8}, {a, 8}, {f, 8}, {c, 8}, {c, 8}, {c, 8}, {a, 8}, {a, 8}, {b, 8}, {g, 8}, {C, 3}, {C, 8}, {d, 8}, {d, 8}, {b, 8}, {b, 8}, {a, 8}, {g, 8}, {f, 8}, {c, 8}, {a, 3}, {a, 8}, {g, 8}, {a, 8}, {f, 3}, {C, 8}, {d, 8}, {d, 8}, {b, 8}, {b, 8}, {a, 3}, {g, 8}, {f, 8}, {c, 8}, {a, 3}, {a, 8}, {g, 8}, {a, 8}, {f, 3} }; void setup() { analogWriteRange(1024);; } void loop() { for (int i = 0; i < 42; i++){ analogWriteFreq(tones[melody[i].note]); } }
В массиве melody
записаны ноты мелодии и их длительности.