===== Эксперимент 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'' записаны ноты мелодии и их длительности.
==== Дополнительное задание ====
* Попробуй записать и воспроизвести другую мелодию, например "В траве сидел кузнечик"