Arduino Учебный курс


Урок 9. Ввод и Вывод

Arduino Учебный курс

До сих пор вы учились управлять светодиодами с помощью кода, который управлял одним из выходов платы Arduino. В этом уроке мы будем осваивать взаимодействие со входами. Ваша плата Arduino может быть запрограммирована на опрос электрических сигналов, поступающих на ее входа. Мы попробуем реализовать входную цепь , которая сможет работать как с логическими сигналами (переключатель) так и различать аналоговые входные сигналы (с потенциометром или переменным резистором).

Arduino Учебный курс

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

Переменный резистор представляет собой компонент с изменяемым электрическим сопротивлением. В дополнение к потенциометру (с ручкой), используемому в этом уроке, вы можете найти и другие устройства, работа которых основана на изменяемом сопротивлении: датчики давления (силовой чувствительный резистор также известный как FSR), резисторы, зависящие от силы света (LDR или фоторезистор) и аналоговые датчики температуры.

Что потребуется для этого урока:

Часть 1. Цифровой вход

Arduino Учебный курс

Давайте подготовиться к составлению новой схемы. Возьмите несколько проводов — перемычек для макетной платы, красный светодиод, резистор 1K (код: коричневый-черный-красный-золотой), резистор 10K (код: коричнево-черно-оранжевое золото) и небольшую кнопку из вашего комплекта. Отформуйте выводы вашему 10K резистору также, как вы это делали в предыдущих уроках.

Arduino Учебный курс

Во-первых, подключите светодиод к контакту 13 Arduino, как и в первой схеме, с проводом от контакта 13 платы до положительного вывода вашего светодиода и соедините резистора 1K, с отрицательным выводом светодиода и с землей.

Arduino Учебный курс

Затем подключите кнопку как на фото, чтобы она опиралась на разделительную линию центра вашего макета. Подключите резистор 10K от одного из выводов кнопки на шину питания 5В. Подключите провод к этому же ряду и подсоедините его к контакту 2 Arduino.

Arduino Учебный курс

Другой вывод кнопки соедините с землёй.

Ссылка на эту симуляцию на Autodesk Tinkercad

Нажмите «Начать симуляцию» в модуле Tinkercad Circuits и попробуйте нажать (и удерживать) кнопку, чтобы увидеть, что делает код. Нажмите кнопку «Код», чтобы просмотреть текст программы.

Arduino Учебный курс

Этот пример можно найти в программном обеспечении Arduino, перейдя в меню Файл -> Примеры -> 02.Digital -> Button. Откройте его на своем компьютере и загрузите в плату Arduino Uno. Светодиод должен загораться, но при каждом нажатии кнопки выключаться.

Arduino Учебный курс

Дальше мы рассмотрим код программы более подробно

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
 // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
  // turn LED on:
  digitalWrite(ledPin, HIGH);
} else {
  // turn LED off:
  digitalWrite(ledPin, LOW);

Первые строки этой программы объявляют константы, которые напоминают переменные в том смысле, что они хранят часть информации. Однако, как вы можете догадаться, константы не меняются во время работы программы, и поэтому отлично подходят для обозначения номеров контактов. Они занимают меньше места в памяти, чем переменные. Вывод 2 Arduino сконфигурирован в качестве входа, поэтому мы можем «прослушивать» электрическое состояние кнопки, подключенной к нему.

В основном цикле функция digitalRead (); проверяет состояние вывода 2 (на котором будет либо 5 В, то есть ВЫСОКОЕ, либо «земля», то есть НИЗКОЕ), и сохраняет это состояние в переменной с именем buttonState.

if (buttonState == HIGH) содержит оператор if, который проверяет, имеет ли buttonState значение HIGH (== это оператор сравнения, его не следует путать с =, который является оператором присваивания). Если условие выполнено, выполняется команда digitalWrite (ledPin, HIGH); Если нет, вместо этого выполняется код, содержащийся в else {: digitalWrite (ledPin, LOW) ;

Возможно вы заметили, что ваша кнопочная схема выполняет действие, противоположное описанному в коде? Я сделал это специально, чтобы напрячь ваши умственные мышцы. Давайте еще немного поговорим об этой схеме. В состоянии покоя провода переключателя не связаны друг с другом. Контакт 2 подключен через резистор 10K к шине 5В. Когда кнопка нажата, контакты замыкаются, что соединяет контакт 2 с землей напрямую, без резистора. Поскольку электрический ток идет по пути наименьшего сопротивления, вывод микроконтроллера будет преимущественно «ощущать» соединение с землей и проигнорирует слабое (через резистор 10К) соединение к шине 5В. Но когда нет никакого другого сигнала (когда кнопка не нажата), это слабое соединение с шиной 5 В — это все, что может почувствовать порт контроллера. Таким образом, говорят что резистор «подтягивает контакт» к 5 В, и поэтому он называется подтягивающим резистором. Без него контакт 2 не был бы подключен ни к чему, пока кнопка не будет нажата. Это называется «плавающим» потенциалом и может привести к случайному шуму от статического электричества и электромагнитных помех. Точно так же резистор может использоваться, чтобы связать штырь с землей, тогда этот резистор называется понижающим резистором.

Таким образом, чтобы изменить функцию кнопки, вы можете либо изменить схему подключения, либо изменить код. Последнее в данном случае менее трудоемко, но важно помнить, что это не всегда можно сделать. Например если вы не создаете проект самостоятельно и не имеете доступа к исходному ходу программы, то единственный вариант — это изменить подключение кнопки. Измените строки программы

if (buttonState == HIGH) {
  // turn LED on

так, чтобы изменилась логика работы кнопки (HIGH поменяйте на LOW)
Вот что должно у нас получиться:

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed.

  // if it is, the buttonState is LOW:
  if (buttonState == LOW) {
  // turn LED on:
  digitalWrite(ledPin, HIGH);
}
  else {
  / / turn LED off:
digitalWrite(ledPin, LOW);
  }
}

Загрузите обновленный скетч в плату Arduino Uno и убедитесь, что кнопка теперь включает светодиод, а не выключает.

Контроллер Arduino имеют встроенные подтягивающие резисторы на многих портах (внутри чипа), и вы можете получить к ним доступ, включив его в настройке:

pinMode (buttonPin, INPUT_PULLUP);

Измените эту строку кода в вашем эскизе и удалите резистор из вашей цепи.

Загрузить код; его поведение должно оставаться прежним.

Продолжение следует…

перевод с английского. Источник>>


1 comment

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *