Найти в Дзене
АмперКО

Регулятор громкости на Arduino и энкодере

Началось всё со старого усилителя подключённого к ПК, на котором отсутствовали регулировки громкости. Приходилось регулировать громкость на самом компьютере при помощи мышки или мультимедийной клавиатуры, что не совсем удобно. Вот и пришла идея сделать отдельный регулятор подключаемый по USB. Как раз без дела лежали Arduino pro micro и модуль энкодера. Схема подключения: Перед компиляцией копируем библиотеку Encoder в Arduino(C:\Program Files\Arduino\libraries).
По коду всё просто, читаем текущее значение положения энкодера и сравниваем с предыдущим, если текущее больше, то увеличиваем громкость, если меньше, то уменьшаем. Нажатие на энкодер отключает и включает звук (MUTE). #include <Encoder.h> // The rotary encoder library http://www.pjrc.com/teensy/td_libs_Encoder.html int accel = 1; int c = 0 ; // This is an acceleration factor. Use between 1 and 8 to suit how quickly the volume goes up or down. Encoder myEnc(2, 3); long oldPosition = 0; void setup() { Keyboard.begin(); //S

Началось всё со старого усилителя подключённого к ПК, на котором отсутствовали регулировки громкости. Приходилось регулировать громкость на самом компьютере при помощи мышки или мультимедийной клавиатуры, что не совсем удобно. Вот и пришла идея сделать отдельный регулятор подключаемый по USB. Как раз без дела лежали Arduino pro micro и модуль энкодера.

-2

Схема подключения:

-3
-4

Перед компиляцией копируем библиотеку Encoder в Arduino(C:\Program Files\Arduino\libraries).
По коду всё просто, читаем текущее значение положения энкодера и сравниваем с предыдущим, если текущее больше, то увеличиваем громкость, если меньше, то уменьшаем. Нажатие на энкодер отключает и включает звук (MUTE).

#include <Encoder.h> // The rotary encoder library http://www.pjrc.com/teensy/td_libs_Encoder.html
int accel = 1;
int c = 0 ;
// This is an acceleration factor. Use between 1 and 8 to suit how quickly the volume goes up or down.
Encoder myEnc(2, 3);
long oldPosition = 0;
void setup() {
Keyboard.begin();
//Serial.begin(9600);
}
void loop() {
long newPosition = myEnc.read() / accel;
if (newPosition != oldPosition) {
if(newPosition > oldPosition) {
Remote.increase(); // Увеличить громкость
delay(50);
Remote.clear();
}
if(newPosition < oldPosition) {
Remote.decrease();
delay(50);
Remote.clear();
}
oldPosition = newPosition;
//Serial.println(newPosition);
}
if (digitalRead(16) == LOW && c==0) {
Remote.mute();
delay(10);
Remote.clear();
c=1;
delay (100);
}
if (digitalRead(16) == HIGH && c==1) {
c=0;
delay (100);
}
}