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 сек появлется возможность менять громкость. Работает это крайне нестабильно, то меняет громоксть сразу, то не действует никак вообще пару секунд.
Подскажите, в чем может быть дело?
Прилагаю две реализации в коде:
#include "TrinketHidCombo.h"
#define PinSW 7 // кнопка энкодера
volatile int enc = 0;
void setup() {
Serial.begin(9600);
pinMode(3, INPUT); // USB d- (белый) По дефолту PORT D4 задан в usbconfig.h, замените на 3
pinMode(2, INPUT); // USB d+ (зелёный) По дефолту PORT D2 задан в usbconfig.h
pinMode (4, OUTPUT); //программное включение юсб порта. По дефолту PORT D5 задан в usbconfig.h, замените на 4
TrinketHidCombo.begin(); // start the USB device engine and enumerate
PCICR = 1 << PCIE1; //разрешить прерывание
PCMSK1=(1<<PCINT9)|(1<<PCINT8); //пины A1 и A0
//PCMSK2 = 1 << PCINT21; //выбрать вход на котором сработает прерывание // энкодер на 5 и 6 пинах
pinMode(PinSW, INPUT_PULLUP);
}
void loop() {
TrinketHidCombo.poll(); // функция должна выполняется не реже 1 раза в 10мс !!!
if (enc == -1) {
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
enc = 0;
}
if (enc == 1) {
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
enc = 0;
}
else enc = 0;
if (digitalRead(PinSW) == LOW) {
while (digitalRead(PinSW) == LOW); // подождать пока кнопку отпустят
TrinketHidCombo.pressMultimediaKey(MMKEY_MUTE);
}
}
//=============================================Обработка энкодера
/*ISR (PCINT2_vect) {
((PIND & 0x20) >> 4)^((PIND & 0x40) >> 5) ? enc++ : enc--;
}*/
ISR (PCINT1_vect){
static byte old_n=PINC&3; // маска B00000011 что б читать только нужные 2 бита
byte new_n=PINC&3;
if (old_n==1&&new_n==3||old_n==2&&new_n==0) {enc--;}
if (old_n==2&&new_n==3||old_n==1&&new_n==0) {enc++;}
old_n= new_n;
}
2:
#include "TrinketHidCombo.h"
int PinCLK = 5; // энкодер
int PinDT = 6; // энкодер
int PinSW = 7; // кнопка энкодера
unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight};
int EncoderA, EncoderB, EncoderAPrev;
eEncoderState GetEncoderState() {
// Считываем состояние энкодера
eEncoderState Result = eNone;
CurrentTime = millis();
if (CurrentTime >= (LastTime + 0.001)) {
// Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
LastTime = CurrentTime;
EncoderA = digitalRead(PinDT);
EncoderB = digitalRead(PinCLK);
if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
if (EncoderB) Result = eRight; // B=1 => энкодер вращается по часовой
else Result = eLeft; // B=0 => энкодер вращается против часовой
}
EncoderAPrev = EncoderA; // запомним текущее состояние сигнала A
}
return Result;
}
void setup() {
pinMode(3, INPUT); //USB d- (белый) PORT D4 задан в usbconfig.h
pinMode(2, INPUT); // USB d+ (зелёный) PORT D2 задан в usbconfig.h
pinMode (4, OUTPUT); //программное включение юсб порта PORT D5 задан в usbconfig.h
TrinketHidCombo.begin(); // start the USB device engine and enumerate
// кнопки с подтяжкой
pinMode(PinCLK, INPUT); // входы
pinMode(PinDT, INPUT);
pinMode(PinSW, INPUT_PULLUP);
}
void loop() {
TrinketHidCombo.poll(); // функция должна выполняется не реже 1 раза в 10мс !!!
switch (GetEncoderState()) {
//case eNone: return;
case eLeft: {
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
break;
}
case eRight: {
TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
break;
}
}
// mute
if (digitalRead(PinSW) == LOW) {
while (digitalRead(PinSW) == LOW); // подождать пока кнопку отпустят
TrinketHidCombo.pressMultimediaKey(MMKEY_MUTE);
}
Оба варианта рабочие, во втором правда энкодер срабатывает только каждый второй клик, но тут речь не об этом.
Библиотека 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 кабеле . Спасибо за помощь
Еще одна проблема - не получается эмулировать одновременное нажатие Ctrl+Alt+Del.
Подскажите плиз как это реализовать в коде.
Спасибо !
Нет возможности проверить, но попробуйте этот код:
// пример эмуляции обычной клавиатуры -нажатие нескольких клавиш (для печати не использовать)
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,KEYCODE_LEFT_ALT,KEYCODE_DELETE); // нажать Ctrl+Alt+Del
TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно
}
Доброго день, огромное спасибо за библиотеку, пользуюсь уже несколько лет, но в работе возникают проблемы которые меня мягко говоря расстраивают.
Вкратце, ардуинка используется для управления компьютером в автомобиле, установлена материнская плата, усилители и понижающие блоки питания, реле, а на панели дисплей с тачскрином. Также ардуина подключена к мультирулю автомобиля и в зависимости от нажатия разных клавиш эмалирует нажатия мультимедиа клавиш, тише громче и тд, а при выключении зажигания отправляет нажатия клавиши выключения и компьютер уходит в гибернацию, а реле выключают питание на усилителях и самой ардуине.
И в целом все работает хорошо кроме тех моментов когда что-то происходит с материнской платой, зависает или выключается, тогда при попытке отправить нажатие клавиши ардуинка зависает и как результат все остаётся в включённом состоянии, высаживает аккумулятор. Функция 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 сек появлется возможность менять громкость. Работает это крайне нестабильно, то меняет громоксть сразу, то не действует никак вообще пару секунд.
Подскажите, в чем может быть дело?
Прилагаю две реализации в коде:
2:
Оба варианта рабочие, во втором правда энкодер срабатывает только каждый второй клик, но тут речь не об этом.
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.
Подскажите плиз как это реализовать в коде.
Спасибо !
Нет возможности проверить, но попробуйте этот код:
Спасибо! Не срабатывает. Если вместо Ctrl Alt Del вставить символы то они печатаются последовательно.
Ещё вариант:
если не поможет, попробуйте задержку поставить между нажатиями:
Так тоже не работает
Нажимаются последовательно. С задержкой вообще не работает.
Ещё вариант:
если не поможет, попробуйте задержку поставить между нажатиями:
UPD... Вот так заработало
Нашел старый проект, где использую нажатие нескольких клавиш, плюс нашел устройство, поэксперементировал, так и не получилось эмуляция Ctrl+Alt+Del.
эмуляция двух клавиш:
UPD... Вот так заработало
Спасибо, действительно работает :-)
KEYCODE_ARROW_LEFT 0x50
UPD... Oпередил ))
так и не получилось эмуляция Ctrl+Alt+Del.
Даже так?
Не подскажете как зажать и не отжимать SHIFT?
Возможно не отжимать клавиши командой TrinketHidCombo.pressKey(0,0);
Да и главное зажать вот так
Теперь все работает.
Большой новичок, простой вопрос: будет ли работать при заходе в биос?
Большой новичок, простой вопрос: будет ли работать при заходе в биос?
Да. У меня работает . Проверено на трех компах.
поддержка USB клавиатуры в биос включена?
да, проверял, другие клавы работают
Доброго день, огромное спасибо за библиотеку, пользуюсь уже несколько лет, но в работе возникают проблемы которые меня мягко говоря расстраивают.
Вкратце, ардуинка используется для управления компьютером в автомобиле, установлена материнская плата, усилители и понижающие блоки питания, реле, а на панели дисплей с тачскрином. Также ардуина подключена к мультирулю автомобиля и в зависимости от нажатия разных клавиш эмалирует нажатия мультимедиа клавиш, тише громче и тд, а при выключении зажигания отправляет нажатия клавиши выключения и компьютер уходит в гибернацию, а реле выключают питание на усилителях и самой ардуине.
И в целом все работает хорошо кроме тех моментов когда что-то происходит с материнской платой, зависает или выключается, тогда при попытке отправить нажатие клавиши ардуинка зависает и как результат все остаётся в включённом состоянии, высаживает аккумулятор. Функция isConnect по началу указывает есть ли подключение из false в true, а потом из true в false не переходит. Есть ли возможность ещё как-нибудь определить состояние подключения?
И вторая, ситуация это долгий отклик на нажатия, но не постоянно а только тогда когда долго не было, нажал, задержка 3-7 секунд, сразу же нажимаешь ещё раз и срабатывает мгновенно. Если отправлять какую нибудь клавишу раз в секунду все нормализуется и отлетает моментально, но это не дело. Может есть какие-либо мыли по этому поведению?
Нашел на ютубе интересное видео на данную тему. Думаю многим будет интересно.
https://youtu.be/WSHHDPDFKD0
Гы, этот чел взял библу моей правки 16-го года, приукрасил, и сделал типа свою)). Но обзор хороший, я даже плюсик поставил)
Гы, этот чел взял библу моей правки 16-го года, приукрасил, и сделал типа свою)). Но обзор хороший, я даже плюсик поставил)
Дима! Это признание!!! Жаль,что внутри ссылки на тебя нет!
ЗЫ "я написал собственную библиотеку...умилило"