НАШ МАГАЗИН - SHOP.MUSBENCH.COM
Карта Сайта

Урок 6. Бегущие Огни. Добавим светодиодов!

Учебный курс Ардуино


       
   
    
  
Теперь, когда вы знаете, как управлять одним светодиодом, давайте добавим еще несколько! Возьмите остальные красные светодиоды и резисторы 1K. Отключите ваш Arduino от USB / питания. Приучитесь всегда отключать питание перед тем, как вносить изменения в схему.
   

  
Давайте для начала задействуем вторую пару шин питания на макетной плате: Красной перемычной соедините красные (плюсовые) шины, а синей - синие (земляные) шины. теперь мы имеем удобный доступ к напряжению питания и к земле с другой стороны макекта. Согните выводы ваших резисторов под углом 90 градусов и обрежте концы примерно на 6 мм от изгиба.
  
  
    
   
В принципе, можно не подрезать ножки резисторов, но так будет аккуратнее и резисторы не будут загромождать ваш макет. Кроме того, уменьшается вероятность короткого замыкания на макетной плате.
  
  
   
   
Давайте добавим новые светодиоды, установив их на второй, почти неиспользованной половине макета. Начните с подключения резистора от земли (гнезда на синей линии) до ряда гнезд макета. Подключите красный светодиод к макету, соединив его более короткий (отрицательный) вывод к гнезду в том же ряду, что и резистор.
  
  
  
    
Добавьте оставшиеся резисторы и светодиоды таким же способом. Помните, что резисторы могут подключать в любой ориентации, но светодиоды имеют полярность и будут излучать свет только когда ток течет через них в одном конкретном направлении.
  
  
  
  
Переместите желтый провод от контакта 13 Arduino к контакту 7. Подключите другой желтый провод от контакта 6 Arduino к положительному выводу (аноду) следующего соседнего светодиода.
   
  
  
  
Подключите дополнительные желтые провода в соответствии с электрической схемой (контакты Arduino 3-5 к положительным выводам остальных светодиодов).
  
    
  
Посмотреть эту схему на Tinkercad
Здесь вы видите интегрированную симуляцию с сайта Autodesk Tinkercad. Она работает на моем сайте также, как если бы вы открыли ее на Tinkercad.
Для запуска симуляции нажмите кнопку "Start Simulation".  Программа подсвечивает один светодиод за раз, по порядку, вниз по линии и обратно. Чтобы посмотреть текст программы, нажмите кнопку  "Code". Для того, чтобы скачать текст программы (скетч) себе на компьютер, нажмите кнопку загрузки (значок стрелки вниз). Этот пример немного отличается от аналогичного примера, который поставляется с программным обеспечением Arduino, поэтому мы будем использовать эту загружаемую версию. Дважды щелкните файл "ForLoopIteration.ino", чтобы открыть его в оболочке Arduino.
  
  
Это приглашение разместить программу в ее собственной папке. Если вы увидите такое окно, нажмите в нем OK.

Вы можете не скачивать сектч, а просто скопировать его из модуля в  Если вы предпочитаете, вы также можете выбрать и скопировать код из модуля Tinkercad выше и вставить его в новый (пустой) файл Arduino (Файл -> Создать).
  
  
  
Подключите плату Arduino Uno к компьютеру и загрузите в нее код.  Давайте разберемся, как закодировать световую последовательность, более подробно рассмотрев элементы программы:

/*
  For Loop Iteration

Demonstrates the use of a for() loop.
Lights multiple LEDs in sequence, then in reverse.

The circuit:
* LEDs from pins 3 through 7 to ground

created 2006
by David A. Mellis
modified 30 Aug 2011
by Tom Igoe

This example code is in the public domain.

<a href="http://www.arduino.cc/en/Tutorial/ForLoop"> http://www.arduino.cc/en/Tutorial/ForLoop
</a>
*/

Эта первая часть - просто длинный комментарий. Вы уже знаете о комментариях в одной строке, и теперь вы знаете о многострочных комментариях, создаваемых  с помощью
/ * для начала и * / для конца блока комментария.

int timer = 200;           // The higher the number, the slower the timing.
Объявляется переменная timer. Это целое число, с именем timer, и эта строка устанавливает это число равным 200. Как вы могли заметить, большинство строк программ Arduino заканчиваются точкой с запятой. При написании и изменении собственных скетчей Arduino не забываете о точке с запятой, поскольку строка без такого знака вызовет ошибку компиляции.

void setup() {
  // use a for loop to initialize each pin as an output:
  for (int thisPin = 3; thisPin < 8; thisPin++) {
    pinMode(thisPin, OUTPUT);
  }
}

Процедура setup (Настройка) конфигурирует контакты  платы с 3 по 7 как выходы с использованием цикла for, который представляет собой специальный цикл, который несколько раз повторяет небольшую часть кода на основе условия, используя счетчик приращений. Условие проверяется каждый раз когда повторяется цикл. Цикл продолжит выполнения кода внутри него до тех пор, пока условие истинно. Изначально переменная thisPin установлена в 3, условие заключается в том, что этот номер Pin должен быть меньше 8, а счетчик приращений увеличивает это значение переменной Pin при каждом повторении цикла (thisPin ++ - это то же самое, что и thisPin = thisPin + 1). Итак, на первом прохождении уикла, контакт с номером 3 устанавливается в режим  выхода. Во второй проход уже контакт 4 конфигурируется на выход. И так далее, пока thisPin не станет равным 8, после чего условие thisPin < 8 станет ложным и код прекратит цикл, продолжая работу с остальной частью программы. Это может показаться слишком сложным способом сделать простую вещь, но программисты любят эффективность! Вы можете так же легко выполнить конфигурацию контактов следующим образом, так сказать "в лоб":

void setup() {
  // initialize each pin as an output:
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
}

Вы можете заметить, что, как правило, при программировании для Arduino одну и ту же задачу можно решить разными способами. Кодирование похоже на создание вещей в вашей мастерской: вы, как правило, используете любые инструменты, которые у вас есть. Поэтому давайте использовать цикл
for для чего-то веселого ... анимации!

void loop() {
 
  // loop from the lowest pin to the highest:
  for (int thisPin = 3; thisPin <  8; thisPin++) {
    // turn the pin on:
    digitalWrite(thisPin, HIGH);
    delay(timer);
    // turn the pin off:
    digitalWrite(thisPin, LOW);
  }

Цикл начинается с того же самого оператора, что и раньше, при увеличении от меньшего числа до большего. Внутри цикла
for код включает светодиод на контакте Pin, останавливается на 200 мс (Мы ч вами ранее присвоили это число переменной  timer), затем код выключает этот светодиод. Далее цикл повторяется, но уже со следующим светодиодом

// loop from the highest pin to the lowest:
  for (int thisPin = 7; thisPin >= 3; thisPin--) {
    // turn the pin on:
    digitalWrite(thisPin, HIGH);
    delay(timer);
    // turn the pin off:
    digitalWrite(thisPin, LOW);
  }
}

Следующая часть кода - еще один цикл, но он начинается с контакта платы с наибольшим номером и использует
thisPin-- (так называемый Декримент, уменьшение на единицу), что равносильно выражению thisPin = thisPin-1. Можно писать и так, и так, но thisPin-- короче и эффективнее. Программа выходит из этого цикла когда thisPin становится меньше 3 (условие > = 3, больше или равно трем, то есть 2). Конечная закрывающая фигурная скобка закрывает основной (главный, большой) цикл. Таким образом, эта программа подсвечивает каждый светодиод по порядку, затем изменяет порядок на противоположный и снова зажигает светодиоды.


Следующий урок >>