Arduino. Настройка выводов на вход
Любой вывод микроконтроллера может считывать логические уровни напряжения на входе, что позволяет ему принимать сигналы из внешнего мира. Это позволяет подключить к нему, например, кнопки.
Подготовка к работе
На нашем TutorShield установлены две кнопки. При установке перемычек можно подключить их к выводам D2 и D3. Также установим оду перемычку для управления трехцветным светодиодом:
Для работы выводы в качестве входа необходимо, чтобы он был заранее подтянут к какому-либо напряжению (высокому или низкому). На нашем шилде вход подтянуты к высокому уровню напряжения, а при нажатии на кнопку вывод подключается к земле.
Также кнопки могут быть подключены к АЦП, поэтому нужно установить три перемычки. Две для подключения к цифровым входам и одну для того, чтобы закоротить ненужный верхний резистор в сборке. Использование АЦП для обработки кнопок мы рассмотрим в другой части курса.
Считывания состояния входа
Выводы нужно отдельно настраивать на вход. Для этого в качестве одного из параметров функции pinMode нужно указать INPUT.
Считывание состояние вывода происходит при помощи функции digitalRead(n), где n — номер вывода. Эта функция возвращает значение LOW и HIGH. Для примера запустите следующую программу:
#define BLUE 9 #define ORANGE 10 #define GREEN 11 #define BUTTON1 2 #define BUTTON2 3 void setup() { pinMode(BLUE,OUTPUT); pinMode(BUTTON2,INPUT); } void loop() { digitalWrite(BLUE,digitalRead(BUTTON2)); }
В дефайнах заранее объявлены все выводы, которые нам понадобятся для работы. Для первого примера, в функции setup() настроен на вход 3й вывод и на выход 9й вывод. В основной части программы всего одна команда. Она считывает состояние входа и дублирует его на выходе. Когда кнопка не нажата, то на входе высокое напряжение и светодиод горит. При нажатии кнопки на вывод подается низкое напряжение и светодиод выключается.
Выполнение действия
Способы обработки кнопок достаточно скудны, если пользоваться только функцией digitalRead(). Вот пример программы которая, пока нажата кнопка мигает светодиодом:
#define BLUE 9 #define ORANGE 10 #define GREEN 11 #define BUTTON1 2 #define BUTTON2 3 void setup() { pinMode(BLUE,OUTPUT); pinMode(BUTTON2,INPUT); } void loop() { if (digitalRead(BUTTON2)==LOW) { digitalWrite(BLUE,HIGH); delay(100); digitalWrite(BLUE,LOW); delay(100); } digitalWrite(BLUE,LOW); }
Работа с двумя кнопками
Теперь для примера напишем программу, которая будет включать сразу два светодиода:
#define BLUE 9 #define ORANGE 10 #define GREEN 11 #define BUTTON1 2 #define BUTTON2 3 void setup() { pinMode(BLUE,OUTPUT); pinMode(ORANGE,OUTPUT); pinMode(BUTTON1,INPUT); pinMode(BUTTON2,INPUT); } void loop() { if (digitalRead(BUTTON1)==LOW) { digitalWrite(BLUE,HIGH); } else digitalWrite(BLUE,LOW); if (digitalRead(BUTTON2)==LOW) { digitalWrite(ORANGE,HIGH); } else digitalWrite(ORANGE,LOW); }
На этом возможности функции digitalRead() практически заканчиваются. Используя ее очень сложно отследить сам момент нажатия кнопки или измерить длину импульса на входе. Гораздо чаще ее применяют для обработки кнопок с фиксацией, состояние которых можно проверять относительно редко.
Индивидуальные задания
- Сделайте так, чтобы кнопка, подключенная к выводу D2 меняла яркость свечения зеленого светодиода между значениями "50" и "250"
- Напишите программу, которая будет передавать состояния кнопок компьютеру. Например, при отправке плате "1" будет в ответ присылать текущее состояние кнопки BUTTON1, а при отправке "0" — BUTTON2
Остальные статьи цикла можно найти здесь.
Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.
Метки: Arduino, digitalRead, вход, кнопки, курс, настройка, обучение, программирование Просмотров: 6649