Arduino. Управление цифровыми выходами
Управление выводом микроконтроллера — первый шаг, который позволит зажигать светодиоды, открывать транзисторы, передавать сигнал и т.д. В этой статье мы рассмотрим примеры программ, работающих с цифровыми выходами.
Подготовка к работе
Как уже говорилось выше, все наши примеры описаны и проверены для наших плат EduBoard и TutorShield.
Плата EduBoard имеет 20 выводов, которые можно использовать как цифровые выходы. Максимальный ток каждого вывода – 20мА. Tutor Shield позволяет к каждому из этих выводов подключить по одному светодиоду.
Умение программировать алгоритмы зажигания светодиодов может понадобится, например, для создания оригинальных подсветок в декоративных целях. В данном случае светодиод применяется лишь как пример исполнительного устройства. Микроконтроллер может управлять транзистором, оптопарой, реле и т.д.
Перед началом работы установите на шилде 20 перемычек между выводами, выделенными на рисунке:
Первый пример
Теперь разберем пример, который мы использовали для проверки готовности платы к работе:
int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(100); }
Запустите Arduino IDE, введите этот код и загрузите его.
После завершения загрузки вы увидите, что светодиод, подключенный к 13-му выводу, начнет мигать с частотой 5 раз в секунду.
Это пример простейшей программы. Она состоит из трех частей:
- Объявление глобальных переменных
- Процедура настройки. Эта подпрограмма выполняется однократно при старте контроллера. В ней необходимо сконфигурировать основные параметры контроллера.
- Основной цикл. Пока контроллер включен – он будет выполнять циклически все, что написано в этой части программы.
В программе используется три функции:
- pinMode() – имеет синтаксис: pinMode(pin,mode). Предназначена для настройки режима работы вывода как выхода, или входа. Функция имеет два параметра pin (номер вывода) и mode (режим работы вывода). Выводов, которые могут быть настроены на выход у EduBoard 20, следовательно, параметр pin может принимать значения от 0 до 19. Параметр mode может принимать следующие значения: INPUT – конфигурирует цифровой вывод, как вход без подтяжки, OUTPUT – настройка вывода на выход, INPUT_PULLUP – вход с подтяжкой
- digitalWrite() – синтаксис: digitalWrite(pin,value). Если вывод настроен на выход эта функция позволяет выставить на выводе напряжение высокого или низкого уровня. Параметр pin такой же, как в предыдущей функции. Параметр value может иметь значение LOW или HIGH. Значение LOW приводит к тому, что на выводе формируется низкое напряжение, близкое к 0В. Значение HIGH выставляет на выводе напряжение питания, то есть 5В при питании от USB-порта.
- delay() – синтаксис: delay(ms). Функция вызывает задержку в программе. Единственный параметр задает время задержки в миллисекундах.
В предложенном примере сначала 13-й вывод настраивается на выход. Затем циклически происходит включение светодиода высоким уровнем напряжения, задержка на 100мс, выключение светодиода, задержка на 100мс.
Попробуйте изменить значение переменной led и убедитесь, что светодиод начнет мигать на другом выводе. Также попробуйте изменить задержку и посмотреть, как будет меняться процесс мигания.
Второй пример
Теперь попробуйте ввести в окно редактора код, предложенный ниже:
int led1 = 13; int led2 = 12; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); delay(1000); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); delay(1000); }
Эта программа мигает уже двумя светодиодами.
Использование циклов
По такому принципу можно управлять любым количеством светодиодов, но код становится громоздким и сложным для чтения. Для улучшения качества кода имеет смысл применять циклические алгоритмы, например при помощи оператора for. Пример организации цикла for:
for (int x=0; x<100; x++) {println(x);}
Строчка int x=0 инициализирует переменную x и присваивает ей начальное значение 0. x<100 – условие выполнения очередной итерации. Если условие выполняется – будет выполнен вход в цикл, если нет – выполнение цикла прекратится. x++ — инкрементирует аргумент цикла (переменная x увеличивается после каждой итерации на 1). Рассмотрим применение цикла на примере следующего кода:
void setup() { for (int i=0; i<14; i++) { pinMode(i,OUTPUT);} } void loop() { for (int i=0; i<14; i++) { digitalWrite(i,HIGH); delay(50);} for (int i=0; i<14; i++) { digitalWrite(i,LOW); delay(50);} }
Результатом выполнения предложенного кода будет циклическое пробегание волны огней от 0-го до 13-го светодиода. Попробуйте запустить эту волну в обратную сторону.
Выводы A0-A5
Их также можно использовать как цифровые выходы. Причем можно обращаться к ним, используя синтакисис A0-A5, так и номера 14-20.
void setup() { for (int i=A0; i<A6; i++) { pinMode(i,OUTPUT);} } void loop() { for (int i=A0; i<A6; i++) { digitalWrite(i,HIGH); delay(50);} for (int i=A0; i<A6; i++) { digitalWrite(i,LOW); delay(50);} }
Заключение
И в заключение запустим бегущую волну по всей линейке светодиодов:
void setup() { for (int i=0; i<21; i++) { pinMode(i,OUTPUT);} } void loop() { for (int i=0; i<21; i++) { digitalWrite(i,HIGH); delay(50);} for (int i=0; i<21; i++) { digitalWrite(i,LOW); delay(50);} }
Индивидуальные задания
Попробуйте самостоятельно выполнить следующие задания:
- Используя светодиоды, подключенные к выводам 0, 1 и 2 напишите программу, имитирующую работу светофора. Сначала долго горит красный, затем на короткий промежуток времени одновременно с ним включается желтый, после чего красный и желтый гаснут и загорается зеленый. Зеленый горит достаточно долго, затем мигает три раза, гаснет, загорается желтый, гаснет желтый, загорается красный. Все длинные интервалы – 5с, все короткие – 0,5с.
- Запустите волну по линейке светодиодов так, чтобы одновременно только 4 светодиода. То есть, как только загорается 4-ый, то 0-ой гаснет, когда загорается 5-ый – гаснет 1-ый и так далее.
Остальные статьи цикла можно найти здесь.
Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.
Метки: Arduino, курс, программирование, цифровой выход Просмотров: 18763