Я новичок в ардуино и я искал способ менять с помощью энкодера звук в зуммере. Потратив много времени в интернете я ничего подобного не нашёл. В итоге собрал код из разных примеров, немного подкорректировал и прокомментировал. Решил поделиться вот таким вот проектом, может кому пригодится.
(Чтобы не возникало ошибок в коде, нужно скачать и установить библиотеки EncButton и TonePitch)
#define TONE_USE_INT
#define TONE_PITCH 440
#include <EncButton.h> //подключаем библиотеку EncButton - для управления энкодером
#include <TonePitch.h> //подключаем библиотеку TonePitch - для воспроизведения звука на зуммер
//задаём переменную, которую будем изменять
int val = 500;
// энкодер <CLK, DT, SW>
EncButton<EB_TICK, 2, 3, 4> enc; // к пину 2 подключаем CLK, к пину 3 подключаем DT, к пину 4 подключаем SW
void setup() {
// устанавливаем свзяь с портом
Serial.begin(9600);
}
void loop() {
//с помощью условий проверяем в какую сторону поворачивается ручка энкодера
enc.tick();
//если вправо
if (enc.right()) {
val += 20; //изменяем переменную на +20
Serial.println(val); //выводим в порт текущее значение переменной
tone(8, val, 500); //изменяем высоту тона в 8 пине (высота тона = переменной val)
}
//если влево
if (enc.left()) {
val -= 20; //изменяем переменную на -20
Serial.println(val);
tone(8, val, 500);
}
tone(8, val, 500); //всегда воспроизводим звук на зуммер (на 8 пин)
}