CUSTOMELECTRONICS.RU
Информационно-учебный блог о разработке электроники
Эл. почта: info@customelectronics.ru

Arduino. Настройка выводов на вход

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

Подготовка к работе

На нашем TutorShield установлены две кнопки. При установке перемычек можно подключить их к выводам D2 и D3. Также установим оду перемычку для управления трехцветным светодиодом:
Jumpers
Для работы выводы в качестве входа необходимо, чтобы он был заранее подтянут к какому-либо напряжению (высокому или низкому). На нашем шилде вход подтянуты к высокому уровню напряжения, а при нажатии на кнопку вывод подключается к земле.
Schematic
Также кнопки могут быть подключены к АЦП, поэтому нужно установить три перемычки. Две для подключения к цифровым входам и одну для того, чтобы закоротить ненужный верхний резистор в сборке. Использование АЦП для обработки кнопок мы рассмотрим в другой части курса.

Считывания состояния входа

Выводы нужно отдельно настраивать на вход. Для этого в качестве одного из параметров функции 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() практически заканчиваются. Используя ее очень сложно отследить сам момент нажатия кнопки или измерить длину импульса на входе. Гораздо чаще ее применяют для обработки кнопок с фиксацией, состояние которых можно проверять относительно редко.

Индивидуальные задания

  1. Сделайте так, чтобы кнопка, подключенная к выводу D2 меняла яркость свечения зеленого светодиода между значениями "50" и "250"
  2. Напишите программу, которая будет передавать состояния кнопок компьютеру. Например, при отправке плате "1" будет в ответ присылать текущее состояние кнопки BUTTON1, а при отправке "0" — BUTTON2

Остальные статьи цикла можно найти здесь.

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Метки: , , , , , , , Просмотров: 4354