Пытаюсь собрать регулятор громкости на ардуино про микро и энкодере.
Нашел вот такой скетч.
- Код: Выделить всё • Развернуть
#include <HID-Project.h>
#include <HID-Settings.h>
#include <Encoder.h>
Encoder myEnc(3,2);
const int pinLed = LED_BUILTIN;
const int pinButton = 12;
int bulbPin = 9;
int oldPosition = -999;
boolean muted = 0;
int safePosition = 0;
int volume = 0;
int oldVolume = 0;
int actualVolume = 0;
void setup() {
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(pinLed, OUTPUT);
pinMode(pinButton, INPUT_PULLUP);
Serial.begin(9600);
Consumer.begin();
delay(1000);
for(int i = 50; i > 0; i--){
Consumer.write(MEDIA_VOLUME_DOWN);
delay(1);
}
}
void loop() {
int newPosition = myEnc.read();
if (newPosition != oldPosition) {
safePosition = newPosition;
if(newPosition < 0){
safePosition = 0;
myEnc.write(safePosition);
}
if(newPosition > 400){
safePosition = 400;
myEnc.write(safePosition);
}
oldPosition = safePosition;
volume = safePosition / 4;
volume = volume / 2;
noInterrupts();
Serial.print("calc volume: ");
Serial.print(volume);
Serial.print(" act volume: ");
Serial.print(actualVolume);
Serial.println("");
changeVolume();
interrupts();
}
if (!digitalRead(pinButton)) {
Consumer.write(MEDIA_VOLUME_MUTE);
muted = !muted;
delay(300);
}
if(muted){
analogWrite(bulbPin, 0);
}
else{
analogWrite(bulbPin, map(volume, 0, 100, 0, 255));
}
}
void changeVolume(){
if (volume != oldVolume) {
if(volume > oldVolume){
//delay(100);
Consumer.write(MEDIA_VOLUME_UP);
actualVolume = actualVolume + 2;
oldVolume = volume;
}
else{
//delay(100);
Consumer.write(MEDIA_VOLUME_DOWN);
actualVolume = actualVolume - 2;
oldVolume = volume;
}
}
}
Схемы подключения энкодера не приложено. Кое как подключил. Даже работает регулировка громкости. Но вот отключение звука не работает. Не пойму куда подключать пин клика. Громкость нормально регулируется только если пин клика подключен к выводу 2 на ардуине. На других выводах работает криво. Подскажите, пожалуйста, что я делаю не так?
И еще один вопрос. Как поменять направление вращения энкодера? Сейчас он по часовой убавляет, а против прибавляет. По хорошему надо наоборот.
Подключен энкодер вот по этой схеме.