Эмулятор мыши, клавиатуры, мультимедия клавиатуры на обычных 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 аватар
Offline
Зарегистрирован: 25.12.2013

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

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