Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства
- Название:Изучаем Arduino: инструметы и методы технического волшебства
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2015
- Город:Санкт-Петербург
- ISBN:978-5-9775-3585-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства краткое содержание
Для радиолюбителей
Изучаем Arduino: инструметы и методы технического волшебства - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Программа для музыкального инструмента использует аппаратные прерывания и прерывания по таймеру, а также функцию tone() для управления динамиком и осуществляет передачу данных в последовательный порт. Загрузите код из листинга 12.3 на плату Arduino и нажимайте кнопку для перебора базовых частот. Посмотреть частоту, воспроизводимую в текущий момент, можно в мониторе последовательного порта.
Листинг 12.3. Код для музыкального инструмента - fun_with_sound.ino
// Использование аппаратных прерываний и прерываний по таймеру
// Подключение библиотеки TimerOne
#include
//
const int BUTTON INT =0; // Прерывание 0 (вывод 2 для Uno)
const int SPEAKER=12;
// Вывод 12 для подключения динамика
- 267 -

Рис. 12.9. Графическая схема музыкального аппарата
// Базовые частоты для нот
#define NOTE_C 65
#define NOTE_D 73
#define NOTE_E 82
#define NOTE_F 87
#define NOTE_G 98
#define NOTE_A 110
#define NOTE_B 123
// Переменные volatile для изменения при обработке прерываний
volatile int key = NOTE_C;
volatile int octave_multiplier = 1;
void setup()
{
// Запуск последовательного порта
Serial.begin(9600);
pinMode (SPEAKER, OUTPUT);
// Запуск для кнопки аппаратного прерывания по RISING
attachInterrupt(BUTTON_INT, changeKey, RISING);
//Set up timer interrupt
Timer1.initialize(500000);
// Период 0,5 секунды
- 268 -
Timer1.attachInterrupt(changePitch); // Выполнять changePitch()
// при прерываниях по таймеру
void changeKey()
{
octave_multiplier=1;
if (key == NOTE_C)
key = NOTE_D;
else if (key == NOTE_D)
key = NOTE_E;
else if (key == NOTE_E)
key = NOTE_F;
else if (key == NOTE_F)
key = NOTE G;
else if (key == NOTE_G)
key = NOTE_A;
else if (key == NOTE_A)
key = NOTE_B;
else if (key == NOTE_B)
key = NOTE_C;
}
// Обработка прерывания по таймеру
void changePitch()
{
octave_multiplier = octave_multiplier * 2;
if (octave_multiplier > 16) octave_multiplier
tone(SPEAKER,key*octave_multiplier);
}
void loop()
{
Serial.print ("Кеу: ");
Serial.print(key);
Serial.print(" Multiplier: ");
Serial.print(octave_multiplier);
Serial.print(" Frequency: ");
Serial.println(key*octave_multiplier);
delay(100);
}
Значения частот для нот можно найти в Интернете. Базовые частоты определены для нот второй октавы. Обратите внимание, что переменные key и octave_multiplier должны быть объявлены как volatile, потому что их значения меняются во время обработки прерываний. Функция changeKey() вызывается каждый раз при срабатывании прерывания по нажатию кнопки и изменяет базовое значение пере
- 269 -
менной key. Функция changePitch() вызывает tone() для установки частоты сигнала для динамика. Она запускается каждые полсекунды по прерыванию таймера.
При каждом вызове она удваивает базовую частоту, пока не будет достигнуто ее 16-кратное увеличение. Затем процесс повторяется с начальной базовой частоты.
В цикле loop() в последовательный монитор каждые 0, 1 с выводятся значения переменных key, octave_multiplier и частоты.
ПРИМЕЧАНИЕ
Посмотреть видеоклип, демонстрирующий работу музыкального инструмента, можно на странице www.exploringarduino.com/content/ch12. Этот видеофайл доступен и на странице издательства Wiley.
Резюме
• Как выбрать альтернативу: опрос входов в цикле или использование прерываний.
• Что реализация прерываний на различных платах Arduino неодинакова. На плате Due прерывания можно задать для любого контакта, на других платах для прерываний доступны только определенные контакты.
• Как создать противодребезговую защиту кнопок на аппаратном уровне с помощью RC-цепочки и триггера Шмитта.
• Что с помощью функций обработки прерываний можно асинхронно опрашивать входы Arduino.
• Как с помощью сторонней библиотеки TimerOne организовать прерывания по таймеру.
• Как комбинировать прерывания таймера, аппаратные прерывания и опрос в одной программе, чтобы параллельно выполнять несколько задач.
Глава 13. Обмен данными с картами памяти SD
Для повторения примеров главы вам понадобятся следующие детали:
• плата Arduino (рекомендуется Uno );
• USB-кабель для программирования платы Arduino;
• источник питания для платы Arduino (блок питания или аккумулятор);
• инфракрасный датчик расстояния;
• плата часов реального времени;
• плата расширения SD card shield;
• карта памяти SD;
• набор перемычек;
• макетная плата;
• компьютер с картридером.
На странице http://www.exploringarduino.com/content/ch13 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
Есть множество примеров устройств на основе плат Arduino для сбора данных о состоянии атмосферы с метеодатчиков, зондов, датчиков систем жизнеобеспечения зданий и т. п. Учитывая небольшой размер, минимальное энергопотребление и простоту взаимодействия с датчиками, платы Arduino удобны для построения регистраторов данных (устройств для записи и хранения информации в течение определенного периода времени). Такие регистраторы часто присутствуют в сетях сбора данных и для хранения накопленной информации требуется энергонезависимая память, например SD-карта. В этой главе вы узнаете, как связать Arduino с SD-картой.
- 271 -
Мы расскажем, как записывать данные в файл и как читать информацию с SD-карты. С помощью часов реального времени к данным мы добавим точные временные метки. Вы также узнаете о том, как отобразить эти данные на вашем компьютере.
ПРИМЕЧАНИЕ
Видеоурок по записи и хранению данных можно посмотреть на странице
http://www.jeremyblum.com/2011 /04/05/tutorial-11-for-arduino-sd-cards-anddatalogging/ [16] На русском: http://wiki.amperka.ru/видеоуроки:11-sd-карты-и-регистрация-данных.
.
ПРИМЕЧАНИЕ
Видеоурок о регистрации данных местоположения с помощью GPS-приемника можно посмотреть на странице http://www.jeremyblum.com/2012/07/16/tutorial-15-for-arduinogps-tracking/. Эти видеофайлы доступны и на странице издательства Wiley.
13.1. Подготовка к регистрации данных
Системы регистрации данных, как правило, предназначены для сбора информации, поступающей, например, с аналоговых датчиков. Неотьемлемая часть подобных систем - устройства памяти для хранения данных в течение длительного времени.
Далее рассмотрим несколько способов использования SD-карты для записи данных с платы Arduino. Кратко перечислим возможные применения регистраторов:
• метеостанция для мониторинга освещенности, температуры и влажности в течение длительного времени;
• GPS-трекер для отслеживания местоположения;
• система контроля за температурой компонентов персонального компьютера;
• регистратор для управления электрическим освещением в доме или офисе.
В конце главы мы разработаем систему протоколирования данных с инфракрасным датчиком расстояния, которая позволит создать журнал входа и выхода людей из помещения.
Читать дальшеИнтервал:
Закладка: