Перейти к содержанию

Функция tone() и noTone() Arduino: мелодии, ноты

Функция tone и noTone Arduino описание

Функция tone Arduino используется для генерации PWM сигнала с определенной частотой на цифровом выходе микроконтроллера. Для воспроизведения звукового сигнала к пину платы Arduino должен быть подключен активный или пассивный зуммер. Длительность сигнала может быть определена в функции tone() или командой delay(), а генерация звука от пьезодинамика прекращается при вызове функции noTone() Arduino.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • активный или пассивный buzzer
  • макетная плата
  • коннекторы

Дополнительные материалы на эту тему:

  1. Подключение пьезодинамика к Ардуино
  2. Пианино на Ардуино с кнопками и пищалкой
  3. Игра на Ардуино «Dino T-Rex» с дисплеем

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

Функция tone и noTone в языке Ардуино

Функция tone и noTone Arduino описание

Синтаксис функции 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜