Вторник, 12.12.2017, 11:28
RC - Мастерская
Главная | Каталог статей | Регистрация | Вход
Меню
Статистика
Главная » Статьи » Обмен опытом » Arduino для школьников

4. Цифровой ввод
Цифровой ввод


Ранее мы научились мигать светодиодом с заданной частотой. Теперь сделаем следующий шаг - научимся получать команды извне и в зависимости от них выполнять действия.
Простейшим устройством ввода информации является кнопка или переключатель. Суть устройства в механическом замыкании и размыкании пары контактов. Подключить кнопку к Arduino достаточно легко:

 

На схеме представлено два варианта подключения. В чем разница? - в нажатом состоянии кнопка S1 подает на вход микроконтроллера сигнал низкого уровня (логический "0"), а S2 - высокий (логическую "1").
В обоих случаях схема дополнена так называемыми подтягивающими сопротивлениями(резисторами). Зачем? - Если его не будет, в ненажатом состоянии кнопки вход микроконтроллера окажется ни к чему не подключенным и сигнал на нем будет "никаким". С другой стороны, если вместо резистора будет прямое соединение с GND или +5В, то при нажатии кнопки получим короткое замыкание и выход из строя источника питания. Чтобы этого не произошло в схему и включен резистор. Его номинал можно рассчитать по закону Ома. Обычно он составляет 10-100кОм.

Теперь разберем программную часть. Подключим кнопку к микроконтроллеру по левой схеме и заставим наш светодиод на 13 контакте гореть когда кнопка нажата и гаснуть при ее отпускании. Для этого напишем следующий код:

int led = 13;
int button = 2;

void setup() {               
  pinMode(led, OUTPUT);    
  pinMode(button, INPUT);
}

int val;

void loop() {
  val = digitalRead(button);
  digitalWrite(led, !val);
}

Кнопку подключим к контакту 2 микроконтроллера. Назначим его как вход - pinMode(button, INPUT).
В основном цикле читаем состояние входа button. Для этого используется функция digitalRead(pin). Полученное значение мы используем для включения светодиода. Надо только помнить, что по нашей схеме нажатому состоянию кнопки соответствует логический "0" на входе МК. При этом для включения светодиода на выход надо подать логическую "1".

Язык Си является математическим языком и легко может вычислять значения логических выражений. Для этого есть ряд простых правил и операторов. Логические выражения оперируют понятиями "истина" и "ложь". В языке Си для этого используются числа 1 и 0 соответственно. В Arduino IDE даже предусмотрен специальный тип данных для хранения логических значений boolean. Переменные этого типа могут принимать одно из двух значений: true (истина), false(ложь). Так же стоит иметь ввиду, что любое число можно привести к логическому типу. При этом будет работать правило: если число равно нулю, то значением будет ложь; в противном случае будет истина. Т.е. любое число отличное от нуля будет истиной.

Для вычисления логических выражений нам понадобятся следующие логические операторы:

 

 

  1. оператор сравнения "равно" - "=="
  2. оператор сравнения "не равно" - "!="
  3. оператор сравнения "больше" - ">"
  4. оператор сравнения "меньше" - "<"
  5. оператор сравнения "больше или равно" - ">="
  6. оператор сравнения "меньше или равно" - "<="
  7. оператор "логическое И" - "&&"
  8. оператор "логическое ИЛИ" - "||"
  9. оператор "логическое НЕ" - "!"

 

Как упоминалось выше, в нашей программе должна работать следующая логика:

  • если на входе "0", то на выходе "1"
  • если на входе "1", то на выходе "0"

Это соответствует логическому "НЕ". И для выполнения этой операции в вызове digitalWrite перед передаваемым значением стоит оператор "!".

На самом деле в записи digitalWrite(led, !val); скрыто выполнение двух действий:

  1. вычисление значения "НЕ val"
  2. запись полученного значения на выход МК

Язык Си позволяет делать и более сложные конструкции. Например, основной цикл нашей программы можно было бы записать в одну строку и обойтись без использования переменной val. Выглядело бы это так: 

void loop() {
  digitalWrite(led, !digitalRead(button));
}

Можно попробовать собрать на макетной плате обе схемы и увидеть отличия в их работе. Так же не сложно будет модифицировать нашу программу так, чтоб отличий в итоге не было.

Категория: Arduino для школьников | Добавил: Mactep (13.12.2013)
Просмотров: 925 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск