Массивы в Ардуино

Массивы в Ардуино

Массивы в Ардуино подобны переменным – они могут хранить показания датчиков, текстовые строки и логические значения, такие как high и low. Но переменная может хранить только одно значение за раз. Массивы, в свою очередь, могут хранить несколько значений одновременно. Если вы рассматриваете переменную как контейнер для хранения данных, массивы похожи на этот контейнер, но с разделителями, которые вы можете использовать для хранения нескольких частей данных.

Массивы особенно полезны для управления светодиодными матрицами, матричными клавиатурами и ЖК-дисплеями на Arduino.

Как работать с массивами в Ардуино

Например, код для массива выглядит так:

int array[5] = {3, 5, 2, 8, 9};

Создание массива называется инициализацией массива. В этом примере тип данных массива — целое число int, а имя массива — array[]. В то время, как число в квадратных скобках — это индекс массива. Индекс массива определяет количество элементов в массиве.

По сути говоря, элементы — это значения, которые вы хотите сохранить в массиве. В этом массиве есть пять элементов (3, 5, 2, 8 и 9), поэтому индекс массива равен 5. Элементы массива записываются в фигурные скобки и разделяются запятыми. Это называется списком инициализации массива.

Примите к вашему сведению, что массивы индексируются от нуля, что означает, что первому элементу присваивается нулевой индекс, второму элементу присваивается индекс один, третьему элементу присваивается индекс два и так далее:

Размер массива в ардуино
Пример как объявляется массив из 5-ти целочисленных элементов

Чтобы использовать элементы массива в скетче, напишите имя массива и поместите индекс элемента в квадратные скобки.

Например, предположим, что вы хотите вывести число восемь из приведенного выше массива в монитор порта. Элемент с номером восемь имеет индекс, равный трем, поэтому код будет выглядеть следующим образом:

Serial.print(array[3]);

Когда массив инициализируется следующим образом:

int array[5] = {3, 5, 2, 8, 9};

Мы объявляем размер массива и одновременно инициализируем элементы в массиве. Но массивы также могут быть объявлены без инициализации элементов. А уже позже элементы могут быть добавлены в массив в скетче.

В первую очередь объявите массив в верхней части скетча, написав имя массива и количество элементов массива в квадратных скобках:

int array[5];

Позже в скетче вы можете сохранить различные значения в массиве, установив массив равным элементу, который вы хотите сохранить в определенном индексе. Номер индекса заключен в квадратные скобки. Например, это присваивает число четыре индексу два массива array[]:

array[2] = 4;

Массивы также могут быть инициализированы без установки размера массива. Вместо того, чтобы заключать размер массива в квадратные скобки, как указано выше, вы можете оставить скобки пустыми, и размер массива будет определен автоматически:

int array[] = {3, 5, 2, 8, 9};

Типы данных массива

В массиве можно использовать любой тип данных. Можно использовать все типы данных float, String, byte и char. Но все элементы в массиве должны иметь один и тот же тип данных.

При использовании массивов char в Arduino размер массива должен быть на единицу больше, чем количество фактических символов. Дополнительный элемент хранит нулевой символ. Например, чтобы использовать массив символов для хранения слова «Start»:

char array[6] = {"Start"};

В “Start” всего пять символов, но индекс массива равен шести.

Пример проекта с использованием массивов в Ардуино

Массивы обычно используются с циклами for для автоматической установки номеров контактов или для одновременного управления состоянием напряжения нескольких контактов.

В качестве примера того, как использовать массивы на Arduino, давайте построим схему, которая управляет массивом светодиодов. Каждый светодиод в массиве будет мигать и гаснуть один за другим.

В этом проекте используются следующие детали:

  • Arduino
  • Соединительные провода (7 штук)
  • Макетная плата
  • Светодиоды (6 штук)
  • Резистор 330 Ом

Следуйте этой схеме подключения, чтобы собрать электрическую цепь:

Управление светодиодами с помощью массива
Схема подключения светодиодов к Ардуино УНО для примера с массивами

Катод каждого светодиода соединен с землей через токоограничивающий резистор 330 Ом. После подключения схемы загрузите этот код в Arduino:

int ledPins[6] = {12, 11, 10, 9, 8, 7};

void setup() {

  for (int i = 0; i < 6 ; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {

  for (int j = 0; j < 6; j++) {
    digitalWrite(ledPins[j], HIGH);
    delay(500);
    digitalWrite(ledPins[j], LOW);
    delay(500);
  }
}
Пример массива в Ардуино
Демонстрация работы Ардуино с массивами данных

Объяснение кода

Этот проект идеально подходит для массивов, так как в нем есть много контактов, которые делают практически одно и то же – включают и выключают светодиоды. В верхней части скетча мы инициализируем массив с именем ledPins[] для хранения шести номеров контактов, которые подключены к светодиодом (контакты 7-12).

Обычно мы устанавливаем режимы ввода/вывода для каждого контакта в функции setup() с помощью отдельных функций pinMode(). Но теперь, когда контакты хранятся в массиве ledPins[], мы можем использовать цикл for для их установки всего двумя строками кода. В условии цикла for мы объявляем переменную-счетчик i и устанавливаем ее равной 0. Затем мы устанавливаем индекс каждого элемента с i<6. Затем i++ увеличивает переменную i на единицу при каждой итерации цикла for.

В теле цикла for есть функция pinMode(). Первым аргументом этой функции обычно является номер вывода, который будет установлен как вход или выход, но вместо этого мы можем ввести массив ledPins[] с переменной-счетчиком i в квадратных скобках. Каждый контакт будет выходом, поэтому второй аргумент функции pinMode()OUTPUT. Цикл for повторяется шесть раз, устанавливая режим вывода для каждого элемента в массиве ledPins[].

В разделе loop() у нас есть еще один цикл for, который заставит каждый светодиод включаться и выключаться в течение 500 миллисекунд один за другим.

В условии цикла for мы объявляем переменную-счетчик j и устанавливаем ее равной 0. Мы по-прежнему хотим пройтись по каждому элементу массива ledPins[], поэтому устанавливаем условие j<6. Затем у нас есть j++ для увеличения счетчика на единицу при каждой итерации цикла for. Код в теле цикла будет выполняться один раз для каждого элемента массива ledPins[].

В теле цикла for мы записываем в цифровой форме элементы массива ledPins[] с высоким и низким уровнем напряжения, чтобы светодиоды включались и выключались. Но вместо того, чтобы использовать номер контакта в качестве первого аргумента каждой функции digitalWrite(), мы можем использовать массив ledPins[] с переменной j в квадратных скобках.

Таким образом, цикл for будет начинаться с нулевого элемента массива ledPins[] (вывод 12), установит на нем высокий уровень напряжения, подождет 500 миллисекунд, затем установит на нем низкий уровень и подождет еще 500 миллисекунд. В следующем цикле цикла for переменная j увеличится на единицу, поэтому код в теле цикла for будет выполняться на первом элементе (вывод 11). Таким образом, на выводе 11 будут установлены высокий и низкий уровни в течение 500 миллисекунд.

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

Двумерный массив в Arduino

До сих пор мы говорили об одномерных массивах, но есть и двумерные массивы. Одномерные массивы могут хранить только один список значений, а двумерные массивы могут хранить два списка.

Двумерные массивы обычно используются для программирования светодиодных матриц, матричных клавиатур и ЖК-дисплеев. Код для создания двумерного массива аналогичен созданию одномерного массива. Например, этот код объявит двумерный массив из шести элементов:

int twoDimArray[2][3] = {
{1, 2, 3},
{4, 5, 6}
};

Число в первом наборе квадратных скобок [2] определяет количество строк в массиве. Число во второй паре скобок [3] задает количество элементов в каждой строке. Итак, twoDimArray[2][3] определяет двумерный массив с двумя строками и тремя столбцами.

Элементы двумерного массива инициализируются внутри двух наборов фигурных скобок:

int twoDimArray[2][3] = {
{1, 2, 3},
{4, 5, 6}
};

Доступ к элементам двумерного массива аналогичен доступу к элементам одномерного массива. Как и одномерные массивы, двумерные массивы имеют нулевой индекс. Однако для доступа к элементу двумерного массива необходимо указать строку и столбец каждого элемента.

Например, чтобы получить доступ к первому элементу в двумерном массиве выше, используется этот код:

twoDimArray[0][0];

twoDimArray[][] можно использовать в качестве входных данных для Serial.print(), digitalWrite() или любой другой функции.

Например, чтобы вывести число шесть из приведенного выше массива на последовательный монитор, мы будем использовать следующий код.

Serial.print(twoDimArray[1][2]);

Надеюсь, эта статья поможет вам понять, как использовать массивы при программировании плат Arduino. Обязательно оставьте комментарий ниже, если у вас есть вопросы по какому-либо поводу!

Документация

Компоненты

  • Arduino NANO
  • Arduino UNO
  • Arduino MEGA
  • Набор выводных резисторов
  • Наборы выводных светодиодов
4 5 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии