В Arduino при объявлении массива необходимо указывать его размер. Вы можете это сделать, либо явно указав размерность массива, либо заполнив массив всеми значениями. Например, если требуется, чтобы массив содержал четыре элемента типа int, объявляем его в программе так:
int numbers[4];
При необходимости можно инициализировать массив значениями при объявлении.
При объявлении массива таким способом указывать число элементов массива
- 115 -
необязательно, предполагается, что длина массива равна числу объявленных элементов:
// Оба варианта объявления верны
int numbers[4] = {-7, 0, 6, 234};
int numbers[] = {-7, 0, 6, 234};
Обратите внимание, что массивы индексируются с нуля. Доступ к элементу массива можно получить, поставив после имени массива в квадратных скобках соответствующее значение индекса. Например, если требуется установить яркость светодиода, подключенного к выводу 9 Arduino, равной значению третьего элемента в массиве, то можно сделать это следующим образом:
analogWrite(9,numbers[2]);
Обратите внимание, что индекс 2 представляет собой третье значение в массиве, поскольку нумерация начинается с нуля. Изменить одно из значений массива можно так: numbers[2] = 10;
Далее массивы потребуются нам, чтобы создать структуру, которая может содержать последовательность нот, воспроизводимую на динамике.
Для хранения информации о мелодии, которую вы хотите воспроизвести, создадим два массива одинаковой длины. Первый содержит перечень нот, а второй - список длительности звучания для каждой ноты в миллисекундах. Затем, перебирая индексы этих массивов, воспроизведем мелодию.
Пользуясь музыкальными навыками, которые я приобрел на уроках в средней школе, я сочинил короткую мелодию (листинг 5.1).
Листинг 5.1. Пример мелодии
// Массив нот
int notes [] = {
NOTE_A4, NOTE_E3, NOTE_A4, 0,
NOTE_A4, NOTE_E3, NOTE_A4, 0,
NOTE_E4, NOTE_D4, NOTE_B4, NOTE_A4, NOTE_В4, NOTE_C4, NOTE_D4,
NOTE_E4, NOTE_E3, NOTE_A4, 0
};
// Массив длительностей звучания нот в мс
int times[] = {
250, 250, 250, 250,
250, 250, 250, 250,
125, 125, 125, 125, 125, 125, 125, 125,
250, 250, 250, 250
};
- 116 -
Обратите внимание, что длина обоих массивов одинакова (20 элементов). Некоторые ноты задаются в виде нулевых значений, - это музыкальные паузы. Длительность звучания каждой ноты берем из второго массива. Для тех, кто знаком с теорией музыки, обратите внимание, что я задал длительность четвертных нот 250 мс, а восьмых - 125 мс.
Сначала попробуйте воспроизвести мою мелодию, а затем попытайтесь создать свою собственную!
ПРИМЕЧАНИЕ
Послушать аудиозапись можно на странице www.exploringarduino.com/content/ch5 или на сайте издательства Wiley.
Осталось написать программу для воспроизведения мелодии. С помощью цикла выбираем значения нот и их длительность из массивов и реализуем воспроизведение каждой ноты. Поскольку вы, вероятно, не захотите слушать мелодию снова и снова, можно выполнить цикл в функции setup(). Чтобы возобновить воспроизведение, нажмите кнопку Reset. В листинге 5.2 приведена полная программа проигрывателя Arduino.