Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot_с:exp9 [2024/11/12 10:50] – создано labuser30products:laboratory_iot_с:exp9 [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1
Строка 1: Строка 1:
-==== Программный код эксперимента ==== 
  
-<file python Exp9.py[enable_line_numbers="2", start_line_numbers_at="1"]> 
-from machine import Pin, PWM 
-import time 
-import math 
-_init() 
- 
-LedPin = 15 
- 
-led = Pin(LedPin, Pin.OUT) 
-pwmLed = PWM(led) 
- 
-def pulse(l, t): 
-    for i in range(20): 
-        l.duty(int(math.sin(i / 10 * math.pi) * 500 + 500)) 
-        time.sleep_ms(t) 
- 
-while 1: 
-    pulse(pwmLed, 50) 
-</file> 
- 
-В программе мы подключили дополнительную библиотеку ''math'' она содержит математические функции, такие как синус. 
- 
-Кроме того, мы впервые, столкнулись с //подпрограммой//. Подпрограммы нужны для того, чтобы можно было использовать один и тот же кусок кода несколько раз в программе не копируя постоянно одно и то же. Гораздо удобнее вынести такой код в отдельную подпрограмму и вызывать ее всякий раз, когда она нужна. 
- 
-Кроме того подпрограмма может принимать параметры и возвращать данные. Чтобы лучше понять что это значит, напишем простейшую подпрограмму для сложения двух чисел. 
- 
-<code python> 
-def summator(a, b): 
-    c = a + b 
-    return c 
- 
-result = summator(2, 3) 
-</code> 
- 
-Здесь мы объявили подпрограмму с именем ''summator'' и указали, что она принимает на вход два параметра. Первый параметр будет записан в переменную ''a'', второй в переменную ''b''. Далее идет тело подпрограммы, оно выделено отступом от начала строки. В коде подпрограммы мы складываем переменные ''a'' и ''b'' и записываем результат сложения в переменную ''c''. И возвращаем полученный результат с помощью оператора ''return'' 
- 
-А основная программа состоит только из одной строки, в которой мы вызываем подпрограмму ''summator'', передавая ей в качестве параметров два числа - 2 и 3. Подпрограмма складывает их и полученный результат оказывается в переменной ''result'' 
- 
-Подпрограммы, которые принимают параметры и возвращают результат принято называть //функциями//. В нашем эксперименте мы объявили функцию ''pulse'' она принимает в качестве параметров объект ШИМ и число— время задержки. ''pulse'' не возвращает результата. 
- 
-Функция ''pulse'' предназначена для изменения яркости светодиода. 
-<code python [enable_line_numbers="2", start_line_numbers_at="12"]> 
-    for i in range(20): 
-        l.duty(int(math.sin(i / 10 * math.pi) * 500 + 500)) 
-        time.sleep_ms(t) 
-</code> 
- 
-В строке 12 нам встречается два новых оператора.  
- 
-Оператор ''for'' — это оператор цикла, как и знакомый нам ''while'', но действует он иначе. Он предназначен для прохода по всем элементам. Но элементам чего? Сейчас разберемся.  
- 
-Сначала взглянем на оператор ''range()'', он предназначен для генерирования ряда чисел в определенном диапазоне. ''range(20)'' генерирует последовательность чисел 0, 1, 2, 3, 4 ... 19. Это будет 20 целых чисел от 0 до 19. 
- 
-Так вот оператор ''for'', в нашем случае, проходит по всем элементам этой последовательности, которую создал для него ''range(20)''. Каждый раз он берет следующий элемент последовательности, присваивает его переменной ''i'', и выполняет тело цикла. И так до тех пор, пока не сделает это со всеми элементами последовательности. 
- 
-Получается, что в нашем случае, тело цикла будет запущено 20 раз и переменная i последовательно получит значения от 0 до 19. Шаги цикла принято называть //итерациями//. В нашем случае будет 20 итераций цикла. На каждой итерации мы будем устанавливать новую яркость светодиода. А вычислять яркость на каждой итерации мы будем по формуле в строке 13. Переменная ''i'' используется в ней для вычисления яркости. 
- 
-Мы не будем вдаваться в детали математики в формуле из строки 13, но обязательно дадим ссылку, где можно почитать о функциях библиотеки ''math'' подробнее, если это интересно. 
- 
-<WRAP center round info 60%> 
-  * [[https://python-scripts.com/range|Подробнее об операторе range()]] 
-  * [[https://pythonworld.ru/osnovy/cikly-for-i-while-operatory-break-i-continue-volshebnoe-slovo-else.html|Подробнее о циклах в Python]] 
-  * [[https://python-scripts.com/math|Подробнее о библиотеке math]] 
-</WRAP>