===== Эксперимент 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 ноты До, Фа и Си. ==== Дополнительное задание ==== * Измени код программы, чтобы она играла мелодию из нескольких нот с разной длительностью.