Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/ForLoop

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Цикл For (или «Рыцарь дорог») [1]

Зачастую в процессе работы требуется как бы перебрать контакты один за другим. Например, как в этом примере, где друг за другом загораются шесть светодиодов, подключенных к Arduino – со 2-ого по 7-ой. На программном уровне это выполняется при помощи цикла for(), благодаря которому контакты будут перебираться в одну строну, но и в другую. Светодиоды, в свою очередь, будут включатся и выключаться, что будет происходить благодаря функциям digitalWrite() и delay().

Мы называем этот пример «Рыцарем дорог» в честь телевизионного сериала 80-ых, где у героя Дэвида Хассельхофа был автомобиль с искусственным разумом по имени Китт. Причем у этой машины было множество светодиодных огоньков, которые сверкали самыми разными эффектами. В частности, в передней части капота у него была полоска с огнями, которые загорались и гасли один за другим, создавая такое впечатление, будто сигнал перемещается то влево, то вправо. В данном примере мы попробуем воссоздать этот самый эффект.

Необходимое оборудование

  • Плата Arduino;
  • Шесть 220-омовых резисторов;
  • Шесть светодиодов;
  • Провода-перемычки;
  • Макетная плата Breadboard;

Цепь

Последовательно подсоедините к Arduino (со 2-ого по 7-ой контакты) шесть светодиодов, но не напрямую, а через 220 Ом резисторы.

ForLoop bb.png

Схема

ForLoop2 schem.png

Код

Код ниже начинается с использования цикла for(), чтобы сделать шесть цифровых контактов (со 2-ого по 7-ой) выходными контактами для шести подключенных к ним светодиодов. В главной части кода используется уже два цикла for() – чтобы программа двигалась «шагами», переходя от одного светодиода к другому, т.е. от 2-ого к 7-ому. При достижении 7-ого светодиода процесс инвертируется, т.е. перебор продолжается, но уже в обратном направлении – от 7-ого светодиода ко 2-ому.

  1. /*
  2.   Повторение цикла For
  3.  
  4.  Демонстрирует использование цикла for().
  5.  Последовательно включает/выключает несколько светодиодов –
  6.  то в одну, то в другую сторону.
  7.  
  8.  Цепь:
  9.  * Шесть светодиодов, заземленных и подключенных к шести контактам –
  10.  со 2-ого по 7-ой
  11.  
  12.  Создан в 2006 Дэвидом А. Меллисом (David A. Mellis),
  13.  модифицирован 30 августа 2011 Томом Иго (Tom Igoe).
  14.  
  15.  Этот код не защищен авторским правом.
  16.  
  17.  http://www.arduino.cc/en/Tutorial/ForLoop
  18.  */
  19.  
  20. int timer = 100;           // чем выше это число,
  21.  тем медленнее будут «бегать» огоньки.
  22.  
  23. void setup() {
  24.   // используем цикл for, чтобы сделать все контакты выходными:
  25.   for (int thisPin = 2; thisPin < 8; thisPin++)  {
  26.     pinMode(thisPin, OUTPUT);      
  27.   }
  28. }
  29.  
  30. void loop() {
  31.   // перебираем номера контактов – от самого «низкого» (т.е. от 2-ого)
  32.        // к самому «высокому» (т.е. к 7-ому):
  33.   for (int thisPin = 2; thisPin < 8; thisPin++) {
  34.     // включаем контакт:
  35.     digitalWrite(thisPin, HIGH);  
  36.     delay(timer);                  
  37.     // выключаем контакт:
  38.     digitalWrite(thisPin, LOW);    
  39.   }
  40.  
  41.   // перебираем номера контактов – от самого «высокого» (т.е. от 7-ого)
  42.        // к самому «низкому» (т.е. ко 2-ому):
  43.   for (int thisPin = 7; thisPin >= 2; thisPin--) {
  44.     // включаем контакт:
  45.     digitalWrite(thisPin, HIGH);
  46.     delay(timer);
  47.     // выключаем контакт:
  48.     digitalWrite(thisPin, LOW);
  49.   }
  50. }

См.также

  1. for()
  2. digitalWrite()
  3. delay()
  4. WhileLoop
  5. SwitchCase
  6. Array

Внешние ссылки

  1. Arduino - For Loop (aka The Knight Rider)