vvgnovanet разделяю вашу точку зрания. У меня больше доверия к железу с открытым софтом. А в операционках есть масса уязвимостей и работающий на них софт с важными данными может быть скомпраментирован.
Но для многих не критичных вещей в таких программах можно хранить пароли.
Но к сожалению и нажатия клавиш тоже можно перехватывать.
Связываться с какими-то аппаратными USB-решениями нет никакой надобности, не считая единичных случаев, например на предприятиях, где запрещено устанавливать свои программы.
Обычно в таких местах за подключение своего устройства можно для начала получить выговор, а при рецедиве - 10 лет гулагов ))
Имхо. "Эмулятор мыши, клавиатуры" - это зависит от драйвера Арудине установленной в ОС. Нужно в драйвер Ардуины добавить функции поддержки устройств.
Подключал на разные устройства, даже на смартфоне с OTG работает. Там стандартного драйвера для клавиатуры хватает.
На счёт памяти - можно использовать Digispark Pro kickstarter ATTINY167 ( размер платки 18 на 27 мм ) у китайцев оно есть. Но нужно будет шаманить с разъёмом .
Купил "Arduino Pro Micro" (чип ATmega32U4) чтобы сделать устройство с подобным функционалом. Скетчь правда лил не тот что дали (т.к. тот что дали незнаю вообще подходит ли для этой платы ?)
В скетч использует библиотеку Low-Power (Библиотека малой мощности для Arduino). Короче плата видимо спит и не определяеться. В Ардуино IDE порт неактивный. А в деспечере устройств пишет "Unknown Device" - проблема.
Как быть видио нужно перепрошить плату. Но она же не определяеться. Может для этой платы "Arduino Pro Micro" (чип ATmega32U4) можно использовать - программатор ?
Делаю джойстик/эмулятор клавиатуры, но столкнулся с проблемой: назначенные кнопки (обычно для игр AWDS) не работают на перемещение в играх (пробовал несколько, начиная с Quake2), но работают на другие функции: огонь, смена оружия, смена вида и т.д.
Использую стандартную библиотеку "Keyboard.h" и стандартные команды ” Keyboard.write”, “Keyboard.print”, “Keyboard.press”
Кто может подсказать, почему не работает движение?
Dimax – что скажешь? Ты вроде хорошо раскопал эмулятор клавиатуры..
У меня всё работает, сделал 2 реализации регулятора громкости с энкодером на ардуино про мини.
Но есть один недостаток, который очень сильно бесит, через неопределенный промежуток времени бездействия (когда я некоторое время не трогаю энкодер) ардуино будто засыпает. Мне нужно быстро включить mute, или изменить громкость, но вращение энкодера ни на что не влияет, и только через 2-3 сек появлется возможность менять громкость. Работает это крайне нестабильно, то меняет громоксть сразу, то не действует никак вообще пару секунд.
Библиотека TrinketHidCombo. Как я понял в файле TrinketHidCombo.h лежат #define с кодировками клавиш. Вопрос, как добавить свой #define и свою кнопку?
Регулятор не работает корректно на ГУ авто Teyes SPRO, китайцы что-то перемудрили с андроидом. А конкретней громкость на ГУ регулируют не стандартные keycodы 114/115, а именно 252/253.
Вариант переназначение аппаратных кнопок на ГУ только в крайнем случае, так как скорее всего отвалятся аппаратные клавиши на лицевой панели устройства.
Здравствуйте ! Что изменить usbconfig.h чтобы вместо ноги D5 была нога D4 . На моей nano с 5 по 12 ноги будет сидеть матричная клавиатура , а это разъем из восьми контактов в ряд . Помогите новичку плиз ....
Здравствуйте ! Что изменить usbconfig.h чтобы вместо ноги D5 была нога D4 . На моей nano с 5 по 12 ноги будет сидеть матричная клавиатура , а это разъем из восьми контактов в ряд .
#define USB_CFG_PULLUP_BIT 5
Меняешь 5-ку на 4-ку. Но, т.к. порт D4 тоже занят, то нужно дополнительно изменить следующий параметр:
Спасибо! Но после замены в usbconfig #define USB_CFG_PULLUP_BIT на 3 - usb не опознано. Естественно в скетче d5 менялось на 3. После тестовой замены d5 на d6 также неопознано. В стандартном включении d2, d4, d5 все работает. Что не так?
UPD... Все работает ...Супер... Проблема была в usb кабеле . Спасибо за помощь
Доброго день, огромное спасибо за библиотеку, пользуюсь уже несколько лет, но в работе возникают проблемы которые меня мягко говоря расстраивают.
Вкратце, ардуинка используется для управления компьютером в автомобиле, установлена материнская плата, усилители и понижающие блоки питания, реле, а на панели дисплей с тачскрином. Также ардуина подключена к мультирулю автомобиля и в зависимости от нажатия разных клавиш эмалирует нажатия мультимедиа клавиш, тише громче и тд, а при выключении зажигания отправляет нажатия клавиши выключения и компьютер уходит в гибернацию, а реле выключают питание на усилителях и самой ардуине.
И в целом все работает хорошо кроме тех моментов когда что-то происходит с материнской платой, зависает или выключается, тогда при попытке отправить нажатие клавиши ардуинка зависает и как результат все остаётся в включённом состоянии, высаживает аккумулятор. Функция isConnect по началу указывает есть ли подключение из false в true, а потом из true в false не переходит. Есть ли возможность ещё как-нибудь определить состояние подключения?
И вторая, ситуация это долгий отклик на нажатия, но не постоянно а только тогда когда долго не было, нажал, задержка 3-7 секунд, сразу же нажимаешь ещё раз и срабатывает мгновенно. Если отправлять какую нибудь клавишу раз в секунду все нормализуется и отлетает моментально, но это не дело. Может есть какие-либо мыли по этому поведению?
хочу глянуть скетч, но немогу его сказать. А есть ли другая ссылка может хоть времменая
Не удается получить доступ к сайту
Превышено время ожидания ответа от сайта yadi.sk.
Попробуйте сделать следующее:
518 байт остаеться (6012 - 5494 )
Маловато даже на хранение паролей.
если на пароль 20 байт в среднем (номер пароля и пароль на 8 символов по 2 байта)
т.е. всего получиться записать 25 паролей кроме тех которые уже в скейче просипаны.
Ну да, мне хватает. Можно использовать и ардуину по мощнее там влезет туча паролей но размеры у устройства будут побольше.
хочу глянуть скетч, но немогу его сказать. А есть ли другая ссылка может хоть времменая
https://www.dropbox.com/s/0y7yrhoqlsf3et4/pass.zip?dl=0
vvgnovanet разделяю вашу точку зрания. У меня больше доверия к железу с открытым софтом. А в операционках есть масса уязвимостей и работающий на них софт с важными данными может быть скомпраментирован.
Но для многих не критичных вещей в таких программах можно хранить пароли.
Но к сожалению и нажатия клавиш тоже можно перехватывать.
Имхо.
"Эмулятор мыши, клавиатуры" - это зависит от драйвера Арудине установленной в ОС.
Нужно в драйвер Ардуины добавить функции поддержки устройств.
Связываться с какими-то аппаратными USB-решениями нет никакой надобности, не считая единичных случаев, например на предприятиях, где запрещено устанавливать свои программы.
Обычно в таких местах за подключение своего устройства можно для начала получить выговор, а при рецедиве - 10 лет гулагов ))
Подключал на разные устройства, даже на смартфоне с OTG работает. Там стандартного драйвера для клавиатуры хватает.
На счёт памяти - можно использовать Digispark Pro kickstarter ATTINY167 ( размер платки 18 на 27 мм ) у китайцев оно есть. Но нужно будет шаманить с разъёмом .
518 байт остаеться (6012 - 5494 )
Маловато даже на хранение паролей.
если на пароль 20 байт в среднем (номер пароля и пароль на 8 символов по 2 байта)
т.е. всего получиться записать 25 паролей кроме тех которые уже в скейче просипаны.
Ну да, мне хватает. Можно использовать и ардуину по мощнее там влезет туча паролей но размеры у устройства будут побольше.
Я планировал сделать решение на базе Arduino с микроконтроллером ATmega32U4.
JuraPal, конечно это всё реализуемо https://youtu.be/-YXAd6oBHNk
Будет время попробую )))
Киев.
Народ а тут както можно писать в личку или оставлять свой телеграмм ?
Народ а тут както можно писать в личку или оставлять свой телеграмм ?
Хз, я не нашел как тут в личку писать. Оставляй сам свои данные. Скайп, телеграм, вайбер, емайл.
мой телеграмм такой 38 098 157-99-23
Купил "Arduino Pro Micro" (чип ATmega32U4) чтобы сделать устройство с подобным функционалом. Скетчь правда лил не тот что дали (т.к. тот что дали незнаю вообще подходит ли для этой платы ?)
В скетч использует библиотеку Low-Power (Библиотека малой мощности для Arduino). Короче плата видимо спит и не определяеться. В Ардуино IDE порт неактивный. А в деспечере устройств пишет "Unknown Device" - проблема.
Как быть видио нужно перепрошить плату. Но она же не определяеться. Может для этой платы "Arduino Pro Micro" (чип ATmega32U4) можно использовать - программатор ?
Добрый день форумчане.
Делаю джойстик/эмулятор клавиатуры, но столкнулся с проблемой: назначенные кнопки (обычно для игр AWDS) не работают на перемещение в играх (пробовал несколько, начиная с Quake2), но работают на другие функции: огонь, смена оружия, смена вида и т.д.
Использую стандартную библиотеку "Keyboard.h" и стандартные команды ” Keyboard.write”, “Keyboard.print”, “Keyboard.press”
Кто может подсказать, почему не работает движение?
Dimax – что скажешь? Ты вроде хорошо раскопал эмулятор клавиатуры..
Смог сам разобраться.. нужно времена подобрать на нажатие/отжатие клавиш, т.к на перемещение идет "пачка" нажатий ...
так что сейчас преремещение работает
У меня всё работает, сделал 2 реализации регулятора громкости с энкодером на ардуино про мини.
Но есть один недостаток, который очень сильно бесит, через неопределенный промежуток времени бездействия (когда я некоторое время не трогаю энкодер) ардуино будто засыпает. Мне нужно быстро включить mute, или изменить громкость, но вращение энкодера ни на что не влияет, и только через 2-3 сек появлется возможность менять громкость. Работает это крайне нестабильно, то меняет громоксть сразу, то не действует никак вообще пару секунд.
Подскажите, в чем может быть дело?
Прилагаю две реализации в коде:
01
#include "TrinketHidCombo.h"
02
03
#define PinSW 7 // кнопка энкодера
04
volatile
int
enc = 0;
05
06
void
setup
() {
07
Serial
.begin(9600);
08
09
pinMode(3, INPUT);
// USB d- (белый) По дефолту PORT D4 задан в usbconfig.h, замените на 3
10
pinMode(2, INPUT);
// USB d+ (зелёный) По дефолту PORT D2 задан в usbconfig.h
11
pinMode (4, OUTPUT);
//программное включение юсб порта. По дефолту PORT D5 задан в usbconfig.h, замените на 4
12
TrinketHidCombo.begin();
// start the USB device engine and enumerate
13
PCICR = 1 << PCIE1;
//разрешить прерывание
14
PCMSK1=(1<<PCINT9)|(1<<PCINT8);
//пины A1 и A0
15
//PCMSK2 = 1 << PCINT21; //выбрать вход на котором сработает прерывание // энкодер на 5 и 6 пинах
16
17
pinMode(PinSW, INPUT_PULLUP);
18
}
19
20
void
loop
() {
21
TrinketHidCombo.poll();
// функция должна выполняется не реже 1 раза в 10мс !!!
22
if
(enc == -1) {
23
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
24
enc = 0;
25
}
26
if
(enc == 1) {
27
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
28
enc = 0;
29
}
30
else
enc = 0;
31
32
if
(digitalRead(PinSW) == LOW) {
33
while
(digitalRead(PinSW) == LOW);
// подождать пока кнопку отпустят
34
TrinketHidCombo.pressMultimediaKey(MMKEY_MUTE);
35
}
36
}
37
38
//=============================================Обработка энкодера
39
/*ISR (PCINT2_vect) {
40
((PIND & 0x20) >> 4)^((PIND & 0x40) >> 5) ? enc++ : enc--;
41
}*/
42
43
ISR (PCINT1_vect){
44
static
byte
old_n=PINC&3;
// маска B00000011 что б читать только нужные 2 бита
45
byte
new_n=PINC&3;
46
if
(old_n==1&&new_n==3||old_n==2&&new_n==0) {enc--;}
47
if
(old_n==2&&new_n==3||old_n==1&&new_n==0) {enc++;}
48
old_n= new_n;
49
}
2:
01
#include "TrinketHidCombo.h"
02
03
int
PinCLK = 5;
// энкодер
04
int
PinDT = 6;
// энкодер
05
int
PinSW = 7;
// кнопка энкодера
06
unsigned
long
CurrentTime, LastTime;
07
enum
eEncoderState {eNone, eLeft, eRight};
08
int
EncoderA, EncoderB, EncoderAPrev;
09
10
eEncoderState GetEncoderState() {
11
// Считываем состояние энкодера
12
eEncoderState Result = eNone;
13
CurrentTime = millis();
14
if
(CurrentTime >= (LastTime + 0.001)) {
15
// Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
16
LastTime = CurrentTime;
17
EncoderA = digitalRead(PinDT);
18
EncoderB = digitalRead(PinCLK);
19
if
((!EncoderA) && (EncoderAPrev)) {
// Сигнал A изменился с 1 на 0
20
if
(EncoderB) Result = eRight;
// B=1 => энкодер вращается по часовой
21
else
Result = eLeft;
// B=0 => энкодер вращается против часовой
22
}
23
EncoderAPrev = EncoderA;
// запомним текущее состояние сигнала A
24
25
}
26
return
Result;
27
}
28
29
void
setup
() {
30
pinMode(3, INPUT);
//USB d- (белый) PORT D4 задан в usbconfig.h
31
pinMode(2, INPUT);
// USB d+ (зелёный) PORT D2 задан в usbconfig.h
32
pinMode (4, OUTPUT);
//программное включение юсб порта PORT D5 задан в usbconfig.h
33
TrinketHidCombo.begin();
// start the USB device engine and enumerate
34
// кнопки с подтяжкой
35
pinMode(PinCLK, INPUT);
// входы
36
pinMode(PinDT, INPUT);
37
pinMode(PinSW, INPUT_PULLUP);
38
}
39
40
void
loop
() {
41
TrinketHidCombo.poll();
// функция должна выполняется не реже 1 раза в 10мс !!!
42
43
switch
(GetEncoderState()) {
44
//case eNone: return;
45
case
eLeft: {
46
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
47
break
;
48
}
49
case
eRight: {
50
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
51
break
;
52
}
53
}
54
55
// mute
56
if
(digitalRead(PinSW) == LOW) {
57
while
(digitalRead(PinSW) == LOW);
// подождать пока кнопку отпустят
58
TrinketHidCombo.pressMultimediaKey(MMKEY_MUTE);
59
}
Оба варианта рабочие, во втором правда энкодер срабатывает только каждый второй клик, но тут речь не об этом.
DeltaDesignRus, для начала с другим компьютером проверьте. У меня такого явления нет.
В первом варианте не очень хорошая идея сравнивать с конкретными числами. Хотя бы так надо: if (enc > 0){...} else if (enc <0){...}
Доброго времени суток! Реализовал регулятор громкости на Attiny85 по образу и подобию https://mysku.ru/blog/diy/66309.html
Библиотека TrinketHidCombo. Как я понял в файле TrinketHidCombo.h лежат #define с кодировками клавиш. Вопрос, как добавить свой #define и свою кнопку?
Регулятор не работает корректно на ГУ авто Teyes SPRO, китайцы что-то перемудрили с андроидом. А конкретней громкость на ГУ регулируют не стандартные keycodы 114/115, а именно 252/253.
Вариант переназначение аппаратных кнопок на ГУ только в крайнем случае, так как скорее всего отвалятся аппаратные клавиши на лицевой панели устройства.
недавно наткнулся на заметку почему устройства на V-USB работают хреново, отваливаются \не определяются, все дело в методе синхронизации.,вот заметка с исправлением: http://obruboff.ru/no-detect-usb-tiny-device-after-reboot-problem/
Заметка старая, возможно давно исправленная в исходниках V-USB
Здравствуйте ! Что изменить
usbconfig.h
чтобы вместо ноги D5 была нога D4 . На моей nano с 5 по 12 ноги будет сидеть матричная клавиатура , а это разъем из восьми контактов в ряд . Помогите новичку плиз ....Здравствуйте ! Что изменить
usbconfig.h
чтобы вместо ноги D5 была нога D4 . На моей nano с 5 по 12 ноги будет сидеть матричная клавиатура , а это разъем из восьми контактов в ряд .#define USB_CFG_PULLUP_BIT 5
Меняешь 5-ку на 4-ку. Но, т.к. порт D4 тоже занят, то нужно дополнительно изменить следующий параметр:
#define USB_CFG_DMINUS_BIT 4
Меняешь 4-ку на другой свободный порт.
Спасибо! Но после замены в usbconfig #define USB_CFG_PULLUP_BIT на 3 - usb не опознано. Естественно в скетче d5 менялось на 3. После тестовой замены d5 на d6 также неопознано. В стандартном включении d2, d4, d5 все работает. Что не так?
UPD... Все работает ...Супер... Проблема была в usb кабеле . Спасибо за помощь
Еще одна проблема - не получается эмулировать одновременное нажатие Ctrl+Alt+Del.
Подскажите плиз как это реализовать в коде.
Спасибо !
Еще одна проблема - не получается эмулировать одновременное нажатие Ctrl+Alt+Del.
Подскажите плиз как это реализовать в коде.
Спасибо !
Нет возможности проверить, но попробуйте этот код:
1
// пример эмуляции обычной клавиатуры -нажатие нескольких клавиш (для печати не использовать)
2
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,KEYCODE_LEFT_ALT,KEYCODE_DELETE);
// нажать Ctrl+Alt+Del
3
TrinketHidCombo.pressKey(0, 0);
// отпустить все кнопки программно
4
}
Спасибо! Не срабатывает. Если вместо Ctrl Alt Del вставить символы то они печатаются последовательно.
Ещё вариант:
1
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,);
// нажать Ctrl
2
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT);
// нажать Alt
3
TrinketHidCombo.pressKey(0, KEYCODE_DELETE);
// нажать Del
4
TrinketHidCombo.pressKey(0, 0);
// отпустить все кнопки программно
если не поможет, попробуйте задержку поставить между нажатиями:
1
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,);
// нажать Ctrl
2
delay(10);
3
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT);
// нажать Alt
4
delay(10);
5
TrinketHidCombo.pressKey(0, KEYCODE_DELETE);
// нажать Del
6
delay(10);
7
TrinketHidCombo.pressKey(0, 0);
// отпустить все кнопки программно
Так тоже не работает
1
TrinketHidCombo.pressKey(0,KEYCODE_LEFT_CONTROL,KEYCODE_ESC);
Нажимаются последовательно. С задержкой вообще не работает.
Ещё вариант:
1
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,);
// нажать Ctrl
2
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT);
// нажать Alt
3
TrinketHidCombo.pressKey(0, KEYCODE_DELETE);
// нажать Del
4
TrinketHidCombo.pressKey(0, 0);
// отпустить все кнопки программно
если не поможет, попробуйте задержку поставить между нажатиями:
1
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,);
// нажать Ctrl
2
delay(10);
3
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT);
// нажать Alt
4
delay(10);
5
TrinketHidCombo.pressKey(0, KEYCODE_DELETE);
// нажать Del
6
delay(10);
7
TrinketHidCombo.pressKey(0, 0);
// отпустить все кнопки программно
UPD... Вот так заработало
1
TrinketHidCombo.pressKey(0x50,KEYCODE_DELETE);
Нашел старый проект, где использую нажатие нескольких клавиш, плюс нашел устройство, поэксперементировал, так и не получилось эмуляция Ctrl+Alt+Del.
эмуляция двух клавиш:
1
TrinketHidCombo.pressKey(KEYCODE_MOD_LEFT_SHIFT,KEYCODE_HOME);
//это выделяет текс до начала строки
2
TrinketHidCombo.pressKey(0,0);
3
//------------------
4
TrinketHidCombo.pressKey(KEYCODE_MOD_LEFT_CONTROL,KEYCODE_ESC);
//меню пуск
5
TrinketHidCombo.pressKey(0,0);
6
//-------------------
7
//Если нужна эмуляция одной клавиши, то так:
8
TrinketHidCombo.pressKey(0,KEYCODE_ENTER);
9
TrinketHidCombo.pressKey(0,0);
UPD... Вот так заработало
1
TrinketHidCombo.pressKey(0x50,KEYCODE_DELETE);
Спасибо, действительно работает :-)
KEYCODE_ARROW_LEFT 0x50
UPD... Oпередил ))
так и не получилось эмуляция Ctrl+Alt+Del.
Даже так?
1
TrinketHidCombo.pressKey(0x50,KEYCODE_DELETE);
Не подскажете как зажать и не отжимать SHIFT?
Возможно не отжимать клавиши командой TrinketHidCombo.pressKey(0,0);
Да и главное зажать вот так
1
TrinketHidCombo.pressKey(0x20, 0);
Теперь все работает.
Большой новичок, простой вопрос: будет ли работать при заходе в биос?
Большой новичок, простой вопрос: будет ли работать при заходе в биос?
Да. У меня работает . Проверено на трех компах.
поддержка USB клавиатуры в биос включена?
да, проверял, другие клавы работают
Доброго день, огромное спасибо за библиотеку, пользуюсь уже несколько лет, но в работе возникают проблемы которые меня мягко говоря расстраивают.
Вкратце, ардуинка используется для управления компьютером в автомобиле, установлена материнская плата, усилители и понижающие блоки питания, реле, а на панели дисплей с тачскрином. Также ардуина подключена к мультирулю автомобиля и в зависимости от нажатия разных клавиш эмалирует нажатия мультимедиа клавиш, тише громче и тд, а при выключении зажигания отправляет нажатия клавиши выключения и компьютер уходит в гибернацию, а реле выключают питание на усилителях и самой ардуине.
И в целом все работает хорошо кроме тех моментов когда что-то происходит с материнской платой, зависает или выключается, тогда при попытке отправить нажатие клавиши ардуинка зависает и как результат все остаётся в включённом состоянии, высаживает аккумулятор. Функция isConnect по началу указывает есть ли подключение из false в true, а потом из true в false не переходит. Есть ли возможность ещё как-нибудь определить состояние подключения?
И вторая, ситуация это долгий отклик на нажатия, но не постоянно а только тогда когда долго не было, нажал, задержка 3-7 секунд, сразу же нажимаешь ещё раз и срабатывает мгновенно. Если отправлять какую нибудь клавишу раз в секунду все нормализуется и отлетает моментально, но это не дело. Может есть какие-либо мыли по этому поведению?
Нашел на ютубе интересное видео на данную тему. Думаю многим будет интересно.
https://youtu.be/WSHHDPDFKD0
Гы, этот чел взял библу моей правки 16-го года, приукрасил, и сделал типа свою)). Но обзор хороший, я даже плюсик поставил)
Гы, этот чел взял библу моей правки 16-го года, приукрасил, и сделал типа свою)). Но обзор хороший, я даже плюсик поставил)
Дима! Это признание!!! Жаль,что внутри ссылки на тебя нет!
ЗЫ "я написал собственную библиотеку...умилило"