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

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 раз в секунду.
Это пример простейшей программы. Она состоит из трех частей:

  1. Объявление глобальных переменных
  2. Процедура настройки. Эта подпрограмма выполняется однократно при старте контроллера. В ней необходимо сконфигурировать основные параметры контроллера.
  3. Основной цикл. Пока контроллер включен – он будет выполнять циклически все, что написано в этой части программы.

В программе используется три функции:

  1. pinMode() – имеет синтаксис: pinMode(pin,mode). Предназначена для настройки режима работы вывода как выхода, или входа. Функция имеет два параметра pin (номер вывода) и mode (режим работы вывода). Выводов, которые могут быть настроены на выход у EduBoard 20, следовательно, параметр pin может принимать значения от 0 до 19. Параметр mode может принимать следующие значения: INPUT – конфигурирует цифровой вывод, как вход без подтяжки, OUTPUT – настройка вывода на выход, INPUT_PULLUP – вход с подтяжкой
  2. digitalWrite() – синтаксис: digitalWrite(pin,value). Если вывод настроен на выход эта функция позволяет выставить на выводе напряжение высокого или низкого уровня. Параметр pin такой же, как в предыдущей функции. Параметр value может иметь значение LOW или HIGH. Значение LOW приводит к тому, что на выводе формируется низкое напряжение, близкое к 0В. Значение HIGH выставляет на выводе напряжение питания, то есть 5В при питании от USB-порта.
  3. 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);}
}

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

Попробуйте самостоятельно выполнить следующие задания:

  1. Используя светодиоды, подключенные к выводам 0, 1 и 2 напишите программу, имитирующую работу светофора. Сначала долго горит красный, затем на короткий промежуток времени одновременно с ним включается желтый, после чего красный и желтый гаснут и загорается зеленый. Зеленый горит достаточно долго, затем мигает три раза, гаснет, загорается желтый, гаснет желтый, загорается красный. Все длинные интервалы – 5с, все короткие – 0,5с.
  2. Запустите волну по линейке светодиодов так, чтобы одновременно только 4 светодиода. То есть, как только загорается 4-ый, то 0-ой гаснет, когда загорается 5-ый – гаснет 1-ый и так далее.

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

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

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