Читаем Изучаем Arduino: инструменты и методы технического волшебства полностью

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 организовать прерывания по таймеру.

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

<p>Глава 13. Обмен данными с картами памяти SD</p>Список деталей

Для повторения примеров главы вам понадобятся следующие детали:

• плата 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].

ПРИМЕЧАНИЕ

Видеоурок о регистрации данных местоположения с помощью GPS-приемника можно посмотреть на странице http://www.jeremyblum.com/2012/07/16/tutorial-15-for-arduinogps-tracking/. Эти видеофайлы доступны и на странице издательства Wiley.

<p>13.1. Подготовка к регистрации данных</p>

Системы регистрации данных, как правило, предназначены для сбора информации, поступающей, например, с аналоговых датчиков. Неотьемлемая часть подобных систем - устройства памяти для хранения данных в течение длительного времени.

Далее рассмотрим несколько способов использования SD-карты для записи данных с платы Arduino. Кратко перечислим возможные применения регистраторов:

• метеостанция для мониторинга освещенности, температуры и влажности в течение длительного времени;

• GPS-трекер для отслеживания местоположения;

Перейти на страницу:

Похожие книги