Цифровые контакты могут функционировать в качестве входов или выходов. Мы можем использовать их для включения светодиода и посылания сигналов во внешний мир или для обнаружения нажатия на кнопку и получения информации. Перед использованием контакта мы должны задать тип поведения, который он будет принимать: будет ли это вход или выход.
Эту операцию необходимо выполнить один раз, когда плата активирована и ATmega328 начинает исполнять скетч. Чтобы использовать одиннадцатый контакт в качестве выходного, в блоке setup напишем:
void setup() {
pinMode(11, OUTPUT);
}
Чтобы использовать контакт в качестве входного, напишем:
void setup() {
pinMode(11, INPUT);
}
digitalWrite
Для задания уровня на цифровом выходе используется функция digitalWrite, она указывает на номер контакта и его нужное состояние: высокое или низкое. Для мигания светодиода, подключенного к контакту 11, скетч будет иметь следующий вид:
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(11, LOW);
delay(1000);
}
На макетную плату вставляем светодиод и резистор на 330 Ом, подключаем одиннадцатый контакт Arduino к аноду светодиода, а вывод резистора к контакту GND (Земля), как показано на следующем рисунке.
Рис. A3.
«Ардуино», подключенная к светодиоду на макетной платеОткрываем среду разработки «Ардуино» и создаем новый скетч с помощью меню File =› New (Файл
=› Новый). Откроется новое окно, в которое скопируем строки кода. Подключаем плату к компьютеру и проверяем в Tools =› Serial Port (Инструменты =› Порт), что последовательный порт виден и выбран.Нажимаем кнопку Verify (Проверить) (первая на панели инструментов) и ожидаем, пока скетч будет проверен и скомпилирован. Если нет ошибок, как правило, они видны в маленькой черной панели в нижней части окна, нажмите кнопку Upload (Загрузить) – вторая на панели инструментов – и ждите передачи скетча. Светодиоды на плате будут мигать в течение нескольких секунд, после чего светодиод на макетной плате должен начать мигать.
Проанализируем скетч. В разделе setup настроим контакт 11 в качестве цифрового выхода. Первая инструкция loop приведет контакт в высокое состояние, то есть 5 В. Контакт останется в высоком состоянии, пока кто-нибудь не изменит его состояние. Следующая инструкция delay(1000) активирует паузу на 1000 мс, то есть на одну секунду, после чего новая команда digitalWrite «выключит» контакт, приведет его в низкое состояние. Последняя команда, это еще одна пауза на одну секунду. Инструкции loop закончились, и теперь «Ардуино» снова начнет новый цикл, который повторит инструкции в loop.
Рис. А4.
Кнопки Verify (Проверить) и Upload (Загрузить)Инструкция digitalWrite используется для включения или выключения контактов «Ардуино». Инструкция digitalWrite требует два параметра: номер контакта и присвоенное ему состояние (которое может быть либо высоким, либо низким). Контакт, который используется в качестве цифрового выхода, может принимать только два значения, соответствующие «вкл» и «выкл», то есть 5 или 0 В. Цифровой контакт, сконфигурированный в качестве выхода, также подает ток на элемент, который мы к нему подключаем. Если запрос тока большой, контакт будет непоправимо поврежден. С Arduino, ограничение тока составляет несколько десятков миллиампер; по этой причине невозможно напрямую подключить реле или двигатель, которые требуют сотни миллиампер, вы должны использовать транзистор или МОП-транзистор для запуска.
digitalRead
Давайте теперь попробуем использовать контакт в качестве цифрового входа, для обнаружения нажатия на кнопку. Контакт, настроенный как цифровой вход, может обнаружить, является ли приложенное напряжение равным 0 или 5 В. Для проверки работы подключим макетную плату к Arduino. На макетную плату вставим кнопку и резистор на 10 кОм, который будет подключаться к контакту 10. Нам также потребуется резистор с сопротивлением на 470 Ом, который мы использовали в предыдущем эксперименте.
Рис. А5.
«Ардуино», подключенная к кнопке на контакте 10 и к светодиоду на контакте 11.Кнопка имеет два контакта: один из двух соединен с землей через резистор на 10 кОм, а также к контакту 10. Другой контакт подключен к источнику питания на 5 В. Таким образом, вход «Ардуино» стабильно подключен к 0 В через резистор. Ток не протекает, таким образом, контакт 10 находится в низком уровне. Когда мы нажимаем кнопку, то подключаем 5 В к сопротивлению, то есть к контакту 10. Если бы не было сопротивления, нажав на кнопку, мы бы непосредственно соединили 5 В с землей, создав короткое замыкание!
Скетч в этом случае немного сложнее:
void setup() {
pinMode(10, INPUT);
pinMode(11, OUTPUT);
}
void loop() {