Эмулятор мыши, клавиатуры, мультимедия клавиатуры на обычных Adruino UNO/NANO/MINIPRO

JuraPal
Offline
Зарегистрирован: 06.07.2019

хочу глянуть скетч, но немогу его сказать. А есть ли другая ссылка может хоть времменая

Не удается получить доступ к сайту

Превышено время ожидания ответа от сайта yadi.sk.

Попробуйте сделать следующее:

ERR_CONNECTION_TIMED_OUT

 

vvgnovanet
Offline
Зарегистрирован: 28.04.2019

JuraPal пишет:

518 байт остаеться  (6012 - 5494 )

Маловато даже на хранение паролей.

если на пароль 20 байт в среднем (номер пароля и пароль на 8 символов по 2 байта)

т.е. всего получиться записать 25 паролей кроме тех которые уже в скейче просипаны.

Ну да, мне хватает. Можно использовать и ардуину по мощнее там влезет туча паролей но размеры у устройства будут побольше.

vvgnovanet
Offline
Зарегистрирован: 28.04.2019

JuraPal пишет:

хочу глянуть скетч, но немогу его сказать. А есть ли другая ссылка может хоть времменая

https://www.dropbox.com/s/0y7yrhoqlsf3et4/pass.zip?dl=0

JuraPal
Offline
Зарегистрирован: 06.07.2019

vvgnovanet разделяю вашу точку зрания. У меня больше доверия к железу с открытым софтом. А в операционках есть масса уязвимостей и работающий на них софт с важными данными может быть скомпраментирован.

Но для многих не критичных вещей в таких программах можно хранить пароли.

Но к сожалению и нажатия клавиш тоже можно перехватывать.

 

ДмитрийВ
Offline
Зарегистрирован: 02.07.2019

Имхо.
"Эмулятор мыши, клавиатуры" - это зависит от драйвера Арудине установленной в ОС.
Нужно в драйвер Ардуины добавить функции поддержки устройств.

sadman41
Offline
Зарегистрирован: 19.10.2016

dimax пишет:

Связываться с какими-то аппаратными USB-решениями нет никакой надобности, не считая единичных случаев, например на предприятиях, где запрещено устанавливать свои программы.

Обычно в таких местах за подключение своего устройства можно для начала получить выговор, а при рецедиве - 10 лет гулагов ))

vvgnovanet
Offline
Зарегистрирован: 28.04.2019

ДмитрийВ пишет:
Имхо. "Эмулятор мыши, клавиатуры" - это зависит от драйвера Арудине установленной в ОС. Нужно в драйвер Ардуины добавить функции поддержки устройств.

Подключал на разные устройства, даже на смартфоне с OTG работает. Там стандартного драйвера для клавиатуры хватает.

На счёт памяти - можно использовать Digispark Pro kickstarter ATTINY167 ( размер платки 18 на 27 мм ) у китайцев оно есть. Но нужно будет шаманить с разъёмом .

JuraPal
Offline
Зарегистрирован: 06.07.2019

vvgnovanet пишет:

JuraPal пишет:

518 байт остаеться  (6012 - 5494 )

Маловато даже на хранение паролей.

если на пароль 20 байт в среднем (номер пароля и пароль на 8 символов по 2 байта)

т.е. всего получиться записать 25 паролей кроме тех которые уже в скейче просипаны.

Ну да, мне хватает. Можно использовать и ардуину по мощнее там влезет туча паролей но размеры у устройства будут побольше.

Я планировал сделать решение на базе Arduino с микроконтроллером ATmega32U4.

Arduino Pro Micro или Arduino Micro
подойдет ли даный скетс для них ?
 
vvgnovanet
Offline
Зарегистрирован: 28.04.2019

JuraPal, конечно это всё реализуемо https://youtu.be/-YXAd6oBHNk

Будет время попробую )))

JuraPal
Offline
Зарегистрирован: 06.07.2019

reodos пишет:
Где вы прживаете, и какие сроки исполнения? На данный момент нет необходимых компонентов для сборки.

Киев.

JuraPal
Offline
Зарегистрирован: 06.07.2019

Народ а тут както можно писать в личку или оставлять свой телеграмм ?

reodos
Offline
Зарегистрирован: 24.07.2016

JuraPal пишет:

Народ а тут както можно писать в личку или оставлять свой телеграмм ?


Хз, я не нашел как тут в личку писать. Оставляй сам свои данные. Скайп, телеграм, вайбер, емайл.

JuraPal
Offline
Зарегистрирован: 06.07.2019

мой телеграмм такой 38 098 157-99-23

JuraPal
Offline
Зарегистрирован: 06.07.2019

Купил "Arduino Pro Micro" (чип  ATmega32U4) чтобы сделать устройство с подобным функционалом.  Скетчь правда лил не тот что дали (т.к. тот что дали незнаю вообще подходит ли для этой платы ?)

В скетч использует библиотеку Low-Power (Библиотека малой мощности для Arduino). Короче плата видимо спит и не определяеться.  В Ардуино IDE порт неактивный. А в деспечере устройств пишет "Unknown Device" - проблема.

Как быть видио нужно перепрошить плату. Но она же не определяеться. Может для этой платы "Arduino Pro Micro" (чип  ATmega32U4) можно использовать - программатор ?

 

AntonULN
Offline
Зарегистрирован: 21.03.2018

Добрый день форумчане.

Делаю джойстик/эмулятор клавиатуры, но столкнулся с проблемой: назначенные кнопки (обычно для игр AWDS) не работают на перемещение в играх (пробовал несколько, начиная с Quake2), но работают на другие функции: огонь, смена оружия, смена вида и т.д.

Использую стандартную библиотеку  "Keyboard.h" и стандартные команды ” Keyboard.write”, “Keyboard.print”,  “Keyboard.press”

Кто может подсказать, почему не работает движение?

Dimax – что скажешь? Ты вроде хорошо раскопал эмулятор клавиатуры..

 

AntonULN
Offline
Зарегистрирован: 21.03.2018

Смог сам разобраться.. нужно времена подобрать на нажатие/отжатие клавиш, т.к на перемещение идет "пачка" нажатий ...

так что сейчас преремещение работает

DeltaDesignRus
Offline
Зарегистрирован: 30.07.2019

У меня всё работает, сделал 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);
  }

Оба варианта рабочие, во втором правда энкодер срабатывает только каждый второй клик, но тут речь не об этом.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

DeltaDesignRus, для начала с другим компьютером проверьте. У меня такого явления нет.

В первом варианте  не очень хорошая идея сравнивать с конкретными числами. Хотя бы так надо: if (enc > 0){...}  else if (enc <0){...}

Toffikys
Offline
Зарегистрирован: 04.03.2020

Доброго времени суток! Реализовал регулятор громкости на Attiny85 по образу и подобию https://mysku.ru/blog/diy/66309.html

Библиотека TrinketHidCombo. Как я понял в файле TrinketHidCombo.h лежат #define с кодировками клавиш. Вопрос, как добавить свой #define и свою кнопку?

Регулятор не работает корректно на ГУ авто Teyes SPRO, китайцы что-то перемудрили с андроидом. А конкретней громкость на ГУ регулируют не стандартные keycodы 114/115, а именно 252/253.

Вариант переназначение аппаратных кнопок на ГУ только в крайнем случае, так как скорее всего отвалятся аппаратные клавиши на лицевой панели устройства. 

yuhenotix@2p-ma...
Offline
Зарегистрирован: 09.06.2019

недавно наткнулся на заметку почему  устройства   на V-USB работают хреново, отваливаются  \не определяются, все  дело в методе  синхронизации.,вот заметка с исправлением: http://obruboff.ru/no-detect-usb-tiny-device-after-reboot-problem/

 

Заметка старая, возможно давно  исправленная в исходниках V-USB

Buzova
Offline
Зарегистрирован: 06.04.2018

Здравствуйте ! Что изменить usbconfig.h чтобы вместо ноги D5 была нога D4 . На моей nano с 5 по 12 ноги будет сидеть матричная клавиатура , а это разъем из восьми контактов в ряд . Помогите новичку плиз ....

reodos
Offline
Зарегистрирован: 24.07.2016

Buzova пишет:

Здравствуйте ! Что изменить usbconfig.h чтобы вместо ноги D5 была нога D4 . На моей nano с 5 по 12 ноги будет сидеть матричная клавиатура , а это разъем из восьми контактов в ряд .

#define USB_CFG_PULLUP_BIT          5

Меняешь 5-ку на 4-ку. Но, т.к. порт D4 тоже занят, то нужно дополнительно изменить следующий параметр:

#define USB_CFG_DMINUS_BIT      4

Меняешь 4-ку на другой свободный порт.

Buzova
Offline
Зарегистрирован: 06.04.2018

Спасибо! Но после замены в usbconfig #define USB_CFG_PULLUP_BIT на 3 - usb не опознано. Естественно в скетче d5 менялось на 3. После тестовой замены d5 на d6 также неопознано. В стандартном включении d2, d4, d5 все работает. Что не так?

UPD...   Все работает ...Супер... Проблема была в usb кабеле . Спасибо за помощь

Buzova
Offline
Зарегистрирован: 06.04.2018

Еще одна проблема - не получается эмулировать одновременное нажатие Ctrl+Alt+Del.

Подскажите плиз как это реализовать в коде.

Спасибо !

reodos
Offline
Зарегистрирован: 24.07.2016

Buzova пишет:

Еще одна проблема - не получается эмулировать одновременное нажатие Ctrl+Alt+Del.

Подскажите плиз как это реализовать в коде.

Спасибо !

Нет возможности проверить, но попробуйте этот код:

// пример эмуляции обычной клавиатуры -нажатие нескольких клавиш (для печати не использовать)
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,KEYCODE_LEFT_ALT,KEYCODE_DELETE); // нажать Ctrl+Alt+Del
TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно
}

 

Buzova
Offline
Зарегистрирован: 06.04.2018

Спасибо! Не срабатывает. Если вместо Ctrl Alt Del вставить символы то они печатаются последовательно.

reodos
Offline
Зарегистрирован: 24.07.2016

Ещё вариант:

TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,); // нажать Ctrl
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT); // нажать Alt
TrinketHidCombo.pressKey(0, KEYCODE_DELETE); // нажать Del
TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно

если не поможет, попробуйте задержку поставить между нажатиями:

TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,); // нажать Ctrl
delay(10);
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT); // нажать Alt
delay(10);
TrinketHidCombo.pressKey(0, KEYCODE_DELETE); // нажать Del
delay(10);
TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно

 

Buzova
Offline
Зарегистрирован: 06.04.2018

Так тоже не работает

TrinketHidCombo.pressKey(0,KEYCODE_LEFT_CONTROL,KEYCODE_ESC); 

 

Buzova
Offline
Зарегистрирован: 06.04.2018

Нажимаются последовательно. С задержкой вообще не работает.

reodos пишет:

Ещё вариант:

TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,); // нажать Ctrl
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT); // нажать Alt
TrinketHidCombo.pressKey(0, KEYCODE_DELETE); // нажать Del
TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно

если не поможет, попробуйте задержку поставить между нажатиями:

TrinketHidCombo.pressKey(0, KEYCODE_LEFT_CONTROL,); // нажать Ctrl
delay(10);
TrinketHidCombo.pressKey(0, KEYCODE_LEFT_ALT); // нажать Alt
delay(10);
TrinketHidCombo.pressKey(0, KEYCODE_DELETE); // нажать Del
delay(10);
TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно

 

UPD...  Вот так заработало

TrinketHidCombo.pressKey(0x50,KEYCODE_DELETE); 

 

 

reodos
Offline
Зарегистрирован: 24.07.2016

Нашел старый проект, где использую нажатие нескольких клавиш, плюс нашел устройство, поэксперементировал, так и не получилось эмуляция Ctrl+Alt+Del.

эмуляция двух клавиш:

TrinketHidCombo.pressKey(KEYCODE_MOD_LEFT_SHIFT,KEYCODE_HOME);//это выделяет текс до начала строки
TrinketHidCombo.pressKey(0,0);
//------------------
TrinketHidCombo.pressKey(KEYCODE_MOD_LEFT_CONTROL,KEYCODE_ESC);//меню пуск
TrinketHidCombo.pressKey(0,0);
//-------------------
//Если нужна эмуляция одной клавиши, то так:
TrinketHidCombo.pressKey(0,KEYCODE_ENTER);
TrinketHidCombo.pressKey(0,0);
У меня почемуто KEYCODE_LEFT_CONTROL не работает, а работает KEYCODE_MOD_LEFT_CONTROL
reodos
Offline
Зарегистрирован: 24.07.2016

Buzova пишет:

UPD...  Вот так заработало

TrinketHidCombo.pressKey(0x50,KEYCODE_DELETE); 

Спасибо, действительно работает :-)

KEYCODE_ARROW_LEFT 0x50

Buzova
Offline
Зарегистрирован: 06.04.2018

UPD...   Oпередил ))

reodos пишет:

так и не получилось эмуляция Ctrl+Alt+Del.

Даже так?

TrinketHidCombo.pressKey(0x50,KEYCODE_DELETE);

Не подскажете как зажать и не отжимать SHIFT?

reodos
Offline
Зарегистрирован: 24.07.2016

Buzova пишет:
Не подскажете как зажать и не отжимать SHIFT?


Возможно не отжимать клавиши командой TrinketHidCombo.pressKey(0,0);

Buzova
Offline
Зарегистрирован: 06.04.2018

reodos пишет:
Buzova пишет:
Не подскажете как зажать и не отжимать SHIFT?

 

Возможно не отжимать клавиши командой TrinketHidCombo.pressKey(0,0);

Да и главное зажать  вот так

 TrinketHidCombo.pressKey(0x20, 0); 

Теперь все работает.

sysvfr
Offline
Зарегистрирован: 21.07.2021

Большой новичок, простой вопрос: будет ли работать при заходе в биос?

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

sysvfr пишет:

Большой новичок, простой вопрос: будет ли работать при заходе в биос?

Да. У меня работает . Проверено на трех компах.

sysvfr
Offline
Зарегистрирован: 21.07.2021
Собрал на NANO MEGA 328P. В винде 8 и 10 работает.
проверил в биос на ноуте Lenovo B50 и матери ASUS P8Z77- нет реакции.
надо вправо и ввод.
 
#include "TrinketHidCombo.h"
 
void setup(){
pinMode(4,INPUT); //USB d- (белый) PORT D4 задан в usbconfig.h
pinMode(2,INPUT);// USB d+ (зелёный) PORT D2 задан в usbconfig.h
pinMode (5,OUTPUT);  //программное включение юсб порта PORT D5  задан в usbconfig.h
TrinketHidCombo.begin(); // start the USB device engine and enumerate
 
pinMode(12, INPUT_PULLUP); // кнопки с подтяжкой
pinMode(11, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
}
 
void loop(){
 
TrinketHidCombo.poll(); // функция должна выполняется не реже 1 раза в 10мс !!!
 
if (digitalRead(8) == LOW) { while (digitalRead(8) == LOW);// подождать пока кнопку отпустят
 
TrinketHidCombo.pressKey(0,KEYCODE_ARROW_RIGHT);// вправо
TrinketHidCombo.pressKey(0,KEYCODE_ENTER);//ENTER
TrinketHidCombo.pressKey(0, 0);// отпустить все кнопки программно
}  
 
// коды всех клавиш можно найти в файле  TrinketHidCombo.h
 delay(9); //паузу можно убрать
 
}
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

поддержка USB клавиатуры в биос включена?

sysvfr
Offline
Зарегистрирован: 21.07.2021

да, проверял, другие клавы работают

Krad
Offline
Зарегистрирован: 10.09.2021

Доброго день, огромное спасибо за библиотеку, пользуюсь уже несколько лет, но в работе возникают проблемы которые меня мягко говоря расстраивают.

Вкратце, ардуинка используется для управления компьютером в автомобиле, установлена материнская плата, усилители и понижающие блоки питания, реле, а на панели дисплей с тачскрином. Также ардуина подключена к мультирулю автомобиля и в зависимости от нажатия разных клавиш эмалирует нажатия мультимедиа клавиш, тише громче и тд, а при выключении зажигания отправляет нажатия клавиши выключения и компьютер уходит в гибернацию, а реле выключают питание на усилителях и самой ардуине.
И в целом все работает хорошо кроме тех моментов когда что-то происходит с материнской платой, зависает или выключается,  тогда при попытке отправить нажатие клавиши ардуинка зависает и как результат все остаётся в включённом состоянии, высаживает аккумулятор. Функция isConnect по началу указывает есть ли подключение из false в true, а потом из true в false не переходит. Есть ли возможность ещё как-нибудь определить состояние подключения?
И вторая, ситуация это долгий отклик на нажатия, но не постоянно а только тогда когда долго не было, нажал, задержка 3-7 секунд, сразу же нажимаешь ещё раз и срабатывает мгновенно. Если отправлять какую нибудь клавишу раз в секунду все нормализуется и отлетает моментально, но это не дело. Может есть какие-либо мыли по этому поведению?