// Массив длительностей звучания нот в мс
int times [) = {
250, 250, 250, 250,
250, 250, 250, 250,
125, 125, 125, 125, 125, 125, 125, 125,
250, 250, 250, 250
};
void setup()
{
- 117 -
// Выбор каждой ноты перебором массива нот
for (int i = 0; i < 20; i++)
{
tone(SPEAKER, notes[i], times[i]);
delay(times[i]);
}
}
void loop()
{
// Чтобы повторить воспроизведение, необходимо нажать кнопку Reset
}
Если вы захотите создать свою собственную мелодию, проследите, чтобы массивы нот и длительностей имели равный размер, и правильно задайте верхнюю границу для цикла перебора for(). Поскольку функция tone() может работать в фоновом режиме, важно определить задержку delay(), чтобы следующая нота не звучала, пока не закончится воспроизведение предыдущей.
Соберите схему изображенную на рис. 5.6.
рис. 5.6. Пианино
Листинг 5.3. Пианино
#define NOTE_C 262 //Hz
#define NOTE_D 294 //Hz
#define NOTE_E 330 //Hz
#define NOTE_G 392 //Hz
#define NOTE_A 440 //Hz
const int SPEAKER=9; //Speaker on Pin 9
const int BUTTON_C=7; //Button Pin
const int BUTTON_D=6; //Button Pin
const int BUTTON_E=5; //Button Pin
const int BUTTON_G=4; //Button Pin
const int BUTTON_A=3; //Button Pin
void setup()
{
//No setup needed
//Tone function sets outputs
}
void loop()
{
while (digitalRead(BUTTON_C))
tone(SPEAKER, NOTE_C);
while(digitalRead(BUTTON_D))
tone(SPEAKER, NOTE_D);
while(digitalRead(BUTTON_E))
tone(SPEAKER, NOTE_E);
while(digitalRead(BUTTON_G))
tone(SPEAKER, NOTE_G);
while(digitalRead(BUTTON_A))
tone(SPEAKER, NOTE_A);
//Stop playing если ни одна кнопка не нажата
noTone(SPEAKER);
}
Резюме
• Как динамики создают вибрацию воздуха, которая распространяется в пространстве и воспринимается нашей барабанной перепонкой в виде звука.
• Что изменение электрического тока индуцирует магнитное поле, которое генерирует звук из громкоговорителя.
• Как создавать звуки произвольной частоты и длительности с помощью функции tone().
• Что язык программирования Arduino поддерживает массивы, что удобно для перебора последовательностей данных.
• Что громкость можно регулировать потенциометром, соединенным последовательно с динамиком.
Для повторения примеров главы вам понадобятся следующие детали:
• плата Arduino Uno;
• плата Arduino Leonardo;
• USB-кабель А - В (для Uno );
• USB-кабель А - микро В (для Leonardo );
• светодиод;
• RGB-светодиод с общим катодом;
• резистор номиналом 150 Ом;
• 3 резистора номиналом 220 Ом;
• 2 резистора номиналом 10 кОм;
• кнопка;
• фоторезистор;
• датчик температуры ТМР36;
• двух.координатный джойстик (Spark.Fun, Parallax или Adafruit);
• перемычки;
• провода;
• макетная плата;
• потенциометр.
На странице http://www.exploringarduino.com/content/ch6 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
- 119 -
Обычно для загрузки программ из компьютера в микроконтроллер нужны внешние аппаратные средства, такие как программатор AVR ISP MKII. Замечательная особенность любой платы Arduino - возможность запрограммировать ее через USB-интерфейс. Это позволяет программировать Arduino без специального программатора. В плату Arduino уже встроен программатор, что дает возможность напрямую подключаться к интегрированному универсальному синхронно/асинхронному приемопередатчику ATmega (USART). Через этот интерфейс можно обмениваться данными между Arduino и компьютером или между Arduino и другими устройствами, поддерживающими протокол (включая другие платы Arduino).
В этой главе рассматривается все, что вам необходимо знать о подсоединении Arduino к компьютеру через USB и передаче данных между ними. У различных плат Arduino разные возможности последовательного соединения, и мы рассмотрим проекты с каждым из них, чтобы ознакомившись со всеми, затем использовать их максимально эффективно. Обратите внимание, что в списке деталей в начале главы указано несколько плат Arduino. В зависимости от типа платы вы можете решить, какие разделы главы читать, какие примеры выбрать для выполнения и какие из перечисленных деталей понадобятся.
Как уже упоминалось во введении к данной главе, в разных платах Arduino последовательный интерфейс выполнен по-разному. Различия есть как в аппаратной, так и в программной реализации: неодинаковы типы микросхем преобразователей и перечень поддерживаемых функций. Сначала мы рассмотрим различия аппаратных интерфейсов на платах Arduino.
ПРИМЕЧАНИЕ
Чтобы узнать больше о последовательном интерфейсе, посмотрите видеоурок на странице http://www.jeremyblum.com/2011 /02/07/arduino-tutorial-6-serial-communicationand-processing/[9] или на сайте издательства Wiley.
Для начала необходимо понять разницу между последовательным портом и USB.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии