===== Эксперимент 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. Монтажная схема эксперимента//
==== Программный код эксперимента ====
from machine import Pin, PWM
import time
_init()
tempo = 2
tones = {
'c': 262,
'd': 294,
'e': 330,
'f': 349,
'g': 392,
'a': 440,
'b': 494,
'C': 523
}
speaker = PWM(Pin(15, Pin.OUT))
melody = 'caagafcccaabgCCddbbagfcaagafCddbbagfcaagaf'
rhythm = [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 2]
for tone, length in zip(melody, rhythm):
speaker.duty(512)
speaker.freq(tones[tone])
time.sleep(tempo/length)
speaker.duty(0)
time.sleep(tempo/length/4)
В перменной ''melody'' записаны ноты мелодии, а в массиве ''rhythm'' их длительности.
==== Дополнительное задание ====
* Попробуй записать и воспроизвести другую мелодию, например "В траве сидел кузнечик"