Ввод-вывод

Ввод - это получение данных программой. Вывод - это результат работы программы: сообщение, сигнал, движение мотора, изменение яркости или другое действие.
Зачем это нужно
Программа без ввода и вывода почти не связана с внешним миром. Она может считать значения внутри себя, но робот должен получать данные от датчиков и управлять устройствами. Кнопка сообщает, что человек нажал старт. Датчик расстояния сообщает, что впереди препятствие. Программа обрабатывает эти данные и выводит результат: включает моторы, зажигает светодиод, печатает число в монитор порта или показывает сообщение на дисплее.
Если перепутать ввод и вывод, отладка становится мучительной. Например, ученик ожидает, что print() изменит поведение мотора, хотя это только вывод текста. Или пытается управлять светодиодом через пин, который настроен как вход. Разделение ролей помогает быстро понять, что именно проверять.
Главная идея
Программа работает как переход между входными данными и выходным действием.
ввод -> обработка -> вывод

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

Ввод не обязан приходить от клавиатуры. В робототехнике ввод чаще дают датчики: кнопка, потенциометр, датчик линии, датчик расстояния, камера, энкодер. Вывод тоже не ограничивается экраном. Для робота выводом может быть движение, звук, свет или передача данных на другое устройство.
Данные - это значения, с которыми работает программа: число, строка, состояние 0/1, массив измерений или пакет от датчика.
Ввод от пользователя и ввод от датчика
В обычной программе пользователь может ввести строку с клавиатуры:
name = input("Введите имя: ")
print(name)
Последовательность работы этой программы можно представить так:

В роботе похожую роль выполняет датчик или кнопка:
считать кнопку
считать расстояние
считать уровень освещенности
Разница в источнике данных. Клавиатура передает текст, датчик передает электрический сигнал или число. Но для алгоритма обе ситуации похожи: программа получила значение и должна решить, что с ним делать.
| Источник | Что поступает в программу | Пример использования |
|---|---|---|
| Клавиатура | строка | ввести скорость в учебной задаче |
| Кнопка | 0 или 1 | запуск или остановка робота |
| Датчик расстояния | число | остановиться перед препятствием |
| Датчик линии | состояние поверхности | корректировать направление |
| Энкодер | импульсы или счетчик | измерять пройденный путь |
Вывод: не только текст
В Python вывод часто показывают через print():
distance = 25
print(distance)
Это удобно для обучения и отладки. Но у робота есть другие виды вывода:
- включить светодиод;
- изменить скорость мотора;
- повернуть сервопривод;
- подать звук;
- отправить телеметрию на компьютер;
- показать значение на дисплее.
В Arduino-мире текстовый вывод часто идет через последовательный порт, а физический вывод - через пины и исполнительные устройства. Например, digitalWrite() устанавливает цифровой выход в состояние HIGH или LOW.
Отладочный вывод - это сообщения, которые помогают понять, что происходит внутри программы. Например, можно вывести текущее расстояние или состояние кнопки, пока робот работает.
Пример: расстояние превращается в действие

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

Здесь есть два вывода. Первый вывод нужен человеку: число появляется в мониторе порта. Второй вывод нужен роботу: моторы получают команду.
Один и тот же ввод может использоваться несколькими способами. Показание датчика можно напечатать, сохранить в памяти, сравнить с порогом и превратить в команду мотору.
Ошибки ввода-вывода
У начинающих часто встречаются похожие проблемы.
| Ошибка | Как проявляется | Что проверить |
|---|---|---|
| Читаем не тот вход | кнопка "не работает" | номер пина и подключение |
| Вывод настроен как вход | светодиод не горит | режим пина |
| Выводим текст вместо команды | робот ничего не делает | куда отправлен результат |
| Не выводим отладку | непонятно, что видит программа | добавить временный вывод значения |
| Используем сырые данные без проверки | робот дергается | диапазон, шум, порог |
Хорошая привычка: сначала вывести значение датчика для человека, потом использовать его для управления роботом. Так легче увидеть, проблема в датчике, программе или исполнительном устройстве.
Что запомнить про ввод-вывод
Ввод и вывод связывают программу с внешним миром.
| Вопрос | Ответ |
|---|---|
| Откуда пришли данные? | ввод |
| Что программа с ними сделала? | обработка |
| Куда ушел результат? | вывод |
| Можно ли вывести одно значение в разные места? | да |
| Нужно ли проверять данные датчиков? | да |
Если робот не реагирует, полезно пройти цепочку: датчик дает значение, программа его видит, условие срабатывает, команда уходит на правильный выход.
Практика
Задание 1
Разделите элементы на ввод и вывод.
| Элемент | Ввод или вывод? |
|---|---|
| Кнопка | |
| Светодиод | |
| Датчик расстояния | |
| Мотор | |
| Монитор порта |
Задание 2
Составьте алгоритм для робота:
прочитать кнопку
если кнопка нажата, включить светодиод
иначе выключить светодиод
Отметьте, где ввод, где обработка, где вывод.
Задание 3
Придумайте два вывода для одного показания датчика расстояния: один для человека, второй для робота.
Проверьте себя
- Чем ввод отличается от вывода?
- Почему
print()полезен при отладке? - Может ли мотор быть устройством вывода?
- Почему датчик расстояния не является устройством вывода?
- Что проверить, если программа не видит кнопку?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Ввод - получение данных программой.
- Вывод - передача результата наружу: человеку, устройству или другой программе.
- Датчик - устройство, которое измеряет состояние внешнего мира.
- Исполнительное устройство - устройство, которое выполняет команду программы.
- Монитор порта - окно для обмена текстовыми данными с платой через последовательный порт.
- Отладка - поиск и исправление ошибок в программе или подключении.
- Порог - значение, с которым сравнивают измерение для выбора действия.
Связанные темы
- Простая программа - как команды выполняются по порядку.
- Ветвление - как ввод превращается в выбор действия.
- Цикл - как повторять чтение датчика.
- Устройство компьютера - где ввод и вывод находятся в общей схеме.
Источники
- Python Documentation. Built-in Functions
input()andprint(): https://docs.python.org/3/library/functions.html - Python Tutorial. Input and Output: https://docs.python.org/3/tutorial/inputoutput.html
- Arduino Reference. digitalRead(): https://www.arduino.cc/en/Reference/digitalRead
- Arduino Reference. digitalWrite(): https://www.arduino.cc/en/Reference/digitalWrite
- Arduino Tutorial. Digital Read Serial: https://www.arduino.cc/en/Tutorial/DigitalReadSerial