Включение и выключение устройств с Arduino: Введение
Указатель руководства
Введение (эта статья)
Использование двух кнопок: одна для включения, другая для выключения
Введение
Один из первых проектов, с которых начинают многие, — включение/выключение или мигание светодиодом, и в сети есть очень много руководств, показывающих как это делать. К сожалению, многие из них никогда не выходят за рамки самого базового начального скетча. В этом руководстве я надеюсь помочь со следующим шагом.
Помимо очевидного факта того, что мигание светодиодом само по себе — это круто, это хорошее упражнение, потому что включение и выключение светодиода — это тот же процесс, что и включение/выключение любого цифрового устройства. Как только вы сможете создать код для мигания светодиодом, вы сможете создать код для управления практически чем угодно.
Светодиоды также удобно использовать в качестве примеров, потому что они (в основном) не требуют большой мощности и могут быть напрямую подключены к Arduino. Переключение устройств высокого напряжения, таких как соленоиды и двигатели, рассматривается в более поздней статье.
Опрос (Polling) против Прерываний (Interrupts)
Существует много решений для включения и выключения светодиода, и многое зависит от того, как вы хотите, чтобы работал ваш скетч, как быстро вам нужно, чтобы Arduino реагировал, и какой интерфейс вы хотите использовать: одна кнопка, две кнопки, клавиатура и т.д. Здесь я рассматриваю некоторые способы, которые использую сам, с одной кнопкой. В первом разделе используется опрос, во втором — прерывания.
Опрос — это когда вы постоянно проверяете статус чего-либо. В следующих примерах внутри функции loop() я использую digitalRead() для непрерывной проверки состояния пина, и я не знаю, изменилось ли состояние пина до тех пор, пока не проверю его.
Опрос — это как ожидание доставки, но ваш дверной звонок сломан, поэтому вам нужно проверять входную дверь каждую минуту, чтобы увидеть, доставляет ли почтальон ваш новый Arduino.
Прерывания, как следует из названия, — это когда текущий процесс прерывается и выполняется новый процесс. В контексте этих руководств Arduino реагирует, когда состояние пина изменяется. Он делает это автоматически, поэтому вам не нужно продолжать проверять пин. Это означает, что коду не нужно беспокоиться о пине до тех пор, пока Arduino не сообщит об этом.
Прерывания — это работающий дверной звонок. Вы смотрите фильм, и звонит дверной звонок. Вы останавливаете фильм и идёте проверить, кто у двери. Вы расписываетесь за свой новый Arduino и возвращаетесь к просмотру фильма с того места, где остановились. Поскольку дверной звонок работает, вам не нужно продолжать проверять дверь. Вы просто реагируете, когда слышите, как он звонит.
Эти руководства сосредоточены на техниках опроса (polling).
Подключение пинов Arduino напрямую к VCC
В примерах пин Arduino подключён к кнопке и также подключён к GND через резистор 10 кОм. Это означает, что пин подтянут к низкому уровню, и при чтении с помощью digitalRead() будет показывать LOW.
Другая сторона кнопки подключена непосредственно к VCC (в данном случае +5V), и когда кнопка замкнута, VCC перевешивает резистор 10 кОм на GND и подключает пин Arduino напрямую к VCC, делая пин HIGH.
Обычно подключение пина Arduino напрямую к 5V может быть плохой идеей, но мы можем сделать это здесь, потому что пин установлен в INPUT, и когда цифровые пины Arduino установлены для INPUT, они имеют очень высокое сопротивление, аналогичное резистору 100 МОм перед пином. Это означает, что мы можем безопасно подключить пин напрямую к 5V. Для получения дополнительной информации об этом смотрите www.arduino.cc/en/Tutorial/DigitalPins.
Эту конфигурацию можно считать любительской, и вы можете создать аналогичную схему без резистора 10k, используя внутренний резистор PULLUP Arduino, однако это инвертирует логику состояний кнопки: HIGH при разомкнутой кнопке, LOW при замкнутой. Я оставляю это вам для изучения и реализации; хорошее место для начала — Digital Pins на сайте Arduino.