Эксперимент 22. Ноты

В музыке каждой ноте соответствует строго определенная частота, или как говорят музыканты — тон. Также у каждой ноты есть обозначение на нотном стане и буквенный код. Например тона Ля обозначается как A.

Не будем сильно вдаваться в музыкальную теорию так как это не является предметом нашего курса. Просто примем эти обозначения, соберем схему и составим программу для воспроизведения нот.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp22.ino
  1. #define SPEAKER_PIN 15
  2.  
  3. int tones[8] = {262, 294, 330, 349, 392, 440, 494, 523};
  4.  
  5. enum {c, d, e, f, g, a, b, C};
  6.  
  7. void setup() {
  8. pinMode(SPEAKER_PIN, OUTPUT);
  9. analogWriteRange(1024);
  10. analogWrite(SPEAKER_PIN, 512);
  11. }
  12.  
  13. void loop() {
  14. analogWriteFreq(tones[c]);
  15. delay(1000);
  16. analogWriteFreq(tones[f]);
  17. delay(1000);
  18. analogWriteFreq(tones[b]);
  19. delay(1000);
  20. }

Объявляем массив tones для значений частоты нот. Чтобы не запоминать какому индексу в массиве соответствует какая нота воспользуемся специальным типом данных enum. Он позволяет создать набор именованных констант, перечисленных через запятую, по умолчанию начиная с нуля. То есть с = 0, d = 1, e = 2 и так далее. Теперь мы можем воспользоваться следующим обращением к элементам массива tones[c], которое вернет значение частоты ноты с — 262.

Приведенная программа проигрывает по кругу 3 ноты До, Фа и Си.

Дополнительное задание

  • Измени код программы, чтобы она играла мелодию из нескольких нот с разной длительностью.