Это старая версия документа!


Эксперимент 23. Темп, длительность и паузы

Если в прошлом эксперименте ты попробовал выполнить дополнительное задание и записать мелодию, то, вероятно, понял, что это не просто, учитывая, что нужно описывать и ноты и их длительности и паузы между ними. А если после написания такой мелодии потребуется изменить ее темп, то придется пересчитывать все паузы. Должен быть другой, более удобный способ записывать мелодии.

Для этого запишем мелодию, последовательность ее нот, в массив, а длительности этих нот в другой. С помощью оператора цикла будем получать эти данные и исполнять. Для записи темпа заведем отдельную переменную, которая будет учитываться в расчете длительностей.

Схема эксперимента

Схему эксперимента оставим прежней, займемся программой.

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp25.py
  1. from machine import Pin, PWM
  2. import time
  3. _init()
  4.  
  5. tempo = 2
  6.  
  7. tones = {
  8. 'c': 262,
  9. 'd': 294,
  10. 'e': 330,
  11. 'f': 349,
  12. 'g': 392,
  13. 'a': 440,
  14. 'b': 494,
  15. 'C': 523
  16. }
  17.  
  18. speaker = PWM(Pin(15, Pin.OUT))
  19.  
  20. melody = 'abcdefgC'
  21. rhythm = [8, 2, 1, 8, 3, 4, 6, 8]
  22.  
  23. for tone, length in zip(melody, rhythm):
  24. speaker.duty(512)
  25. speaker.freq(tones[tone])
  26. time.sleep(tempo/length)
  27. speaker.duty(0)
  28. time.sleep(tempo/length/4)