===== Эксперимент 22. Ноты =====
В музыке каждой ноте соответствует строго определенная частота, или как говорят музыканты — тон. Также у каждой ноты есть обозначение на нотном стане и буквенный код. Например тона Ля обозначается как A.
{{ :products:esp-iot:2020-05-18_12-02-06.png?nolink |}}
Не будем сильно вдаваться в музыкальную теорию так как это не является предметом нашего курса. Просто примем эти обозначения, соберем схему и составим программу для воспроизведения нот.
==== Схема эксперимента ====
{{ :products:esp-iot:exp7_sch.png?nolink |}}
//Рисунок 1. Электрическая принципиальная схема эксперимента//
{{ :wiki:exp7_mont.png?direct&600 |}}
//Рисунок 2. Монтажная схема эксперимента//
==== Программный код эксперимента ====
#define SPEAKER_PIN 15
int tones[8] = {262, 294, 330, 349, 392, 440, 494, 523};
enum {c, d, e, f, g, a, b, C};
void setup() {
pinMode(SPEAKER_PIN, OUTPUT);
analogWriteRange(1024);
analogWrite(SPEAKER_PIN, 512);
}
void loop() {
analogWriteFreq(tones[c]);
delay(1000);
analogWriteFreq(tones[f]);
delay(1000);
analogWriteFreq(tones[b]);
delay(1000);
}
Объявляем //массив// ''tones'' для значений частоты нот. Чтобы не запоминать какому индексу в массиве соответствует какая нота воспользуемся специальным типом данных ''enum''. Он позволяет создать набор именованных констант, перечисленных через запятую, по умолчанию начиная с нуля. То есть с = 0, d = 1, e = 2 и так далее. Теперь мы можем воспользоваться следующим обращением к элементам массива ''tones[c]'', которое вернет значение частоты ноты с — 262.
Приведенная программа проигрывает по кругу 3 ноты До, Фа и Си.
==== Дополнительное задание ====
* Измени код программы, чтобы она играла мелодию из нескольких нот с разной длительностью.