Arduino:Примеры/ForLoop
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Цикл For (или «Рыцарь дорог») [1]
Зачастую в процессе работы требуется как бы перебрать контакты один за другим. Например, как в этом примере, где друг за другом загораются шесть светодиодов, подключенных к Arduino – со 2-ого по 7-ой. На программном уровне это выполняется при помощи цикла for(), благодаря которому контакты будут перебираться в одну строну, но и в другую. Светодиоды, в свою очередь, будут включатся и выключаться, что будет происходить благодаря функциям digitalWrite() и delay().
Мы называем этот пример «Рыцарем дорог» в честь телевизионного сериала 80-ых, где у героя Дэвида Хассельхофа был автомобиль с искусственным разумом по имени Китт. Причем у этой машины было множество светодиодных огоньков, которые сверкали самыми разными эффектами. В частности, в передней части капота у него была полоска с огнями, которые загорались и гасли один за другим, создавая такое впечатление, будто сигнал перемещается то влево, то вправо. В данном примере мы попробуем воссоздать этот самый эффект.
Необходимое оборудование
- Плата Arduino;
- Шесть 220-омовых резисторов;
- Шесть светодиодов;
- Провода-перемычки;
- Макетная плата Breadboard;
Цепь
Последовательно подсоедините к Arduino (со 2-ого по 7-ой контакты) шесть светодиодов, но не напрямую, а через 220 Ом резисторы.
Схема
Код
Код ниже начинается с использования цикла for(), чтобы сделать шесть цифровых контактов (со 2-ого по 7-ой) выходными контактами для шести подключенных к ним светодиодов. В главной части кода используется уже два цикла for() – чтобы программа двигалась «шагами», переходя от одного светодиода к другому, т.е. от 2-ого к 7-ому. При достижении 7-ого светодиода процесс инвертируется, т.е. перебор продолжается, но уже в обратном направлении – от 7-ого светодиода ко 2-ому.
/*
Повторение цикла For
Демонстрирует использование цикла for().
Последовательно включает/выключает несколько светодиодов –
то в одну, то в другую сторону.
Цепь:
* Шесть светодиодов, заземленных и подключенных к шести контактам –
со 2-ого по 7-ой
Создан в 2006 Дэвидом А. Меллисом (David A. Mellis),
модифицирован 30 августа 2011 Томом Иго (Tom Igoe).
Этот код не защищен авторским правом.
http://www.arduino.cc/en/Tutorial/ForLoop
*/
int timer = 100; // чем выше это число,
тем медленнее будут «бегать» огоньки.
void setup() {
// используем цикл for, чтобы сделать все контакты выходными:
for (int thisPin = 2; thisPin < 8; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// перебираем номера контактов – от самого «низкого» (т.е. от 2-ого)
// к самому «высокому» (т.е. к 7-ому):
for (int thisPin = 2; thisPin < 8; thisPin++) {
// включаем контакт:
digitalWrite(thisPin, HIGH);
delay(timer);
// выключаем контакт:
digitalWrite(thisPin, LOW);
}
// перебираем номера контактов – от самого «высокого» (т.е. от 7-ого)
// к самому «низкому» (т.е. ко 2-ому):
for (int thisPin = 7; thisPin >= 2; thisPin--) {
// включаем контакт:
digitalWrite(thisPin, HIGH);
delay(timer);
// выключаем контакт:
digitalWrite(thisPin, LOW);
}
}
См.также
- for()
- digitalWrite()
- delay()
- WhileLoop
- SwitchCase
- Array