(495)240-8280ПН-СБ с 12:00 до 20:00
We speak English

Урок 2.1. Цикл в работе с индикатором

В данном уроке вы научитесь использовать цикл с оператором for, который позволяет работать с микроконтроллером TI-Innovator Hub.

Вы научитесь

  • Создавать цикл с оператором for и использовать функцию range()
  • Оперировать десятичными значениями с помощью оператора float()
  • С помощью кода управлять миганием индикатора на микроконтроллере по заданным параметрам

Для того чтобы "зациклить" определенную часть кода и обрабатывать ее нужное количество раз, вы можете использовать цикл с оператором for и функцию range().

Функция range() выдает последовательность чисел. По умолчанию первой цифрой будет 0, увеличение значения происходит на единицу, и завершается цикл числом, заданным пользователем.

Сделать так, чтобы индикатор на микроконтроллере мигал несколько раз, можно с помощью выражения light.blink(), но с ним пользователь не имеет возможности полностью контролировать цикл мигания. Например, недоступна опция, задающая промежуток времени, когда индикатор должен быть включенным или выключенным между миганиями. Можете ли вы сделать так, чтобы он мигал 3 раза в 10 секунд?

В данном уроке вы попробуете создать программу, которая задает параметры мигания индикатора, и с ее помощью вы сможете управлять даже таким показателем, как общее количество миганий.

Примечание для учителя: Цикл с оператором for в языке Python также используется для повторения определенной последовательности данных (например, списка, кортежа, словаря, набора данных или строки). Эта возможность будет продемонстрирована в следующих уроках.

1. Начните работу с создания нового шаблона проекта Python Hub.

Добавьте три выражения ввода (input):

  • Первое - для общего количества миганий индикатора
  • Второе - для функции onTime (времени, в течение которого LED индикатор находится во включенном состоянии во время мигания)
  • Третье - для функции offTime (времени между миганиями)

Внимание: Вполне возможны ситуации, когда вам потребуется работать не с целыми числами. В таком случае вместо оператора int() в функции input() используйте оператор float(), который позволяет вводить десятичные значения.

Операторы float() и int() (а также как и другие операторы) можно найти в меню: menu > Built-ins > Type.

2. Вставьте в программу следующее выражение:

for index in range(size):
  block

Его можно выбрать через меню: menu > Built-ins > Control.

Далее вы будете заменять строковые подсказки index, size и block.

Примечание для учителя: Элемент index может быть любой действительной переменной. Элемент size должен быть целым числом больше 0. Элемент block является блоком кода, который обрабатывается во время каждого повторения цикла. Все выражения в блоке структурированы.

3. Замените элемент index любой переменной (обычно используют i). Нажатие на tab переместит курсор к следующему элементу.

Замените элемент size переменной blinks, которая использовалась выше в первом выражении ввода. Снова нажмите tab, чтобы перейти к области блока.

4. Блок (block) цикла с оператором for является последовательностью выражений, которые управляют светом (красным LED индикатором на микроконтроллере TI-Innovator Hub). Здесь вам понадобятся выражения light.on(), light.off() и sleep(). Сначала попробуйте ввести их самостоятельно. Не забудьте применить переменные времени, которые вы использовали ранее в выражениях ввода.

Для всех выражений ввода вы можете использовать десятичные значения, но количество миганий следует конвертировать в целое число. Не бывает же пол мигания!

В следующем шаге будет показан пример кода программы.

5. Код вашей программы должен выглядеть примерно так:

blinks = int( input("Number of blinks? ") )
onTime = float(  #complete this...
offTime = float(  #complete this...
for i in range(blinks):
  light.on()
  sleep(onTime)
  light.off()
  sleep(offTime)

6. Когда вы запустите программу, нужно будет ввести свои значения, а затем понаблюдать за LED индикатором. Обратите внимание на то, остается ли индикатор включенным или выключенным после завершения программы.

Сейчас LED индикатор на микроконтроллере мигает, но на экране калькулятора TI-Nspire CX II-Т ничего не происходит. Вам необходимо вставить выражение отображения print внутри цикла с оператором for, чтобы отобразить, какое по счету мигание происходит:

print(i)

Выражение print() можно найти в меню: menu > Built-ins > I/O.

Теперь запуск программы показывает значение переменной индекса i на экране приложения Shell пока программа выполняет цикл мигания LED индикатора по вашему запросу. Ничего странного в цифрах на экране не находите?

Примечание для учителя: Выражение print() это также очень полезный инструмент отладки.

Что необычного в цифрах на экране? В языке Python циклы, в которых используется выражение range(size), начинаются со значения 0 и заканчиваются при значении size равному -1. Поэтому при заданном выражении range(5) обработанные 5 чисел будут  0, 1, 2, 3 и 4.

В языке Python циклы, в которых используется выражение range(start,stop), начинаются со стартового значения и завершаются при стоп-значении -1.
Пример:

7. Вместо стандартного выражения print() в языке Python вы можете использовать функцию, специально разработанную компанией Texas Instruments, которая называется text_at(). Ее можно найти в меню проекта по работе с микроконтроллером Hub Project. Обратите внимание на выражения вверху программы.

В меню menu > TI Hub > Commands выберите выражение text_at(...).

text_at( row , "text" , "align" )

В качестве row (ряд) выберите 6.

Вместо элемента text (текст) используйте выражение str(i), которое можно найти в следующем пункте меню: Menu > Built-ins > Type. Оно конвертирует целое значение i в строку.

В элементе align (выравнивание) выберите одну из трех всплывающих подсказок: слева, по центру или справа. Вначале строки с выражением print(i) нажмите на ctrl+t, чтобы преобразовать ее в формат комментария.

Теперь фрагмент вашего кода должен выглядеть примерно так:

# print(i)
text_at(6, str(i), "center")

8. Снова запустите программу. Какие значения необходимо ввести, чтобы индикатор мигал 3 раза в 10 секунд? Попробуйте использовать следующие выражения:

  • blinks = 3
  • onTime = 2
  • offTime = 2

Третье мигание завершится на 10 секунде, но программа продолжит работу еще 2 секунды. Существуют ли другие способы написания этой программы?

Не забудьте сохранить свою работу.