===== Эксперимент 24. Музыкальный автомат ===== Теперь создадим настоящий музыкальный автомат. Мы подготовим для него запись мелодии, а он будет ее воспроизводить. Возьмем всем известную мелодию "В лесу родилась ёлочка" {{ :products:esp-iot:v_lesu_rodilas_jolochka7.png?nolink |}} //Рисунок 1. Ноты мелодии "В лесу родилась ёлочка"// Если ты не разбираешься в музыкальной грамоте, то не беда. Эксперимент получится и без этого, ведь мы уже перевели эту нотную запись в "язык" для нашего музыкального автомата. Но если тебе интересно, и ты хочешь сделать запись другой мелодии, то [[https://soundtimes.ru/uroki-muzyki/notnaya-gramota-dlya-nachinayushchikh-muzykantov|начать знакомство с нотной грамотностью можно, например, здесь]]. ==== Схема эксперимента ==== {{ :products:esp-iot:exp7_sch.png?nolink |}} //Рисунок 1. Электрическая принципиальная схема эксперимента// {{ :wiki:exp7_mont.png?direct&600 |}} //Рисунок 2. Монтажная схема эксперимента// ==== Программный код эксперимента ==== #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() { pinMode(SPEAKER_PIN, OUTPUT); analogWriteRange(1024);; } void loop() { for (int i = 0; i < 42; i++){ analogWrite(SPEAKER_PIN, 512); analogWriteFreq(tones[melody[i].note]); delay(tempo / melody[i].length); analogWrite(SPEAKER_PIN, 0); delay(tempo / melody[i].length / 4); } } В массиве ''melody'' записаны ноты мелодии и их длительности. ==== Дополнительное задание ==== * Попробуй записать и воспроизвести другую мелодию,​ например "В траве сидел кузнечик"​