tone()

Описание

Генерирует прямоугольный сигнал указанной частоты (и скважностью 50%) на пине. Можно указать длительность, иначе сигнал будет генерироваться до вызова noTone(). К пину можно подключить пьезоизлучатель или другой динамик для воспроизведения тонов.

Одновременно может генерироваться только один тон. Если тон уже воспроизводится на другом пине, вызов tone() не будет иметь эффекта. Если тон воспроизводится на том же пине, вызов установит его частоту.

Использование функции tone() будет мешать ШИМ-выходу на пинах 3 и 11 (на платах, отличных от Mega).

Невозможно генерировать тоны ниже 31 Гц. Технические подробности см. в заметках Бретта Хагмана.

Синтаксис

Используйте следующие варианты функции для генерации тона на конкретном пине бесконечно или в течение заданного времени:

  • tone(pin, frequency)

  • tone(pin, frequency, duration)

Параметры

Функция принимает следующие параметры:

  • pin: пин Arduino, на котором генерируется тон.

  • frequency: частота тона в герцах. Допустимые типы данных: unsigned int.

  • duration: длительность тона в миллисекундах (необязательный параметр). Допустимые типы данных: unsigned long.

Возвращаемое значение

Функция ничего не возвращает.

Пример кода

Генерация прямоугольного сигнала на пине D0 в течение секунды с повторением.

#define BUZZER_PIN D0 // Пример пина

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  tone(BUZZER_PIN, 1000, 1000); // тон 1 кГц
  delay(1000);
}

Примечания и предупреждения

  • Если вы хотите воспроизводить различные тональности на нескольких пинах, необходимо вызвать noTone() на одном пине перед вызовом tone() на следующем.

  • Эта функция является неблокирующей, то есть даже при указании параметра duration выполнение скетча продолжится немедленно, даже если тон ещё не закончил воспроизведение.

См. также