Arduino:Примеры/ToneTest

Материал из Онлайн справочника
Версия от 12:38, 8 июля 2023; EducationBot (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Одновременное проигрывание нот[1]

Это скетч для библиотеки Tone, который демонстрирует, как при помощи платы Arduino одновременно проигрывать через динамик несколько нот. Нужные ноты присылаются пользователем через последовательный порт.

Код

// Одновременное проигрывание нот

// Чтобы совместить выходные данные для сигналов и выходные данные 
// от маленького динамика (например, на 8 ом и выше), воспользуйтесь 
// резисторами на 1 кОм. Подключите их к каждому выходному контакту, 
// а затем соедините вместе на динамике. Не забудьте подключить другую 
// сторону динамика к «земле»! 

// Этот пример проигрывает ноты от «a» (ля) до «g» (соль), присланные
// через последовательный порт. Буквы «s» останавливает проигрывание
// текущей ноты. Для второй октавы используйте заглавные буквы.

#include <Tone.h>

int notes[] = { NOTE_A3,
                NOTE_B3,
                NOTE_C4,
                NOTE_D4,
                NOTE_E4,
                NOTE_F4,
                NOTE_G4 };

// ноты можно задать в массиве:
Tone notePlayer[2];

void setup(void)
{
  Serial.begin(9600);
  notePlayer[0].begin(11);
  notePlayer[1].begin(12);
}

void loop(void)
{
  char c;

  if(Serial.available())
  {
    c = Serial.read();
    
    switch(c)
    {
      case 'a'...'g':
        notePlayer[0].play(notes[c - 'a']);
        Serial.println(notes[c - 'a']);
        break;
      case 's':
        notePlayer[0].stop();
        break;

      case 'A'...'G':
        notePlayer[1].play(notes[c - 'A']);
        Serial.println(notes[c - 'A']);
        break;
      case 'S':
        notePlayer[1].stop();
        break;

      default:
        notePlayer[1].stop();
        notePlayer[0].play(NOTE_B2);
        delay(300);
        notePlayer[0].stop();
        delay(100);
        notePlayer[1].play(NOTE_B2);
        delay(300);
        notePlayer[1].stop();
        break;
    }
  }
}

См.также

Внешние ссылки