В этом уроке мы будем использовать ту же схему подключения что и в прошлом уроке:
Можно заметить что в предыдущих уроках мы писали код не очень универсальным. Например, в прошлом уроке, проигрывая нотный стан, мы вручную писали как проиграть каждую ноту. Но если добавить ещё несколько нот, на октаву повыше. Или несколько нот проиграть не один раз, то придётся снова переписывать несколько функций. Для того чтобы исправить это неудобство, мы воспользуемся ещё одним видом циклов - это циклы for.
Цикл for используется для выполнения действий ограниченное число раз. Синтаксис будет таким. После ключевого слова for
(с английского for - для) указывается переменная, затем ключевое слово in
(с английского in - в) и указывается коллекция, откуда будет браться эта переменная.
Перепишем функцию show_all_sounds()
из предыдущего урока и сделаем её более универсальной. Для этого сначала введём переменную типа список значений и укажем ноты, которые мы хотим воспроизвести.
# список нот song = ["do", "re", "mi", "fa", "sol", "la", "si"]
Затем заменим функцию show_all_sounds()
, где опишем цикл для прохождения по каждой ноте из списка.
# функция для воспроизведения всех звуков def show_all_sounds(): for note in song: sound(notes[note])
Теперь наша функция стала намного универсальнее. И для того чтобы воспроизвести новую песню, достаточно поменять переменную song.
Полностью скрипт будет выглядеть следующим образом:
# импорт модулей 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 # список нот song = ["do", "re", "mi", "fa", "sol", "la", "si"] # кнопка подключена к выводу 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(): for note in song: sound(notes[note]) # основной цикл программы while True: if but.value(): show_all_sounds() # если нажали на кнопку, воспроизведём все звуки
Запомнить:
for
используется для выполнения действий ограниченное число раз