Arduino:Примеры/ForLoop: различия между версиями

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


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
   Повторение цикла For
   Повторение цикла For

Текущая версия от 12:32, 20 мая 2023

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


Цикл 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);
  }
}

См.также

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

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