Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp23 [2020/05/18 12:36] labuser29products:laboratory_iot:exp23 [2020/05/18 15:40] (текущий) – [Программный код эксперимента] labuser29
Строка 17: Строка 17:
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file python Exp25.py[enable_line_numbers="2", start_line_numbers_at="1"]>+<file python Exp23.py[enable_line_numbers="2", start_line_numbers_at="1"]>
 from machine import Pin, PWM from machine import Pin, PWM
 import time import time
Строка 47: Строка 47:
     time.sleep(tempo/length/4)     time.sleep(tempo/length/4)
 </file> </file>
 +
 +Мелодию мы записали строкой ''abcdefgC'', а ритм массивом ''[8, 2, 1, 8, 3, 4, 6, 8]''.
 +С помощью цикла ''for'' и оператора ''in'' проходим по всем элементам мелодии. Для этого мы использовали оператор ''zip''. Он нужен для одновременного перебора сразу двух массивов и получения их элементов в переменные ''tone'' и ''length''. Так на первой итерации в переменной ''tone'' окажется ''a'', а в ''length'' — ''8''. На второй итерации ''b'' и ''2'' соответственно.
 +
 +Здесь внимательный читатель заметит, что ''melody'' не является массивом, а является строкой. Почему же мы говорим о ней как о массиве и работаем как с массивом. Оказывается в Python любую строку можно представить как массив символов и обращаться к ним по индексу, что мы и делаем.
 +
 +Получив ноту и ее длительность настраиваем частоту и скважность. Нота начинает звучать:
 +<code python [enable_line_numbers="2", start_line_numbers_at="24"]>
 +    speaker.duty(512)
 +    speaker.freq(tones[tone])
 +</code>
 +
 +Нота звучит, пока мы ждем время, равное ее длительности. В расчете учитывается темп:
 +<code python [enable_line_numbers="2", start_line_numbers_at="26"]>
 +    time.sleep(tempo/length)
 +</code>
 +
 +Чтобы ноты не сливались, мы делаем между ними маленькие паузы. Паузы между нотами также зависят от темпа и длительности ноты, но в 4 раза короче.
 +<code python [enable_line_numbers="2", start_line_numbers_at="27"]>
 +    speaker.duty(0)
 +    time.sleep(tempo/length/4)
 +</code>
 +
 +==== Дополнительное задание ====
 +<WRAP center round tip 60%>
 +  * Измени темп мелодии и длительности отдельных нот.
 +</WRAP>
 +