Функция tone Arduino используется для генерации PWM сигнала с определенной частотой на цифровом выходе микроконтроллера. Для воспроизведения звукового сигнала к пину платы Arduino должен быть подключен активный или пассивный зуммер. Длительность сигнала может быть определена в функции tone() или командой delay(), а генерация звука от пьезодинамика прекращается при вызове функции noTone() Arduino.
СОДЕРЖАНИЕ ►
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- активный или пассивный buzzer
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Одновременно на микроконтроллере Arduino может воспроизводиться только один сигнал. Если пьезодинамик уже подключен к пину, то вызов команды tone() для зуммера с другим номером порта не будет иметь никакого эффекта. Если функция будет вызвана с тем же номером порта, она будет воспроизводить сигнал на новой частоте. То есть, можно генерировать только одну частоту сигнала и на одном выходе микроконтроллера.
Функция tone и noTone в языке Ардуино

Синтаксис функции tone() Arduino
tone (pin, frequency); delay(duration); noTone(pin);
второй вариант:
tone (pin, frequency, duration); noTone(pin);
pin — номер порта, на котором будет генерироваться сигнал
frequency — частота сигнала в герцах
duration — длительность сигнала в миллисекундах
Описание функций tone и noTone в Arduino IDE

Частота генерируемого сигнала зависит от встроенного таймера на микроконтроллере Arduino. Для Arduino Uno или Arduino Nano минимальная частота генерируемого звука составляет 31 Гц, а максимальная — 65535 Гц. Диапазон частот, воспринимаемых человеческим ухом, гораздо меньше этих значений. Загрузите в плату Arduino Uno следующий пример программы для включения пьезодинамика на разных частотах.
Скетч с примером использования команды tone
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
tone(11, 600);
delay(1000);
tone(11, 900);
delay(1000);
noTone(11);
delay(1000);
}
Скетч для проигрывания мелодий с помощью tone
const byte COUNT_NOTES = 39;
int frequences[COUNT_NOTES] = {
392, 392, 392, 311, 466, 392, 311, 466, 392,
587, 587, 587, 622, 466, 369, 311, 466, 392,
784, 392, 392, 784, 739, 698, 659, 622, 659,
415, 554, 523, 493, 466, 440, 466,
311, 369, 311, 466, 392
};
int durations[COUNT_NOTES] = {
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 250, 100, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 750
};
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
for (int i = 0; i <= COUNT_NOTES; i++) {
tone(11, frequences[i], durations[i] * 2);
delay(durations[i] * 2);
noTone(11);
}
}
Заключение. Функции tone() и noTone() используют аппаратный таймер Ардуино, поэтому в скетче следует использовать ШИМ сигнал для включения пьезодинамика (бипера). Использование функции пригодится при создании проектов, где требуется звуковая сигнализация, например, при создании игры Динозаврик с дисплеем 1602.
