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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
Строка 31: Строка 31:
==Код==
==Код==


<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">
/*
/*
   Массивы
   Массивы

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

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


Массив [1]

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

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

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

Цепь

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

Схема

Код

/*
  Массивы
 
Демонстрирует использование массива, который содержит несколько
номеров контактов, расположенных в определенном порядке. 
Программа последовательно перебирает эти номера, опираясь   именно на этот порядок.
В итоге светодиоды загораются один за другим, а затем в обратном порядке.
 
В отличие от примера «Цикл For», где контактам нужно обязательно 
находиться рядом друг с другом, 
здесь контакты могут быть расположены в каком угодно порядке.

Цепь:

 * Шесть светодиодов, заземленных и подключенных 
   к шести контактам Arduino – со 2-ого по 7-ой
 
Создан в 2006 Дэвидом А. Меллисом (David A. Mellis),
модифицирован 30 августа 2011 Томом Иго (Tom Igoe). 

Этот пример не защищен авторским правом.
 
http://www.arduino.cc/en/Tutorial/Array
 */

int timer = 100;       // Чем выше это число, 
    				  // тем медленнее будут «бегать» огоньки.
int ledPins[] = {      // Массив с определенным порядком номеров
  2, 7, 4, 6, 5, 3 };  // контактов, к которым подсоединены светодиоды.
       			 
int pinCount = 6;      // Количество контактов (т.е. длина массива).

void setup() {
  // Элементы массива, пронумерованные от 0 до (pinCount - 1).
  // Используем цикл for, чтобы сделать все контакты выходными:
  for (int thisPin = 0; thisPin < pinCount; thisPin++)  {
    pinMode(ledPins[thisPin], OUTPUT);      
  }
}

void loop() {
  // перебираем номера контактов в массиве – от первого к последнему:
  for (int thisPin = 0; thisPin < pinCount; thisPin++) { 
    // включаем контакт:
    digitalWrite(ledPins[thisPin], HIGH);   
    delay(timer);                  
    // выключаем контакт:
    digitalWrite(ledPins[thisPin], LOW);    

  }

  // перебираем номера контактов в массиве – от последнего к первому:
  for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { 
    // включаем контакт:
    digitalWrite(ledPins[thisPin], HIGH);
    delay(timer);
    // выключаем контакт:
    digitalWrite(ledPins[thisPin], LOW);
  }
}

См.также

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

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