Работа с зуммером / пищалкой arduino

15.03.2017

Схема подключения пикалки к Ардуино и простенький код для воспроизведения мелодии.

Решил проверить, работают ли у меня старые биреры.

Схема:

pic1


Скетч:

lesson_11.ino (Download)

 // Этот скетч использует зуммер для воспроизведения мелодий.
// Команда Arduino tone() будет издавать звуки определенной частоты.
// Мы создаем функцию, которая сопоставляет символ нотной гаммы
// ("До-ре-ми-фа...До") соответствующей частоте из следующей таблицы:

// note 	frequency
// c     262 Hz
// d     294 Hz
// e     330 Hz
// f     349 Hz
// g     392 Hz
// a     440 Hz
// b     494 Hz
// C     523 Hz
 

const int buzzerPin = 9;

// Мы создали массив с нотами, которые хотим воспроизвести,
// измените эти значения, чтобы создать свои мелодии!

// Длина должна равняться общему количеству нот и пауз

const int songLength = 18;

// Обозначение нот представляет собой массив из текстовых символов,
// соответствующим нотам в песне. Пробел означает паузу (пустую ноту)

char notes[] = "cdfda ag cdfdg gf "; // пробелы означают паузы

// Ритм задается массивом из длительности нот и пауз между ними.
// "1" - четвертная нота, "2" - половинная, и т.д.
// Не забывайте, что пробелы должны быть тоже определенной длинны.

int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};

// "tempo" это скорость проигрывания мелодии.
// Для того, чтобы мелодия проигрывалась быстрее, вы
// должны уменьшить следующее значение.

int tempo = 150;


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


void loop() 
{
  int i, duration;
  
  for (i = 0; i < songLength; i++) // пошаговое воспроизведение
                                   // из массива
  {
    duration = beats[i] * tempo;  // длительность нот/пауз в ms
    
    if (notes[i] == ' ')          // если нота отсутствует? 
    {
      delay(duration);            // тогда не большая пауза
    }
    else                          // в противном случае играть
    {
      tone(buzzerPin, frequency(notes[i]), duration);
      delay(duration);            // ждать пока проигрывается
    }
    delay(tempo/10);              // маленькая пауза между нотами
  }
  
  // Мы хотим, чтобы мелодия проиграла всего один раз, так что здесь остановимся окончательно:
  while(true){}
  // Если же вы хотите, чтобы мелодия играть снова и снова,
  // Удалить вышеуказанное заявление
}


int frequency(char note) 
{
  // Эта функция принимает символ ноты (a-g), и возвращает
  // частоту в Гц для функции tone().
  
  int i;
  const int numNotes = 8;  // количество хранимых нот
  
  // Следующие массивы содержат символы нот и соответствующие им
  // частоты. Последний символ "C" (нота "ДО") в верхнем регистре
  // (большая), это сделано для того чтобы отличить ее от первой
  // ноты "с", более низкого тона. Если вы хотите добавить больше
  // нот, вы должны будете использовать уникальный символ для
  // каждой новой ноты.

  // Каждый "char" (символ), мы заключаем в одинарные кавычки.

  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
  
  // Теперь мы будем искать во всем массиве, символ ноты и если
   // находим, возвращаем частоту для этой ноты.
  
  for (i = 0; i < numNotes; i++)  // пошаговый перебор нот
  {
    if (names[i] == note)         // если находим
    {
      return(frequencies[i]);     // возвращаем частоту
    }
  }
  return(0);  // Поиск символа не дал результата? Но, необходимо
			  // вернуть какое-то значение, так вернем 0.
}


Категории: raspberry pi 3 / arduino
Пометки: Пикалка, zoomer, BUZZER, извавание звуков, звуки.
Яндекс.Метрика