Здравствуйте, гость ( Вход | Регистрация )

> Pilot + Arduino (Hardware clicker)
yamenko
сообщение 7.3.2020, 19:21
Сообщение #1


***

Novice
Сообщений: 79
Регистрация: 19.8.2014
Группа: Пользователи
Наличность: 0
Пользователь №: 16.974
Возраст: 29



Добрый день.
Хочу представить вам аппаратный кликер на базе UOpilot.
Для начала вам необходима будет плата Arduino micro (Arduino Leonardo) обязательно с чипом Atmega 32u4. Другие не подойдут, так как не определяются системой как HID устройство, и придется долго настраивать аппаратную и программную составляющую.
Можете выбрать следующие:
(IMG:https://i.ibb.co/5GRGCDW/2020-03-07-18-38-55.png)(IMG:https://i.ibb.co/P1DgmDt/2020-03-07-18-40-05.png)
Как только вы заполучили свою новую плату, скачиваем и устанавливаем последнюю версию Arduino IDE с офф. сайта Arduino.cc
(IMG:https://i.ibb.co/HVM0nBK/2020-03-07-18-37-38.png)
Пробуем подключить, она должна у вас определится в устройствах как Mikro или Leonardo.
(IMG:https://i.ibb.co/SRnMV1S/2020-03-07-18-44-57.png)
Если не появляется, тогда устанавливаем драйвера, для не оригинальных плат с алиэкспресс нужен спец драйвер CH340 (ch341ser), пробуйте с разных сайтов, даже с одинаковым названием, они почему-то разные.
Вот тут можно посмотреть драйвер
Запоминаем СОМ порт!
Открываем Arduino IDE
Настраиваем нашу плату:
(IMG:https://i.ibb.co/4dj9RvK/2020-03-07-18-47-26.png)(IMG:https://i.ibb.co/YbXd4MS/2020-03-07-18-48-38.png)
Закидываем скретч отсюда: https://forum.uokit.com/index.php?s=&sh...st&p=436373
устаревший скетч с ошибкой. Используйте скетч из ссылки выше.
Код
#include <Keyboard.h>
int i = 0;
int trigerKey = 0;
int lengthStr = 0;
int key[20];
int tmDelayValue;
String tmDelayStr;

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
}

void loop() {
  // Собираем информацию из порта
  while (Serial.available()) {
    key[i++] = Serial.read();
    delay(5);
  }
  // Триггер, что данные пришли
  if (i != 0 && lengthStr == 0){
    lengthStr = i;
    i = 0;
  }
  
  if (lengthStr != 0){
    
    for (i = 0; i <= lengthStr; i++){
      delay(5);
//Находим задержку с которой необходимо нажимать кнопки
      if (trigerKey == 0){
        if (key[i] == 124){
          tmDelayValue = tmDelayStr.toInt();
          trigerKey = 1;
          i++;
        }
        else {
          tmDelayStr += char (key[i]);
        }
      }

//Находим и нажимаем спец кнопки если необходимо
      if (trigerKey == 1){
        if (key[i] == 94){Keyboard.press(KEY_LEFT_CTRL);}    //94 - символ "^"
        if (key[i] == 64){Keyboard.press(KEY_LEFT_ALT);}     //64 - символ "@"
        if (key[i] == 126){Keyboard.press(KEY_LEFT_SHIFT);}  //126 - символ "~"
        if (key[i] == 124){trigerKey = 2; i++;}              //124 - символ "|"
      }

//Нажимаем по очереди остальные кнопки с задержкой
      if (trigerKey == 2){
        delay(tmDelayValue);
        Keyboard.print(char (key[i]));
      }
    }
// Сбрасываем все
    Keyboard.releaseAll();
    i = 0;
    trigerKey = 0;
    lengthStr = 0;
    tmDelayStr = "";
  }
}

заливаем его в плату.
(IMG:https://i.ibb.co/W50GRnL/2020-03-07-18-50-19.png)
Должно написать «Загрузка завершена»

Теперь переходим в Пилот
Добавляем функцию
Код
--lua
local function sendKey (symbol)
    file = io.open("COM7","w")  --меняем только номер COM порта, остальное не трогаем
    file:write(symbol)
    file:close()
end

Пользоваться так: sendKey ("1000|^|axv")
пишем в кавычках
1. До первой вертикальной черты это задержка между каждым нажатием кнопок в мс.
2. После первой черты и до второй это спец символы (~@^, такие как настроены в Пилоте, другие не используйте так как ничего все равно работать не будет), если символы не нужны просто удалите их, 2 вертикальные черты обязательны!!!
3. Набор символов которые необходимо нажать (каждая кнопка будет нажиматься через заданный интервал), русские символы не работают!!!
PS в данном примере CTRL+a, CTRL+x, CTRL+v, это чтобы вы могли проверить правильно ли работает или нет.

Сообщение отредактировал DarkMaster - 9.12.2020, 15:34
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
cirus
сообщение 22.11.2020, 18:37
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26952
Пользователь №: 16.971
Возраст: 29



Архив распаковать, файл Arduino.lua положить в папку с пилотом Прикрепленный файл  Arduino.zip ( 2,34 килобайт ) Кол-во скачиваний: 499

Скетч в архиве.
Функции:
Цитата
delaykey(<ms>) - установить паузу между нажатиями клавиш клавиатуры
delaymouse(<ms>) - установить паузу между нажатиями клавиш мыши

ms - время в мсек.
Цитата
key(<code>) - нажать и отпустить клавишу клавиатуры, в том числе клавиши модификаторы
text (<text>) - напечатать текст
keydown (<code>) - зажать клавишу, в том числе клавиши модификаторы
keyup (<code>) - отпустить клавишу, в том числе клавиши модификаторы

code - код клавиши или константа
text - текст, который нужно напечатать
Цитата
mousemove (<x>, <y>) - переместить курсор мыши
mouse (<x>, <y>, [button]) - клик мыши
mousedbl (<x>, <y>, [button]) - двойной клик мыши
mousedown (<x>, <y>, [button]) - зажать кнопку мыши
mouseup (<x>, <y>, [button]) - отпустить кнопку мыши

x, y - абсолютные координаты, т. е. относительно левого верхнего угла экрана.
button - кнопка мыши, необязательный параметр, по умолчанию левая кнопка мыши. Либо MOUSE_LEFT, MOUSE_RIGHT, MOUSE_MIDDLE

Пример использования:
Код
--lua
require'Arduino'
COM = 7     -- номер порта

wait(3000) -- за это время переключиться на нужное приложение

delaykey(20)   -- установить паузу между нажатиями клавиш
text ('Hello!')    -- напечатать текст
key('X')   -- напечатать X

keydown(KEY_LEFT_CTRL)    -- зажать Ctrl
key(KEY_LEFT_SHIFT)       -- нажать Shift
keyup(KEY_LEFT_CTRL)      -- отпустить Ctrl

key(KEY_TAB)              -- нажать Tab

delaykey(200)             -- установить паузу между нажатиями клавиш
text ('qwerty')           -- напечатать текст

key(KEY_RETURN)           -- нажать Enter

Код
--lua
require'Arduino'
COM = 7     -- номер порта

delaymouse(20)   -- установить паузу между нажатием и отпусканием кнопок мыши

mousemove (200, 100)   -- переместить курсор в координаты 200 100
mouse(40, 200, MOUSE_LEFT)  -- клик левой кнопкой мыши
mouse(200, 700)     -- клик левой кнопкой мыши
mouse(200, 700, MOUSE_RIGHT)  -- клик правой кнопкой
wait(2000)

mousedown(300, 30)    -- зажать левую кнопку мыши
mousemove (600, 30)   -- переместить курсор
mouseup(600, 30)      -- отпустить кнопку мыши
wait(500)

mousedbl(250, 400)    -- двойной клик
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Crocotea
сообщение 22.11.2020, 23:44
Сообщение #3


***

Novice
Сообщений: 51
Регистрация: 30.10.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.787



Цитата(cirus @ 22.11.2020, 18:37) *

Архив распаковать, файл Arduino.lua положить в папку с пилотом Прикрепленный файл  Arduino.zip ( 2,34 килобайт ) Кол-во скачиваний: 499

Скетч в архиве.
Функции:

ms - время в мсек.

code - код клавиши или константа
text - текст, который нужно напечатать

x, y - абсолютные координаты, т. е. относительно левого верхнего угла экрана.
button - кнопка мыши, необязательный параметр, по умолчанию левая кнопка мыши. Либо MOUSE_LEFT, MOUSE_RIGHT, MOUSE_MIDDLE

Пример использования:
Код
--lua
require'Arduino'
COM = 7     -- номер порта

wait(3000) -- за это время переключиться на нужное приложение

delaykey(20)   -- установить паузу между нажатиями клавиш
text ('Hello!')    -- напечатать текст
key('X')   -- напечатать X

keydown(KEY_LEFT_CTRL)    -- зажать Ctrl
key(KEY_LEFT_SHIFT)       -- нажать Shift
keyup(KEY_LEFT_CTRL)      -- отпустить Ctrl

key(KEY_TAB)              -- нажать Tab

delaykey(200)             -- установить паузу между нажатиями клавиш
text ('qwerty')           -- напечатать текст

key(KEY_RETURN)           -- нажать Enter

Код
--lua
require'Arduino'
COM = 7     -- номер порта

delaymouse(20)   -- установить паузу между нажатием и отпусканием кнопок мыши

mousemove (200, 100)   -- переместить курсор в координаты 200 100
mouse(40, 200, MOUSE_LEFT)  -- клик левой кнопкой мыши
mouse(200, 700)     -- клик левой кнопкой мыши
mouse(200, 700, MOUSE_RIGHT)  -- клик правой кнопкой
wait(2000)

mousedown(300, 30)    -- зажать левую кнопку мыши
mousemove (600, 30)   -- переместить курсор
mouseup(600, 30)      -- отпустить кнопку мыши
wait(500)

mousedbl(250, 400)    -- двойной клик



видео теста всей системы, работает, но совершенно не так как нужно(
Не показал, что занес все файлы в папку с пилотом, но эти действия все произвел
[+]






Цитата(DarkMaster @ 22.11.2020, 15:07) *

https://github.com/arduino-libraries/Keyboa.../src/Keyboard.h
попробуйте B1
Там походу hid коды.
Keyboard.h
Код
/*
  Keyboard.h
  Copyright (c) 2015, Arduino LLC
  Original code (pre-library): Copyright (c) 2011, Peter Barrett
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef KEYBOARD_h
#define KEYBOARD_h

#include "HID.h"

#if !defined(_USING_HID)

#warning "Using legacy HID core (non pluggable)"

#else

// ================================================================================

// ================================================================================

//  Keyboard

#define KEY_LEFT_CTRL   0x80
#define KEY_LEFT_SHIFT    0x81
#define KEY_LEFT_ALT    0x82
#define KEY_LEFT_GUI    0x83
#define KEY_RIGHT_CTRL    0x84
#define KEY_RIGHT_SHIFT   0x85
#define KEY_RIGHT_ALT   0x86
#define KEY_RIGHT_GUI   0x87

#define KEY_UP_ARROW    0xDA
#define KEY_DOWN_ARROW    0xD9
#define KEY_LEFT_ARROW    0xD8
#define KEY_RIGHT_ARROW   0xD7
#define KEY_BACKSPACE   0xB2
#define KEY_TAB       0xB3
#define KEY_RETURN      0xB0
#define KEY_ESC       0xB1
#define KEY_INSERT      0xD1
#define KEY_DELETE      0xD4
#define KEY_PAGE_UP     0xD3
#define KEY_PAGE_DOWN   0xD6
#define KEY_HOME      0xD2
#define KEY_END       0xD5
#define KEY_CAPS_LOCK   0xC1
#define KEY_F1        0xC2
#define KEY_F2        0xC3
#define KEY_F3        0xC4
#define KEY_F4        0xC5
#define KEY_F5        0xC6
#define KEY_F6        0xC7
#define KEY_F7        0xC8
#define KEY_F8        0xC9
#define KEY_F9        0xCA
#define KEY_F10       0xCB
#define KEY_F11       0xCC
#define KEY_F12       0xCD
#define KEY_F13       0xF0
#define KEY_F14       0xF1
#define KEY_F15       0xF2
#define KEY_F16       0xF3
#define KEY_F17       0xF4
#define KEY_F18       0xF5
#define KEY_F19       0xF6
#define KEY_F20       0xF7
#define KEY_F21       0xF8
#define KEY_F22       0xF9
#define KEY_F23       0xFA
#define KEY_F24       0xFB
//  Low level key report: up to 6 keys and shift, ctrl etc at once
typedef struct
{
  uint8_t modifiers;
  uint8_t reserved;
  uint8_t keys[6];
} KeyReport;

class Keyboard_ : public Print
{
private:
  KeyReport _keyReport;
  void sendReport(KeyReport* keys);
public:
  Keyboard_(void);
  void begin(void);
  void end(void);
  size_t write(uint8_t k);
  size_t write(const uint8_t *buffer, size_t size);
  size_t press(uint8_t k);
  size_t release(uint8_t k);
  void releaseAll(void);
};
extern Keyboard_ Keyboard;

#endif
#endif



B1-Работает
sendKey (""..string.char (0xB1))-кликает esc
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
yamenko   Pilot + Arduino (Hardware clicker)   7.3.2020, 19:21
cirus   Arduino позволяет эмулировать нажатия клавиш кл...   8.3.2020, 11:50
yamenko   С этой штукой будет нажимать клавиши в обход game...   8.3.2020, 19:26
AK_sata   Прива вопрос по поводу этого Как только вы заполуч...   30.8.2020, 20:13
cirus   Перейти по ссылке https://www.arduino.cc/en/Main/...   30.8.2020, 22:02
DarkMaster   yamenko, памятник вам надо.   19.9.2020, 5:24
Crocotea   Купил приблуду, но клики не проходили Благодаря Da...   10.11.2020, 15:32
DarkMaster   Ирония в том, что код оказался изначально рабочим...   10.11.2020, 15:34
Crocotea   при запуске скрипта пилота, после нескольких запус...   10.11.2020, 15:48
Crocotea   Эх тема совсем никому не интересна(( Подскажите пж...   16.11.2020, 9:35
DarkMaster   интересна, но у меня есть дела и помимо нее. В час...   16.11.2020, 10:24
Cockney   Накидал вариант. Насколько рабочий не знаю, не мог...   16.11.2020, 11:48
Crocotea   Накидал вариант. Насколько рабочий не знаю, не мо...   17.11.2020, 15:04
Cockney   Так результат по парсингу Пишет ошибку в строчке ...   17.11.2020, 15:14
Crocotea   поправил Так попробовал и записал видосик Sfd3U...   17.11.2020, 17:36
DarkMaster   Cockney, не будет ли правильным использовать какой...   16.11.2020, 15:53
Cockney   Да можно все, разумеется. У меня нет ни устройства...   16.11.2020, 16:20
Cockney   Очередная правка, выношу код сюда, ибо старый пост...   17.11.2020, 18:37
Crocotea   Очередная правка, выношу код сюда, ибо старый пос...   17.11.2020, 18:45
Cockney   #include <Keyboard.h> #include <stdl...   18.11.2020, 12:50
Crocotea   [spoiler=Версия №4] [code] #include <Keyboard...   18.11.2020, 17:30
DarkMaster   Предлагаю в: --lua local function sendKey (sym...   18.11.2020, 18:15
Cockney   Оно и сейчас себя ожидаемо ведет. Мы прочитали пер...   18.11.2020, 18:35
DarkMaster   Оно просто в буффер накидывает быстрее, чем ты счи...   18.11.2020, 18:56
Cockney   Я вроде примерно тоже самое и описал. Мои соображе...   18.11.2020, 19:15
DarkMaster   Ну дык и я о том же. Едиственное экран на всяких с...   18.11.2020, 19:21
Crocotea   sendKey ("1||4") wait(100)...   18.11.2020, 21:24
DarkMaster   ибо луа   18.11.2020, 21:45
Crocotea   Подскажите, при параллельном запуске 2 скриптов во...   19.11.2020, 0:50
DarkMaster   Скан коды клавиш для этого нужно смотреть. Ну и д...   19.11.2020, 2:29
Crocotea   Скан коды клавиш для этого нужно смотреть. Ну и д...   21.11.2020, 4:23
DarkMaster   sendKey ("100||"..string.char (0x1)) ка...   21.11.2020, 4:39
Crocotea   sendKey ("100||"..string.char (0x1)) ка...   21.11.2020, 5:18
Cockney   Вообще не точно.... Теперь задержка указывается по...   22.11.2020, 2:18
DarkMaster   Ну и предвосхищая возможные вопросы/проблемы реком...   22.11.2020, 4:17
cirus   Неплохо бы проверять открылся ли порт, если не отк...   22.11.2020, 4:34
Crocotea   Неплохо бы проверять открылся ли порт, если не от...   22.11.2020, 12:40
DarkMaster   Тогда надо и возвращать ошибку и мониторить возвр...   22.11.2020, 4:37
cirus   На плате лампочки мигают когда что-то приходит в ...   22.11.2020, 4:46
Cockney   что именно не так работает ?   22.11.2020, 13:31
Crocotea   что именно не так работает ? Стоит вопрос как н...   22.11.2020, 13:53
DarkMaster   https://github.com/arduino-libraries/Keyboa.../src...   22.11.2020, 15:07
Cockney   Архив распаковать, файл Arduino.lua положить в па...   23.11.2020, 0:11
Cockney   Архив распаковать, файл Arduino.lua положить в па...   25.11.2020, 18:50
DarkMaster   Так а с чего оно писать будет? Это ескейп, которы...   22.11.2020, 23:49
Crocotea   Так а с чего оно писать будет? Это ескейп, которы...   22.11.2020, 23:51
cirus   В архиве скетч, его вообще-то загрузить надо в ус...   22.11.2020, 23:53
Crocotea   В архиве скетч, его вообще-то загрузить надо в ус...   22.11.2020, 23:58
DarkMaster   cirus, теперь еще и с мышью. Круть. К нижеследующе...   23.11.2020, 1:09
cirus   Ну да, куда ещё-то. И загрузить в устройство. Da...   23.11.2020, 1:17
Crocotea   Ну да, куда ещё-то. И загрузить в устройство. Da...   23.11.2020, 14:07
DarkMaster   Хз. Как по мне смысла нет. Ничего вычислительно н...   23.11.2020, 2:00
cirus   key('S') напишет большую букву. Если над...   23.11.2020, 14:45
Crocotea   key('S') напишет большую букву. Если над...   23.11.2020, 15:21
DarkMaster   а text не работает что ли? Не выдержала душа) Убр...   23.11.2020, 17:55
DarkMaster   Обновлен Arduino.lua   23.11.2020, 18:39
DarkMaster   на чьем скетче? любом скетче [youtube]j1_IcoJG8...   23.11.2020, 20:28
Crocotea   на чьем скетче? любом скетче j1_IcoJG8vQ Достаточ...   23.11.2020, 20:55
Crocotea   Столкнулся с проблемой. При загрузке ЛЮБОГО парсин...   23.11.2020, 20:41
DarkMaster   какой именно скетч и какой именно arduino.lua? так...   23.11.2020, 21:31
Crocotea   какой именно скетч и какой именно arduino.lua? та...   23.11.2020, 22:56
DarkMaster   вы противоречите сами себе. Пожалуйста, подробне...   23.11.2020, 23:08
Crocotea   вы противоречите сами себе. Пожалуйста, подробнее...   23.11.2020, 23:09
DarkMaster   у меня блочатся внешние элементы. могу лишь догад...   23.11.2020, 23:15
Crocotea   у меня блочатся внешние элементы. могу лишь догад...   23.11.2020, 23:19
Crocotea   часть иероглифов, которые спамятся при старте П. ...   23.11.2020, 23:44
DarkMaster   Порт не спутали? Может нумерация изменилась. Текст...   23.11.2020, 23:52
Crocotea   Порт не спутали? Может нумерация изменилась. Текс...   24.11.2020, 0:05
DarkMaster   попробуй в чистом luajit, не в пилоте. можно взять...   24.11.2020, 0:09
cirus   Отправить команду в порт, с пилота или любой друг...   24.11.2020, 2:00
Crocotea   Отправить команду в порт, с пилота или любой друг...   24.11.2020, 12:35
DarkMaster   вау. а считать ответ кмд может?   24.11.2020, 2:35
cirus   Наверное может, не знаю.   24.11.2020, 11:27
cirus   Значит не в пилоте проблема. Причину спама не зна...   24.11.2020, 12:47
Crocotea   так же происходят перемещение и нажатия клавиш мыш...   24.11.2020, 13:51
cirus   Загрузите этот скетч: [code]#include <Keyboar...   24.11.2020, 14:22
Crocotea   Загрузите этот скетч: [spoiler=Скетч][code]#inclu...   24.11.2020, 17:17
DarkMaster   Господа, а меня тут мысль, так сказать посетила......   24.11.2020, 15:13
Crocotea   Есть 1 важное наблюдение запустил на ноуте то же с...   24.11.2020, 17:28
cirus   Порты могут меняться при загрузке скетча, почему ...   25.11.2020, 2:12
DarkMaster   Потому что это юсб и ком порты там виртуальные. В...   25.11.2020, 2:34
Cockney   В последней версии такого нет.   25.11.2020, 3:09
DarkMaster   Действительно... Crocotea, а нафига старую верси...   25.11.2020, 6:17
Crocotea   Действительно... Crocotea, а нафига старую версию ...   25.11.2020, 15:20
cirus   В ней надо небольшие правки вносить, т. к. остала...   25.11.2020, 15:09
DarkMaster   все обращения через hw. какую ошибку?   25.11.2020, 17:14
Crocotea   все обращения через hw. какую ошибку? 17:23...   25.11.2020, 17:24
DarkMaster   чего? файл arduino точно мой и на месте лежит? та...   25.11.2020, 18:23
Crocotea   чего? файл arduino точно мой и на месте лежит? та...   25.11.2020, 18:47
DarkMaster   Crocotea, Поправил. https://forum.uokit.com/index....   25.11.2020, 20:21
Cockney   Cockney, откуда этот кусок кода? скетч cirus. ...   25.11.2020, 21:31
Crocotea   Crocotea, Поправил. https://forum.uokit.com/index...   25.11.2020, 22:51
DarkMaster   Текст ошибки. Не может быть той же - там в этой с...   25.11.2020, 23:01
Crocotea   Текст ошибки. Не может быть той же - там в этой с...   25.11.2020, 23:07
DarkMaster   все через hw. hw.com = 8 hw.set_delay_key = 20 hw....   26.11.2020, 0:01
cirus   Пример использования: [code]--lua local hw = req...   26.11.2020, 2:15
Crocotea   Пример использования: [code]--lua local hw = re...   26.11.2020, 12:13
DarkMaster   я еще могу понять чем тебе не угодили _return и _e...   26.11.2020, 5:50
2 страниц V  1 2 >


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 17.6.2024, 8:05
Designed by Nickostyle