| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| products:laboratory_iot:exp23 [2020/05/18 12:45] – labuser29 | products:laboratory_iot:exp23 [2020/05/18 15:40] (текущий) – [Программный код эксперимента] labuser29 |
|---|
| ==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== |
| |
| <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 |
| С помощью цикла ''for'' и оператора ''in'' проходим по всем элементам мелодии. Для этого мы использовали оператор ''zip''. Он нужен для одновременного перебора сразу двух массивов и получения их элементов в переменные ''tone'' и ''length''. Так на первой итерации в переменной ''tone'' окажется ''a'', а в ''length'' — ''8''. На второй итерации ''b'' и ''2'' соответственно. | С помощью цикла ''for'' и оператора ''in'' проходим по всем элементам мелодии. Для этого мы использовали оператор ''zip''. Он нужен для одновременного перебора сразу двух массивов и получения их элементов в переменные ''tone'' и ''length''. Так на первой итерации в переменной ''tone'' окажется ''a'', а в ''length'' — ''8''. На второй итерации ''b'' и ''2'' соответственно. |
| |
| Здесь внимательный читатель заметит, что ''melody'' не является массивом, а является строкой. Почему же мы говорим о ней как о | Здесь внимательный читатель заметит, что ''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> |