USB Multimedia клавиатура arduino pro micro
- Войдите на сайт для отправки комментариев
Добрый день. Начинаю ардуинить так сказать. Хочу сделать управление громкостью, переключение треков, в общем. для начала хочу по кнопке увеличивать громкость накидал такой скетч
Он при нажатии на кнопку зажигает светодиод и по идее должен прибавлять громкость, но что-то не выходит.... не могу понять почму :( прошу пнуть в нужном направлении... Далее в идиале хочется сделать управление планшетом с пульта через ИК приемник. Мультимеди + запуск навигашки + вкл/выкл + еще какие-нибудь приложения.
С ардуино знаком пару дней, это второй скетч после миганию светодиодом)))) сильно прошу не бить :)
Начинаю догонять немного. Насколько я правильно понял проблема заключается в том, что стандартная библиотека ардуины имеет функционал обычной клавиатуры без мультимедиа клавиш, чтобы добиться нужного эффекта от нужных кнопок нужно каким - то образом поправить библиотеку, или сделать новую... Видел в интернетах мануалы по правке USBAPI и HID в каталоге arduino/hardware/core/..../arduino. Попробовал сделать так же, затык при компиляции. Посмотрел там автор пошел через добавление нового класса remoute...
Вопрос такой, вместо этого можно ли в стандартную библиотеку просто добавить коды кнопок мультимедиаклавиатуры? Пробовал не вышло, полагаю что делаю что-то не то :( заранее спасибо за ответ.
А и еще вместо keyboard.write для передачи кода клавиши нажатой, надо использовать keyboard.press это тоже понял :). Кто может прошу помочь, заранее спасибо!
Если не там тему создал, прошу извинить и перенести. Не определился до конца сюда или в раздел с программированием :).
Во-первых, выложите код как положено - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii - (задоно уберите ненужные, закомментированные куски - глаза разбегаются).
Во вторых объясните по строкам кода, что по Вашему он делает (или должен делать). Толком, спокйон объясните.
А там видно будет.
Прошу прощения, исправляюсь :).
01
#include <Keyboard.h>
02
03
int
button1 = 16;
04
int
ledPin = 8;
05
//char ctrlKey = 0xaf; //переменная для кода клавиши
06
07
08
void
setup
() {
09
Keyboard.begin();
10
pinMode (ledPin, OUTPUT);
11
pinMode(button1, INPUT_PULLUP);
12
}
13
14
void
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);
26
Keyboard.press(123);
// передаю код нажатия клавиши
27
delay(100);
28
//Keyboard.releaseAll(); // это сам до конца не понимаю зачем, что с ним что без него одинаково не работает :(
29
}
30
}
Значит смысл такой, нажимаем кнопку, должно быть действие звука, включен или выключен, уменьшение или увеличение... при этом загорается светодиод, который просто говорит о том что кнопка нажата, отпускаем кнопку светодиод тухнет... кнопка и светодиод подключены через резисторы кнопка резистор - 1 кОМ, светодиод резистор - 110 Ом.
Готовлю планшет в интеграцию в машину, хочется иметь управление мультимедиа с ИК порта, по-этому сначала пытаюсь сделать это с кнопки...
Хорошо, а теперь еще опишите что этот код по-Вашему делает, что он должен делать по-задумке и в чём сосбствнно состоит Ваша проблема.
Upd: ага, Вы уже что-то дописали. Так, а проблема-то в чём? Что-то не так срабатывает?
Пока он должен добавить громкость и зажечь светодиод при нажатии кнопки, в виде индикации что кнопка нажата...
Как написал выше готовлю планшет к интеграции в машину, хочется иметь управление мультимедиа с ИК порта, по-этому сначала пытаюсь сделать это с кнопки...
Интересует управление громкостью, переключение треков, в общем использование мультимедиа клавиатуры, клавиш которых нету в стандартной библиотеке :(... В идиале хочется еще запускать софт, но это думаю реализовать через arduino понималки типа tasker
Проблема в том, что не работает управление мультимедиа :(
Т.е. Вы хотите, что ардуина прикинулась клавиатурой и гнало компьютеру нажатия.
Тогда Вам надо сделать следующее.
1. Подключите к компьютеру честную клавиатуру, которая умеет управлять ММ и считайте скан-коды соответствующих клавиш.
2. Добавьте считанные скан коды в библиотеку и пусть Ардуина их шлёт.
Считывать скан коды умеете?
ЕвгенийП, там же не только в кодах дело. Клава должна себя при инициализации зарегистрировать как мультимедийная. Что разумееется обычная библа не делает.
ЕвгенийП, там же не только в кодах дело. Клава должна себя при инициализации зарегистрировать как мультимедийная. Что разумееется обычная библа не делает.
И как добиться нужного результата? Я уже и нагуглил скан коды, и с помощью xev выдернул те что у меня, само собой они одинаковые... а вот куда дальше копать не понимаю%)
Находил в интернетах вот такую статью http://stefanjones.ca/blog/arduino-leonardo-remote-multimedia-keys/
Пробовал делать по ней, даже склонировал с гита полностью весь каталог ардуино, результат еще хуже , при компиляции сплошные ошибки...
Т.е. получается заменить vendor ID обычной клавы на мультимедийные?%) если да тогда два вопроса, могу ли я от своей клавиатуры мультимедийной их взять, и второй вопрос где это меняется?
shcoder, статью вы нашли правильную. На форуме есть тема, в которой всё по этой статье давно обсудили.
Это тоже находил, вот и говорю что при проделки этих трюков ошибка компиляции и все :( уперся в тупик... Там еще упоминается некий энкодер... у меня простая схема, планшет - ардуина через OTG-USB и все...прошу прощения если глупость написал, до этого никогда не сталкивался с электротехникой, только вот начинаю догонять :)
shcoder, никакого тупика тут быть не может. Вы просто невнимательно делаете, или невнимательно прочли ту тему и упустили что-то важное.
Странно, вроде на несколько раз переделывал :(... попробую еще раз :(...
енкодер в моем случае это что?)
скачал архив распаковал в каталог с arduino IDE, после чего программа вообще перестала запускаться :(
а и еще там смотрю в примерах крутилки используются, у меня просто кнопка...
shcoder, никакого тупика тут быть не может. Вы просто невнимательно делаете, или невнимательно прочли ту тему и упустили что-то важное.
С Вами как-то можно связаться, icq, jabber, соц сети?
енкодер в моем случае это что?)
......
а и еще там смотрю в примерах крутилки используются
Так ото ж.
скачал версию 1.0.5. добавил код как в конце статьи http://arduino.ru/forum/programmirovanie/usb-hid-multimedia-klaviatura-pod-android?page=1
Ошибка компиляции :(
в общем в том самом последнем коде закоментил строки касающиеся енкодера и пару скоб фигруных, вроде скомпилил, это мне сказало о том что файлик и библиотека подключились нормально... теперь перехреначить надо вместо реле на кнопки так ?%)
1
01
#include <Bounce.h>
02
#define ENCODER_DO_NOT_USE_INTERRUPTS // без прерываний.
03
#include <Encoder.h>
04
05
int
button1 = 16;
06
int
ledPin = 8;
07
//Encoder Enc_1(9, 8);//Ноги энкодера
08
//const int pin_mute = 7;//Кнопка mute
09
//Bounce mute = Bounce(pin_mute,5);
10
11
void
setup
() {
12
//pinMode(pin_mute, INPUT_PULLUP);
13
pinMode(button1, INPUT_PULLUP);
14
pinMode(ledPin, OUTPUT);
15
Remote.begin();
16
}
17
long
old_pos = 0;
18
void
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. Вроде все работает :) А ну индикацию светодиода оставил )
Код поправил
А как теперь портировать все это хозяйство на новую версию 1.6.6 ?
001
#include <IRremote.h>
002
int
RECV_PIN = 11;
003
IRrecv irrecv(RECV_PIN);
004
decode_results results;
005
bool
LampState =
false
;
006
//#include <Bounce.h>
007
//#define ENCODER_DO_NOT_USE_INTERRUPTS // без прерываний.
008
//#include <Encoder.h>
009
int
button1 = 16;
010
int
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
026
void
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;
034
void
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
//Увеличение громкости
048
if
(results.value == P7)
//Код кнопки
049
{
050
LampState = !LampState;
051
if
(LampState)
052
{
053
Remote.increase();
054
Remote.clear();
055
}
056
}
057
////////////////////////////////////
058
//Уменьшение громкости
059
if
(results.value == P4)
//Код кнопки
060
{
061
LampState = !LampState;
062
if
(LampState)
063
{
064
Remote.decrease();
065
Remote.clear();
066
}
067
}
068
////////////////////////////////////
069
//Play - pause
070
if
(results.value == P1)
//Код кнопки
071
{
072
LampState = !LampState;
073
if
(LampState)
074
{
075
Remote.play();
076
Remote.clear();
077
}
078
}
079
////////////////////////////////////
080
irrecv.resume();
// Получаем следующее значение
081
}
082
083
//Next track
084
if
(results.value == P6)
//Код кнопки
085
{
086
LampState = !LampState;
087
if
(LampState)
088
{
089
Remote.next();
090
// Remote.clear();
091
}
092
}
093
094
////////////////////////////////////
095
//Previous track
096
if
(results.value == P3)
//Код кнопки
097
{
098
LampState = !LampState;
099
if
(LampState)
100
{
101
Remote.previous();
102
// Remote.clear();
103
}
104
}
105
106
////////////////////////////////////
107
108
}
Вот поправил через ИК пульт на пульте у меня всего 6 кнопок ) по этому пока так
Доброго времени все!
не могу понять один момент в кодах. откуда берется переменная remote??
у меня всегда на нее ругается и ее помирить я понять не могу.
Уровень моих познаний очень слабый. Почти никакой. Решил собрать регулятор громкости по USB на базе atmega8a-ua(ибо есть у меня USB-фитюлька, которая спустя несколько секунд после подачи на нее питания, отправлят сигнал о нажатии кнопки "F1"
есть arduino pro-micro(на ней строю часы с цифрами на 2 строки) и nano, которая будет в качестве программатора для атмега8
"
...
Remote.mute();
^
exit status 1
'Remote' was not declared in this scope
"
Вот так и все.
Помогите, ткнув в косяки
crazzy.13, ответ в названии темы.
Помогите, пожалуйста, к готовому виду привести #23
Откуда действительно берется класс Remote, если он не объявлен? Я перечитал и паралелльные темы и нашел два файла HID.cpp и USBAPI.h , что с ними делать ? Да я вижу что внутри них есть упоминание об этом Remote. Но как подключить всё это я не понимаю. Если не сложно могли бы готовый архив собрать.
Хорошие такие! Cамое главное не пишут, откуда берется этот дураций Remote?
dimax в названии темы не написано откуда должна взятся билиотека Remoute или куда её необходимо интегрировать!