Главная chevron_right Функции chevron_right Расширенный ввод/вывод chevron_right noTone()

noTone()

Останавливает генерацию прямоугольного сигнала на выводе, запущенную функцией tone(), — если сигнал не активен, вызов безвреден.

Полная статья

Описание

Функция noTone() прекращает генерацию прямоугольного сигнала на указанном выводе, который был запущен функцией tone(). Если в момент вызова сигнал не генерируется, функция просто ничего не делает — это безопасно и не вызывает ошибок.

Синтаксис

noTone(pin)

Параметры

pin: номер вывода Arduino, на котором нужно остановить генерацию сигнала.

Возвращает

Ничего.

Пример кода

В примере ниже прямоугольный сигнал генерируется на выводе D0 в течение одной секунды, после чего несколько раз останавливается.

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

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

void loop() {
  tone(BUZZER_PIN, 1000); // Тон 1 кГц
  delay(1000);
  noTone(BUZZER_PIN);      // Остановить тон
  delay(1000);
}

Практические замечания

  • Если вы хотите поочерёдно воспроизводить звуки на нескольких выводах, перед вызовом tone() на новом выводе обязательно вызовите noTone() на текущем. Без этого аппаратный таймер, который используется для генерации сигнала, может работать некорректно.
  • noTone() не переводит вывод в состояние LOW явно — после остановки сигнала вывод остаётся в том состоянии, в котором находился в момент остановки. Если это важно для вашей схемы, явно вызовите digitalWrite(pin, LOW) следом.
  • Функция tone() использует один аппаратный таймер для всех выводов, поэтому одновременно можно генерировать сигнал только на одном выводе. noTone() освобождает этот таймер.
  • Вызов noTone() на выводе, где сигнал не запущен, совершенно безвреден — можно использовать его для подстраховки в конце воспроизведения мелодии.

Полезные материалы