Изменение высоты тона при помощи энкодера

Я новичок в ардуино и я искал способ менять с помощью энкодера звук в зуммере. Потратив много времени в интернете я ничего подобного не нашёл. В итоге собрал код из разных примеров, немного подкорректировал и прокомментировал. Решил поделиться вот таким вот проектом, может кому пригодится.
(Чтобы не возникало ошибок в коде, нужно скачать и установить библиотеки 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 пин)

}

1 лайк

Спасибо!

относительное изменение на 20 герц ухо услышит (но не всякого человека), может изменять на пол тона хотя бы и, я бы взял библиотеку энкодера работающую на прерываниях

А для чего? И почему отдельная библиотека?

если задача не абстрактная, то это освободит loop…
была схожая задача где в устройстве была всего одна кнопка и был буззер,
вот для установки параметров тоны и использовались, длительным нажатием кнопки попадаешь в меню настройки и далее по тональности выбираешь нужный параметр, другого решения не придумал, но я сделал по кругу, в крайнем случае можно посчитать )))

Как вы умудряетесь этот говнокод еще и обсуждать? Ему энкодер на прерываниях не поможет, тока именная серебряная пуля от Российской Федерации.

3 лайка

И что вообще эта тема делает в “Программировании”? Ей прямой путь в “Кружок умелые ручки”.

Я тебе больше скажу - не понимаю, что эта тема делает в “Проектах”? ))

Точно! Это я о чем то задумался, видимо, и написал “Программирование”, а имел ввиду именно “Проекты”.
Ведь в этой теме должны быть проекты полностью с нуля сделанные автором. А кружок умелые ручки только манипулирует чужими идеями.

обычный ардуиновский код да и лично я обсуждаю не код а выбранное изменение тональности