Продолжаем цикл уроков arduino для начинающих. В этой инструкции мы сделаем красный псевдо-сканер, собранный на красных светодиодах. Этот легкий урок поможет познакомиться с оператором for(), одним из важных в программировании микроконтроллеров, так как позволяет работать с массивами данных.
Структура оператора for()
Оператор for() предназначен для повторения блока операторов, заключенных в фигурные скобки. Вначале, один раз, происходит инициализация (initialization), затем проверяется условие (condition) и пока оно не станет ложным, циклично выполняется параметр (increment). После чего, цикл заканчивается и продолжается выполнение следующего участка кода.
1
2
3
|
for (initialization; condition; increment) {
//блок операторов который будет выполняться;
}
|
Пример кода
В этом примере светодиод будет плавно увеличивать яркость с каждым циклом, пока количество итераций не достигнет 255, а значит он увеличит яркость 255 раз.
1
2
3
4
5
6
7
|
void loop()
{
for (int i=0; i <= 255; i++){
analogWrite(LedPin, i);
delay(10);
}
}
|
Урок: красный сканер на Arduino
На официальном сайте этот Arduino урок прозвали «Рыцарь дорог», в честь одноименного телесериала 80-х годов. У главного героя был навороченный супер-автомобиль КИТТ — Pontiac Firebird Trans Am с искусственным интеллектом, на капоте которого находился красный сканер.
Эффект сканирования достигался поочередным включением красных лампочек. Такая модификация стала популярной среди фанатов телесериала. Вот и мы соберем псевдо-сканер при помощи Arduino.
В качестве примера подключим к пинам 2-7, платы Arduino UNO, шесть светодиодов и заставим загораться слева на право и наоборот. При подключении светодиодов не забываем про резисторы 220Ом. Для того, чтобы светодиоды поочередно загорались, а затем гасли, нам бы пришлось написать очень объемный код. Но при помощи оператора for() его можно значительно сократить и это будет правильно.
Макет урока
Принципиальная схема
Скетч урока
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
/*
Демонстрирует работу оператора for().
Переключает поочередно светодиоды.
void setup() {
// первый раз используем оператор for() для того, чтобы определить какой светодиод горит после последнего запуска кода:
for (int LedPin = 2; LedPin < 8; LedPin++) {
pinMode(LedPin, OUTPUT);
}
}
void loop() {
// оператор for() переключает светодиоды от 2 к 7 пину:
for (int LedPin = 2; LedPin < 8; LedPin++) {
// подает 5В на включенный пин:
digitalWrite(LedPin, HIGH);
// задержка:
delay(100);
// подает 0В:
digitalWrite(LedPin, LOW);
}
// оператор for() переключает светодиоды от 7 к 2 пину:
for (int LedPin = 7; LedPin >= 2; LedPin--) {
// подает 5В на включенный пин:
digitalWrite(LedPin, HIGH);
// задержка:
delay(100);
// подает 0В:
digitalWrite(LedPin, LOW);
}
}
|
В первом операторе будут включаться выводы в сторону увеличения, так как в параметре указан инкремент (LedPin++), пока условие (LedPin < 8) не станет ложным. То-есть микроконтроллер будет переключаться от 2-го к 7-му пину.
После того как первый оператор завершиться, запуститься второй. Он будет переключать светодиоды в обратном порядке, так как у нас в параметре уже декремент (LedPin—), а условие (LedPin >= 2) означает, что необходимо дойти до второго вывода.
Затем цикл программы начинается заново.
Другие уроки для начинающих:
- Подключение Arduino к компьютеру — настройка ПО и знакомство с платформой
- Arduino для начинающих: Урок № 1 — структура кода и первый рабочий макет
Ниже приведены математические операции, которые могут применяться при программировании микроконтроллеров.