В этом уроке мы будем использовать ту же схему подключения что и в прошлом уроке:
Есть ещё один очень полезный контейнер (или коллекция значений) - это словарь. Он, судя по названию, очень похож на словарь. Как и в настоящих словарях, в этой коллекции сначала идёт слово, а потом его определение. Нам будет удобно воспользоваться словарём, чтобы описать ноты.
Люди с музыкальным слухом (если у Вас он тоже музыкальный, и Вы много экспериментировали с частотой звучания зуммера) определили что музыкальным нотам соответствует определённая частота, например, ноте ♪до - 262 Гц, ноте ♪ре - 294 Гц и так далее. Такое соответствие частот нотам как раз и удобно хранить в словаре.
Создадим словарь для хранения соответствия частот нотам. Словарь обозначается фигурными скобками (например, пустой словарь выглядит так: notes = {}
). В фигурных скобках сначала указывается ключ (в нашем случае название ноты, например, “do”), через двоеточие указывается значение, которое соответствует ключу (в нашем случае ноте до соответствует значение 262). Через запятую можно указать сколько угодно пар ключ - значение. Для двух нот определяться словарь будет так:
notes = {"do": 262, "re": 294}
Подобно спискам, к каждому элементу можно обратиться, только в словарях обращаются по ключу. Ключ в таком случае указывается в квадратных скобках. Например, считать в переменную частоту ноты до можно так:
do_freq = notes["do"]
Добавить значение в уже существующий словарь можно просто установив новое значение для нового ключа:
notes["mi"] = 330
Проще представить словарь с помощью таблицы из двух колонок, где первая колонка - это ключ, а вторая - значение, соответствующее ключу.
Ключ | Значение |
---|---|
«do» | 262 |
“re” | 294 |
“mi” | 330 |
А теперь немного модифицируем прошлый скрипт, и проиграем все ноты по очереди при нажатии на кнопку.
# импорт модулей from machine import Pin, PWM from time import sleep # создадим ШИМ вывод buz на 12 выводе buz = PWM(Pin(12, Pin.OUT)) # словарь нот notes = {} notes["do"] = 262 notes["re"] = 294 notes["mi"] = 330 notes["fa"] = 349 notes["sol"] = 392 notes["la"] = 440 notes["si"] = 494 # кнопка подключена к выводу 13 but = Pin(13, Pin.IN) # функция для воспроизведения звука определённой частоты def sound(new_freq): buz.freq(new_freq) # установка частоты из параметра buz.duty(512) # установить заполнение в 512 sleep(1) # задержка в 1 секунду buz.duty(0) # установить заполнение в 0 sleep(0.5) # задержка в половину секунды # функция для воспроизведения всех звуков def show_all_sounds(): sound(notes["do"]) # вызов функции sound со значением ноты sound(notes["re"]) # вызов функции sound со значением ноты sound(notes["mi"]) # вызов функции sound со значением ноты sound(notes["fa"]) # вызов функции sound со значением ноты sound(notes["sol"]) # вызов функции sound со значением ноты sound(notes["la"]) # вызов функции sound со значением ноты sound(notes["si"]) # вызов функции sound со значением ноты # основной цикл программы while True: if but.value(): show_all_sounds() # если нажали на кнопку, воспроизведём все звуки
Запомнить:
notes = {}
)notes[«do»]
)