Arduino:Библиотеки/Tone
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Библиотека Tone[1]
Это библиотека для Arduino, которая генерирует на любом контакте платы Arduino прямоугольные волны заданной частоты (с коэффициентом заполнения 50%). Также есть возможность задать продолжительность волны, но если этого параметра задано не будет, волна будет активна, пока в скетче не появится функция stop(). Этот контакт можно подключить к пьезодинамику или другому устройству, способному проигрывать звук. Обязательно попробуйте скетч «RTTTL»!
«Родная» библиотека Tone
В Arduino уже есть упрощенная версия библиотеки Tone, которая была внедрена вместе с версией 0018. Впрочем, она позволяет сыграть лишь одну ноту (потому что используется только один таймер). Соответствующую документацию можно почитать тут.
Также имеет смысл ознакомиться с руководством, написанным Томом Иго (Tom Igoe). В нем демонстрируется, как использовать функции tone() и noTone().
Кроме того, на одной линии с динамиком ДОЛЖЕН БЫТЬ резистор. В противном случае контроллер будет поврежден.
Загрузка и установка
Последнюю версию библиотеки можно скачать отсюда. Об установке библиотек читайте тут.
Подключение
- Просто подключите цифровой контакт к динамику (к той же линии должен быть подключен резистор примерно на 1 кОм), а другую сторону динамика – к «земле» (GND).
- Для регулирования громкости можно использовать потенциометр (регулируемый резистор). Для этих целей подойдет потенциометр номиналом 10 кОм. Подключите его к той же линии, что и резистор на 1 кОм, подключенный к динамику.
- Использование этой библиотеки повлияет и на выходную ШИМ, так что будьте осторожны.
- Хотя библиотека использует последний таймер, ее работа повлияет и на timer0, который, помимо прочего, используется для функции millis().
Функции
- Функция begin(pin) подготавливает контакт для проигрывания ноты. Аргумент pin – это номер подготавливаемого контакта.
- Функция isPlaying() проверяет, проигрывается ли нота. Если проигрывается, функция возвращает true, если нет – false.
- Функция play(frequency, duration) проигрывает ноту. Аргумент frequency – это частота ноты, а duration – это продолжительность проигрывания ноты в миллисекундах (когда это время закончится, звук автоматически замолкнет). Второй аргумент опционален, и если он не задан, нота будет проигрываться, пока в скетче не будет вызвана функция stop(). Функция play() – это неблокирующая функция. Будучи вызванной, она сразу же исполнит свою задачу.
- Функция stop() останавливает проигрывание ноты.
Константы
Ниже список констант, отвечающих за частоты нот. Они идут в комплекте с библиотекой. Эти константы указываются в качестве аргументов в функции play().
Вот сам список (здесь первая запись – это название константы, а вторая – частота ноты):
| NOTE_B2 | 123 | | NOTE_C3 | 131 | | NOTE_CS3 | 139 | | NOTE_D3 | 147 | | NOTE_DS3 | 156 | | NOTE_E3 | 165 | | NOTE_F3 | 175 | | NOTE_FS3 | 185 | | NOTE_G3 | 196 | | NOTE_GS3 | 208 | | NOTE_A3 | 220 | | NOTE_AS3 | 233 | | NOTE_B3 | 247 | | NOTE_C4 | 262 | | NOTE_CS4 | 277 | | NOTE_D4 | 294 | | NOTE_DS4 | 311 | | NOTE_E4 | 330 | | NOTE_F4 | 349 | | NOTE_FS4 | 370 | | NOTE_G4 | 392 | | NOTE_GS4 | 415 | | NOTE_A4 | 440 | | NOTE_AS4 | 466 | | NOTE_B4 | 494 | | NOTE_C5 | 523 | | NOTE_CS5 | 554 | | NOTE_D5 | 587 | | NOTE_DS5 | 622 | | NOTE_E5 | 659 | | NOTE_F5 | 698 | | NOTE_FS5 | 740 | | NOTE_G5 | 784 | | NOTE_GS5 | 831 | | NOTE_A5 | 880 | | NOTE_AS5 | 932 | | NOTE_B5 | 988 | | NOTE_C6 | 1047 | | NOTE_CS6 | 1109 | | NOTE_D6 | 1175 | | NOTE_DS6 | 1245 | | NOTE_E6 | 1319 | | NOTE_F6 | 1397 | | NOTE_FS6 | 1480 | | NOTE_G6 | 1568 | | NOTE_GS6 | 1661 | | NOTE_A6 | 1760 | | NOTE_AS6 | 1865 | | NOTE_B6 | 1976 | | NOTE_C7 | 2093 | | NOTE_CS7 | 2217 | | NOTE_D7 | 2349 | | NOTE_DS7 | 2489 | | NOTE_E7 | 2637 | | NOTE_F7 | 2794 | | NOTE_FS7 | 2960 | | NOTE_G7 | 3136 | | NOTE_GS7 | 3322 | | NOTE_A7 | 3520 | | NOTE_AS7 | 3729 | | NOTE_B7 | 3951 | | NOTE_C8 | 4186 | | NOTE_CS8 | 4435 | | NOTE_D8 | 4699 | | NOTE_DS8 | 4978 |
К примеру, чтобы проиграть 440 Гц (четвертую ноту октавы A) на 13-ом контакте, понадобится следующий код:
Tone tone1;
void setup() { tone1.begin(13); tone1.play(NOTE_A4); }
void loop() { }
Подробнее о принципе работы библиотеки
Чтобы генерировать прямоугольно-волновые ноты слышимого диапазона, библиотека Tone использует аппаратные таймеры микроконтроллера Arduino.
Генерировать ноты можно на любом контакте Arduino. Количество нот, которые можно проигрывать одновременно, зависит от количества аппаратных таймеров (совместимых с CTC), имеющихся у контроллера.
- ATmega8: два таймера (2 и 1)
- ATmega168/328: три таймера (2, 1 и 0)
- ATmega1280: 6 таймеров (2, 3, 4, 5, 1 и 0)
В скобках указан порядок распределения таймеров. Кроме того, timer0 – это очень чувствительный таймер, поскольку отвечает за функцию millis() и ШИМ.
Диапазон частот, которые может генерировать библиотека, зависит от тактовой частоты микроконтроллера и используемого таймера. Расчет этого диапазона осуществляется следующим образом (здесь первая запись – это частота микроконтроллера, вторая – нижняя граница диапазона для 8-битного таймера, третья – нижняя граница для 16-битного таймера, а четвертая – верхняя граница частотного диапазона):
|8 MHz |16 Hz |1 Hz (1/16 Hz) |4 MHz |
|16 MHz |31 Hz |1 Hz (1/8 Hz) |8 MHz |
Хотя верхней границей частотного диапазона может быть и 8 МГц, верхняя граница диапазона человеческого слуха, как правило, не превышает 20 КГц.
Точность ноты зависит от значения, заданного для предварительного делителя частоты. Благодаря этому делению происходит квантование частоты.
Если вы используете 16-битный таймер (например, timer1 или timer3, timer4, timer5 на 1280), то можете генерировать «ноты» до 1/8 Гц (один цикл каждые 8 секунд), но библиотека Tone, задавая частоты, принимает только целочисленные значения.
Поскольку функция play() принимает только беззнаковые целочисленные значения, максимальной частотой, которую можно сгенерировать, будет 65535 Гц. Кроме того, после округления эта цифра превращается в «ноту» с частотой 65573,77 Гц (на платах с тактовой частотой в 16 МГц). Следовательно, если в функции play() указать для частоты более высокие значения, вы все равно не сможете достичь результата лучше 80 rГц, потому что переключение контактов осуществляется на программном уровне. Причем каждое такое переключение требует КАК МИНИМУМ 50 с лишним циклов.
Сайты с рингтонами
- http://merwin.bespin.org/db/rts/index.php
- http://www.cellringtones.com/
- http://nokiatone.ifrance.com/nokiatone/rtttf.htm
- http://www.ringtones4all.com/index.php?page=freetone&catr=20&cnt=0
- http://ringtones.frostzone.com/
- http://www.2thumbswap.com/members/tones/nokia/tones_nokia_main.html
- http://hem.passagen.se/klas2/vgtones/
- http://arcadetones.emuunlim.com/
Примеры
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |