Arduino:Примеры/Array

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Массив [1]

Это вариация примера «Цикл For», которая показывает пример использования массива. Массив – это переменная, содержащая сразу несколько значений. То есть, если представить переменную в виде чашки (в которой вместо кофе – определенное значение), то массив – это своего рода лоток для кубиков льда. Он как несколько чашек, каждая из которых может содержать значение определенного объема. Пример «Цикл For» демонстрирует, как включать/выключать группу светодиодов, подсоединенных к шести контактам Arduino (со 2-ого по 7-ой), но у него есть некоторые ограничения. Во-первых, номера контактов должны «соседствовать» друг с другом (т.е. 2-ой с 3-им, 3-ий с 4-ым и т.д.), а во-вторых, светодиоды могут включаться/выключаться только последовательно, т.е. друг за другом. Этот пример показывает, как включать светодиоды, не оглядываясь ни на «соседство», ни на последовательность. Для этого номера контактов нужно уместить в массив, а затем воспользоваться циклом for(), который будет «шерстить» этот массив. В этом примере используется шесть светодиодов, подключенных к шести цифровым контактам Arduino (со 2-ого по 7-ой) через 220-омовые резисторы – как и в примере «Цикл For». Тем не менее, порядок активации/деактивации светодиодов определяется не физическим порядком, а порядком номеров, расположенных в массиве. Этот метод очень удобен. Вам уже не обязательно, чтобы контакты были расположены один за другим. Вы в любое время можете зайти в программу и переставить их как захотите.

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

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

Цепь

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

ForLoop bb.png

Схема

ForLoop2 schem.png

Код

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

См.также

  1. pinMode()
  2. digitalWrite()
  3. for()
  4. delay()
  5. For Loop
  6. While Loop
  7. Switch Case

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