USB Multimedia клавиатура arduino pro micro

shcoder
Offline
Зарегистрирован: 19.11.2015

Добрый день. Начинаю ардуинить так сказать. Хочу сделать управление громкостью, переключение треков, в общем. для начала хочу по кнопке увеличивать громкость накидал такой скетч

#include <Keyboard.h>
 
int button1 = 16;
int ledPin = 8;
int tablo = 5;
//char ctrlKey = 0xaf;
 
 
void setup() {
  Keyboard.begin();
  //Serial.begin(9600);
   pinMode (ledPin, OUTPUT);
   pinMode(button1, INPUT_PULLUP);
 // pinMode(button1, INPUT);
   pinMode (tablo, OUTPUT);
}
 
void loop() {
 // if (digitalRead(tablo) == LOW)
//  {
  //  digitalWrite(tablo, HIGH);
  //  }
  //if the button is pressed
  if(digitalRead(button1) == HIGH)
  {
    //Send the message
    digitalWrite (ledPin, LOW);
    delay(0);
  }
  else 
  {
    digitalWrite (ledPin, HIGH);
    //Keyboard.print("password!");
    delay(140);
Keyboard.press(0x81);
//Keyboard.write(127);
//Keyboard.press(0xaf);
  delay(100);
//  Keyboard.releaseAll();
    }
}

Он при нажатии на кнопку зажигает светодиод и по идее должен прибавлять громкость, но что-то не выходит.... не могу понять почму :( прошу пнуть в нужном направлении... Далее в идиале хочется сделать управление планшетом с пульта через ИК приемник. Мультимеди + запуск навигашки + вкл/выкл + еще какие-нибудь приложения.

С ардуино знаком пару дней, это второй скетч после миганию светодиодом)))) сильно прошу не бить :)

Начинаю догонять немного. Насколько я правильно понял проблема заключается в том, что стандартная библиотека ардуины имеет функционал обычной клавиатуры без мультимедиа клавиш, чтобы добиться нужного эффекта от нужных кнопок нужно каким - то образом поправить библиотеку, или сделать новую... Видел в интернетах мануалы по правке USBAPI и HID в каталоге arduino/hardware/core/..../arduino. Попробовал сделать так же, затык при компиляции. Посмотрел там автор пошел через добавление нового класса remoute... 

Вопрос такой, вместо этого можно ли в стандартную библиотеку просто добавить коды кнопок мультимедиаклавиатуры? Пробовал не вышло, полагаю что делаю что-то не то :( заранее спасибо за ответ.

А и еще вместо keyboard.write для передачи кода клавиши нажатой, надо использовать keyboard.press это тоже понял :). Кто может прошу помочь, заранее спасибо!

 
shcoder
Offline
Зарегистрирован: 19.11.2015

Если не там тему создал, прошу извинить и перенести. Не определился до конца сюда или в раздел с программированием :).

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Во-первых, выложите код как положено - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii - (задоно уберите ненужные, закомментированные куски - глаза разбегаются).

Во вторых объясните по строкам кода, что по Вашему он делает (или должен делать). Толком, спокйон объясните.

А там видно будет.

shcoder
Offline
Зарегистрирован: 19.11.2015

Прошу прощения, исправляюсь :).

01#include <Keyboard.h>
02 
03int button1 = 16;
04int ledPin = 8;
05//char ctrlKey = 0xaf; //переменная для кода клавиши
06 
07 
08void setup() {
09  Keyboard.begin();
10   pinMode (ledPin, OUTPUT);
11   pinMode(button1, INPUT_PULLUP);
12}
13 
14void loop() {
15  if(digitalRead(button1) == HIGH)
16  {
17    digitalWrite (ledPin, LOW);
18    delay(0);
19  }
20  else
21  {
22    digitalWrite (ledPin, HIGH);
23    //Keyboard.print("password!"); //набирал фразу password, сейчас не актуально
24    delay(140);
25//Keyboard.press(ctrlKey);
26Keyboard.press(123); // передаю код нажатия клавиши
27  delay(100);
28  //Keyboard.releaseAll(); // это сам до конца не понимаю зачем, что с ним что без него одинаково не работает :(
29    }
30}

Значит смысл такой, нажимаем кнопку, должно быть действие звука, включен или выключен, уменьшение или увеличение... при этом загорается светодиод, который просто говорит о том что кнопка нажата, отпускаем кнопку светодиод тухнет... кнопка и светодиод подключены через резисторы кнопка резистор - 1 кОМ, светодиод резистор - 110 Ом.

Готовлю планшет в интеграцию в машину, хочется иметь управление мультимедиа с ИК порта, по-этому сначала пытаюсь сделать это с кнопки...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Хорошо, а теперь еще опишите что этот код по-Вашему делает, что он должен делать по-задумке и в чём сосбствнно состоит Ваша проблема.

Upd: ага, Вы уже что-то дописали. Так, а проблема-то в чём? Что-то не так срабатывает?

shcoder
Offline
Зарегистрирован: 19.11.2015

Пока он должен добавить громкость и зажечь светодиод при нажатии кнопки, в виде индикации что кнопка нажата...

Как написал выше готовлю планшет к интеграции в машину, хочется иметь управление мультимедиа с ИК порта, по-этому сначала пытаюсь сделать это с кнопки...

Интересует управление громкостью, переключение треков, в общем использование мультимедиа клавиатуры, клавиш которых нету в стандартной библиотеке :(... В идиале хочется еще запускать софт, но это думаю реализовать через arduino понималки типа tasker

Проблема в том, что не работает управление мультимедиа :(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Т.е. Вы хотите, что ардуина прикинулась клавиатурой и гнало компьютеру нажатия.

Тогда Вам надо сделать следующее.

1. Подключите к компьютеру честную клавиатуру, которая умеет управлять ММ и считайте скан-коды соответствующих клавиш.

2. Добавьте считанные скан коды в библиотеку и пусть Ардуина их шлёт.

Считывать скан коды умеете?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ЕвгенийП, там же не только в кодах дело. Клава должна себя при инициализации зарегистрировать как мультимедийная. Что разумееется обычная библа не делает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dimax пишет:

ЕвгенийП, там же не только в кодах дело. Клава должна себя при инициализации зарегистрировать как мультимедийная. Что разумееется обычная библа не делает.

Мне почему-то казалось, что эта проблема у ТС решена (не знаю с чего), сейчас перечитал его посты, да, Вы правы.

shcoder
Offline
Зарегистрирован: 19.11.2015

И как добиться нужного результата? Я уже и нагуглил скан коды, и с помощью xev выдернул те что у меня, само собой они одинаковые... а вот куда дальше копать не понимаю%)

Находил в интернетах вот такую статью http://stefanjones.ca/blog/arduino-leonardo-remote-multimedia-keys/ 

Пробовал делать по ней, даже склонировал с гита полностью весь каталог ардуино, результат еще хуже , при компиляции сплошные ошибки...

Т.е. получается заменить vendor ID обычной клавы на мультимедийные?%) если да тогда два вопроса, могу ли я от своей клавиатуры мультимедийной их взять, и второй вопрос где это меняется?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

shcoder, статью вы нашли правильную. На форуме есть тема, в которой всё по этой статье давно обсудили.

shcoder
Offline
Зарегистрирован: 19.11.2015

Это тоже находил, вот и говорю что при проделки этих трюков ошибка компиляции и все :( уперся в тупик... Там еще упоминается некий энкодер... у меня простая схема, планшет - ардуина через OTG-USB и все...прошу прощения если глупость написал, до этого никогда не сталкивался с электротехникой,  только вот начинаю догонять :)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

shcoder, никакого тупика тут быть не может. Вы просто невнимательно делаете, или невнимательно прочли ту тему и упустили что-то важное.

shcoder
Offline
Зарегистрирован: 19.11.2015

Странно, вроде на несколько раз переделывал :(... попробую еще раз :(...

shcoder
Offline
Зарегистрирован: 19.11.2015

енкодер в моем случае это что?)

скачал архив распаковал в каталог с arduino IDE, после чего программа вообще перестала запускаться :(

shcoder
Offline
Зарегистрирован: 19.11.2015

а и еще там смотрю в примерах крутилки используются, у меня просто кнопка... 

shcoder
Offline
Зарегистрирован: 19.11.2015

dimax пишет:

shcoder, никакого тупика тут быть не может. Вы просто невнимательно делаете, или невнимательно прочли ту тему и упустили что-то важное.

С Вами как-то можно связаться, icq, jabber, соц сети? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shcoder пишет:

енкодер в моем случае это что?)

......

а и еще там смотрю в примерах крутилки используются

Так ото ж.

shcoder
Offline
Зарегистрирован: 19.11.2015
 
 
Внимание: platform.txt из ядра 'Arduino i686 Boards' содержит устаревшие recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}", автоматически преобразовано в recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}". Ожидайте обновления ядра.
Внимание: platform.txt из ядра 'Arduino i586 Boards' содержит устаревшие recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}", автоматически преобразовано в recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}". Ожидайте обновления ядра.
Плата Intel:i586:izmir_fd не устанавливает свойство 'build.board'. Автоматически выбрано: I586_IZMIR_FD
Плата Intel:i586:izmir_fg не устанавливает свойство 'build.board'. Автоматически выбрано: I586_IZMIR_FG
Плата Intel:i686:izmir_ec не устанавливает свойство 'build.board'. Автоматически выбрано: I686_IZMIR_EC
/home/plus/Arduino/sketch_nov23b/sketch_nov23a/sketch_nov23a.ino/sketch_nov23a.ino.ino:1:20: fatal error: Bounce.h: No such file or directory
 #include <Bounce.h>
                    ^
compilation terminated.
exit status 1
Ошибка компиляции.
 
Еще раз проделал тоже самое :(... версия Arduino IDE 1.6.6
shcoder
Offline
Зарегистрирован: 19.11.2015

скачал версию 1.0.5. добавил код как в конце статьи http://arduino.ru/forum/programmirovanie/usb-hid-multimedia-klaviatura-pod-android?page=1

Ошибка компиляции :(

sketch_nov23a:5: error: ‘Encoder’ does not name a type
sketch_nov23a:7: error: ‘Bounce’ does not name a type
sketch_nov23a.ino: In function ‘void loop()’:
sketch_nov23a:17: error: ‘Enc_1’ was not declared in this scope
sketch_nov23a:30: error: ‘mute’ was not declared in this scope
 
Может дело в том что мнесто энкодера мне надо как -то на кнопки переделать ?:(
shcoder
Offline
Зарегистрирован: 19.11.2015

в общем в том самом последнем коде закоментил строки касающиеся енкодера и пару скоб фигруных, вроде скомпилил, это мне сказало о том что файлик и библиотека подключились нормально... теперь перехреначить надо вместо реле на кнопки так ?%)

shcoder
Offline
Зарегистрирован: 19.11.2015
01#include <Bounce.h>
02#define ENCODER_DO_NOT_USE_INTERRUPTS // без прерываний.
03#include <Encoder.h>
04 
05int button1 = 16;
06int ledPin = 8;
07//Encoder Enc_1(9, 8);//Ноги энкодера
08//const int pin_mute = 7;//Кнопка mute
09//Bounce mute = Bounce(pin_mute,5);
10 
11void setup() {
12  //pinMode(pin_mute, INPUT_PULLUP);
13  pinMode(button1, INPUT_PULLUP);
14  pinMode(ledPin, OUTPUT);
15  Remote.begin();
16}
17long old_pos = 0;
18void loop() {
19  long new_pos;
20//Увеличение громкости
21  //new_pos = Enc_1.read()/4;
22  if (new_pos > old_pos) {
23    Remote.increase();
24    Remote.clear();
25    old_pos = new_pos;
26  }
27//Уменьшение громкости
28  if (new_pos < old_pos) {
29    Remote.decrease();
30    Remote.clear();
31    old_pos = new_pos;
32  }
33//Кнопка mute
34  //if (mute.update()){
35   // if (mute.read()==0){
36     if (digitalRead(button1) == HIGH)
37     {
38     digitalWrite (ledPin, LOW);
39     delay(200);
40     }
41     else
42     {
43     digitalWrite (ledPin, HIGH);
44      
45     Remote.mute();
46     Remote.clear();
47     delay(500);
48    }
49       
50   }

 

Переделал на кнопку, пока в тестовом режиме только клавиша MUTE. Вроде все работает :) А ну индикацию светодиода оставил )  

Код поправил

shcoder
Offline
Зарегистрирован: 19.11.2015

А как теперь портировать все это хозяйство на новую версию 1.6.6 ?

shcoder
Offline
Зарегистрирован: 19.11.2015
001#include <IRremote.h>
002int RECV_PIN = 11;
003IRrecv irrecv(RECV_PIN);
004decode_results results;
005bool LampState = false;
006//#include <Bounce.h>
007//#define ENCODER_DO_NOT_USE_INTERRUPTS // без прерываний.
008//#include <Encoder.h>
009int button1 = 16;
010int ledPin = 8;
011//Encoder Enc_1(9, 8);//Ноги энкодера
012//const int pin_mute = 7;//Кнопка mute
013//Bounce mute = Bounce(pin_mute,5);
014 
015 
016#define P1 0xFF009867 // Play-pause
017#define P2 0xFF00906F // Freq-
018#define P3 0xFF0040BF // Prev
019#define P4 0xFF00609F // vol-
020#define P5 0xFF0038C7 // Freq+
021#define P6 0xFF00C837 // Next
022#define P7 0xFF0020DF // Vol+
023 
024 
025 
026void setup() {
027  //pinMode(pin_mute, INPUT_PULLUP);
028  irrecv.enableIRIn();
029  pinMode(button1, INPUT_PULLUP);
030  pinMode(ledPin, OUTPUT);
031 Remote.begin();
032}
033//long old_pos = 0;
034void loop() {
035   
036  if (irrecv.decode(&results))
037  {
038      if (results.value == P5) //Код кнопки
039      {
040          LampState = !LampState;
041          if (LampState)
042          {
043               Remote.mute();
044                           Remote.clear();
045          }
046      }
047//Увеличение громкости
048if (results.value == P7) //Код кнопки
049{
050LampState = !LampState;
051          if (LampState)
052          {
053               Remote.increase();
054                           Remote.clear();
055          }
056}
057////////////////////////////////////
058//Уменьшение громкости
059if (results.value == P4) //Код кнопки
060{
061LampState = !LampState;
062          if (LampState)
063          {
064               Remote.decrease();
065                           Remote.clear();
066          }
067}
068////////////////////////////////////
069//Play - pause
070if (results.value == P1) //Код кнопки
071{
072LampState = !LampState;
073          if (LampState)
074          {
075               Remote.play();
076                           Remote.clear();
077          }
078}
079////////////////////////////////////
080    irrecv.resume(); // Получаем следующее значение
081  }
082 
083//Next track
084if (results.value == P6) //Код кнопки
085{
086LampState = !LampState;
087          if (LampState)
088          {
089               Remote.next();
090                        //   Remote.clear();
091          }
092}
093   
094////////////////////////////////////
095//Previous track
096if (results.value == P3) //Код кнопки
097{
098LampState = !LampState;
099          if (LampState)
100          {
101               Remote.previous();
102                        //   Remote.clear();
103          }
104}
105   
106////////////////////////////////////
107 
108   }

Вот поправил через ИК пульт на пульте у меня всего 6 кнопок ) по этому пока так

 

crazzy.13
Offline
Зарегистрирован: 08.09.2016

Доброго  времени все!

не могу понять один момент в кодах. откуда берется переменная remote??

у меня всегда на нее ругается и ее помирить я понять не могу.

 

Уровень моих познаний очень слабый. Почти никакой. Решил собрать регулятор громкости по USB на базе atmega8a-ua(ибо есть у меня USB-фитюлька, которая спустя несколько секунд после подачи на нее питания, отправлят сигнал о нажатии кнопки "F1"

есть arduino pro-micro(на ней строю часы с цифрами на 2 строки) и nano, которая будет в качестве программатора для атмега8

"

...
      Remote.mute();

      ^

exit status 1
'Remote' was not declared in this scope

"

Вот так и все.

Помогите, ткнув в косяки

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

crazzy.13, ответ в названии темы.

Bati4eli
Offline
Зарегистрирован: 28.03.2017

Помогите, пожалуйста, к готовому виду привести #23

Откуда действительно берется класс Remote, если он не объявлен? Я перечитал и паралелльные темы и нашел два файла HID.cpp и USBAPI.h , что с ними делать ? Да я вижу что внутри них есть упоминание об этом Remote. Но как подключить всё это я не понимаю. Если не сложно могли бы готовый архив собрать.

Антон142
Offline
Зарегистрирован: 21.01.2016

Хорошие такие! Cамое главное не пишут, откуда берется этот дураций Remote?

dimax в названии темы не написано откуда должна взятся билиотека Remoute или куда её необходимо интегрировать!