Модуль поддерживает частоты от 31 Гц до 65 кГц, но человеческое ухо различает только диапазон 20 Гц – 20 кГц. Для точной настройки используйте таблицы соответствия нот: ля первой октавы – 440 Гц, до второй – 523 Гц. Если не указать длительность, звук будет воспроизводиться до вызова noTone().
Одновременная работа с несколькими звуковыми каналами требует дополнительных аппаратных таймеров. На платах с чипом ATmega328P доступен только один канал, но ATmega2560 позволяет управлять тремя независимыми сигналами. Для сложных композиций записывайте последовательности нот в массивы с указанием частот и пауз.
Генерация звуковых сигналов с помощью библиотеки Tone
Основные функции
tone(pin, freq, duration)
– воспроизводит сигнал заданной частоты на указанное время (в миллисекундах). Пример:
tone(8, 440, 1000); // Нота "Ля" первой октавы на 1 секунду
noTone(pin)
– останавливает генерацию. Обязательно вызывайте эту функцию перед изменением параметров.
Практическое применение
Создайте мелодию, используя массив частот и длительностей:
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
int durations[] = {200, 200, 200, 400, 200, 200, 200, 400};
void playTune() {
for (int i = 0; i < 8; i++) {
tone(8, melody[i], durations[i]);
delay(durations[i] * 1.3);
noTone(8);
}
}
Для сложных проектов комбинируйте с таймерами или прерываниями, чтобы избежать блокировки основного цикла.
Настройка генерации звука с помощью функции tone()
Для воспроизведения сигнала подключите динамик или пьезоизлучатель к цифровому выходу. Минимальное сопротивление – 8 Ом.
Синтаксис и параметры
Функция принимает три аргумента: tone(pin, frequency, duration)
. pin
– номер выхода, frequency
– частота в герцах (от 31 до 65535), duration
– длительность в миллисекундах (необязательный параметр).
Пример кода
Следующий скетч генерирует сигнал 1 кГц на 9-м пине в течение 500 мс:
void setup() {
tone(9, 1000, 500);
}
void loop() {
}
Для непрерывного звука исключите третий аргумент. Остановка – через noTone(pin)
.
Используйте массив частот для создания мелодий. Задержки между нотами регулируйте delay()
.
Примеры использования Tone Arduino в реальных проектах
Мелодии для сигнализации
Генератор звука подходит для создания простых предупредительных сигналов. Пример кода для сирены:
- Частота: от 500 Гц до 2 кГц
- Длительность импульсов: 100–300 мс
- Подключение: пьезоизлучатель через резистор 220 Ом
Игровые звуковые эффекты
В 8-битных играх можно имитировать выстрелы, взрывы или сбор монет. Готовый вариант для платформера:
- Короткий импульс 1 кГц при прыжке
- Нисходящий тон от 800 Гц до 200 Гц для падения
- Три быстрых сигнала 1500 Гц при получении бонуса
Для музыкальных автоматов подойдут аккорды из трёх нот. Пример последовательности (C4, E4, G4) с задержкой 200 мс между нотами.
Как генерировать звуковые сигналы с помощью функции tone()
tone(8, 1000);
Контроль длительности сигнала
Третий параметр задает время звучания в миллисекундах. После tone(8, 1000, 2000) сигнал автоматически отключится через 2 секунды. Без этого параметра звук будет непрерывным.
Остановка воспроизведения
noTone(8);