roboforum.ru

Технический форум по робототехнике.

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

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

ursus » 25 авг 2018, 19:36

Приветствую, товарищи.
Пытаюсь собрать регулятор громкости на ардуино про микро и энкодере.
Нашел вот такой скетч.
Код: Выделить всёРазвернуть
#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 на ардуине. На других выводах работает криво. Подскажите, пожалуйста, что я делаю не так?
И еще один вопрос. Как поменять направление вращения энкодера? Сейчас он по часовой убавляет, а против прибавляет. По хорошему надо наоборот.

Подключен энкодер вот по этой схеме.
1458887444_encoder_volume_control.jpg

Re: USB Регулятор громкости на ардуино про микро

setar » 25 авг 2018, 20:43

клик это просто замыкатель.
соответственно есть два варианта работы:
1. один контакт вешаем на массу а второй подтягиваем на ноге входа, активным (признаком срабатывания) будет низкий уровень
2. тот же контакт подключаем на VCC через резистор, и детектируем неподтянутую ногу по высокому уровню

я бы выкинул нафиг все три сопротивления как лишние сущности и все три входа A, B , SW сделал по первому варианту.

Re: USB Регулятор громкости на ардуино про микро

ursus » 25 авг 2018, 21:35

Выкинуть не могу. Это модуль готовый. Нет могу конечно, но работает и так.
То что клик замыкатель это я понимаю. И вроде бы даже понимаю про первый пункт. Про второй не понимаю, но да ладно. Самое главное я не понимаю что с этим сделать в скетче.
При нынешнем подключении в мониторе порта вообще нет реакции на нажатие клика. Я так понимаю не правильно подключен пин. Как найти правильный пин в скетче? const int pinButton = 12; Пытался менять пин здесь. Начинает выключать звук поворотом, а на клик по прежнему нет реакции.

Re: USB Регулятор громкости на ардуино про микро

sergey2x » 25 авг 2018, 23:01

pinButton = 16 не?

Re: USB Регулятор громкости на ардуино про микро

ursus » 26 авг 2018, 04:32

Вот ведь. Меня почему то переклинило, что clk на модуле энкодера это кнопка. И я даже не рассматривал другие варианты. Рукалицо... Работает теперь все отлично. Спасибо.
Осталось понять как инвертировать вращение энкодера.

Re: USB Регулятор громкости на ардуино про микро

setar » 26 авг 2018, 09:42

попробуй
Encoder myEnc(2,3);

Re: USB Регулятор громкости на ардуино про микро

ursus » 26 авг 2018, 16:24

Шикарно! Благодарю! Все работает как надо :)

Добавлено спустя 3 часа 50 минут 18 секунд:
Возник тут еще один вопрос.
У данного регулятора есть функция регулировки подсветки пропорционально громкости. На 9 ногу приходит шим с напряжением от 0 до 2в. Т.е. если подключить один светодиод то все будет нормально работать. Но как подключить несколько светодиодов? Если надо просто включить выключить, тогда понятно, ставишь транзистор и на него уже вешаешь светодиоды сколько хочешь. Но при таком варианте не будет управления яркостью. А как сохранить управление яркостью и увеличить максимальный допустимый ток?

Re: USB Регулятор громкости на ардуино про микро

Dmitry__ » 26 авг 2018, 16:29

ursus писал(а): Но при таком варианте не будет управления яркостью.

Почему не будет? Все будет :)

Re: USB Регулятор громкости на ардуино про микро

ursus » 26 авг 2018, 17:03

Да разобрался, спасибо.

Re: USB Регулятор громкости на ардуино про микро

RAV1962 » 11 дек 2019, 21:48

Подскажите, плиз.
А как одновременно с изменением звука в системе управлять громкостью в Foobar 2000?
KEYCODE_MOD_LEFT_ALT, KEYCODE_9
KEYCODE_MOD_LEFT_ALT, KEYCODE_0
Он работает по ASIO, в обход микшера Windows7. Спасибо.

Re: USB Регулятор громкости на ардуино про микро

Angel71 » 12 дек 2019, 22:35

http://wiki.hydrogenaud.io/index.php?title=Foobar2000:Preferences:Keyboard_Shortcuts
There are no global keyboard shortcuts among the predefined keys. One can easily assign global status to one or more of these keys. Good candidates for global assignment are the volume-controling keys: Num + and Num −. Global assignments should be made carefully as they may interfere with your ability to use other applications.

Re: USB Регулятор громкости на ардуино про микро

RAV1962 » 12 дек 2019, 23:22

Спасибо. И, как это добавить в код?

Re: USB Регулятор громкости на ардуино про микро

Angel71 » 13 дек 2019, 10:39

в код примерно так:
Код: Выделить всёРазвернуть
//wiki.hydrogenaud.io/index.php?title=Foobar2000:Preferences:Keyboard_Shortcuts
/*There are no global keyboard shortcuts among the predefined keys. One can easily assign global status to one or more of these keys. Good candidates for global assignment are the volume-controling keys: Num + and Num −. Global assignments should be made carefully as they may interfere with your ability to use other applications.*/

только зачем оно в коде, английский текст дешифровать будете? не мучайтесь, есть же онлайн переводчики, словари и учебники для изучающих языки. ладно, хорошо, знаю один секретный переводчик, сейчас переведу.
Среди предопределенных клавиш нет глобальных сочетаний клавиш. Можно легко назначить глобальный статус одному или нескольким из этих ключей. Хорошими кандидатами для глобального назначения являются клавиши регулировки громкости: Num + и Num -. Глобальные назначения должны выполняться осторожно, поскольку они могут помешать вам использовать другие приложения.

1) читаем, думаем
2) если нужно, повторить пункт 1
3) попробовать настроить в программе такое же сочетание кнопок, как и для винды
4) если не получится (хз, какие она сочетания может назначать), тогда в прошивке дополнительно добавить отправку какого-нибудь сочетания, которое можно назначить в этой фуубар
5) если до этого пункта ничего не получилось, описать более-менее нормально (с учётом, что скорей всего с этой фуубар врядли работали. туда же их документацию и прочее по этой программе): что пробовали сделать, что именно не получается, если нужно ссылочки и т.д.


cron
Rambler\'s Top100 Mail.ru counter