|
Pilot + Arduino (Hardware clicker) |
|
|
yamenko |
7.3.2020, 19:21
|
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
|
|
|
|
|
|
Ответов
DarkMaster |
23.11.2020, 17:55
|
Модератор UOPilot
Сообщений: 9.567
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28527
Пользователь №: 11.279
|
Цитата key принимает 1 клавишу, если надо нажать несколько вызывайте key для каждого символа. Либо через функцию: а text не работает что ли? Не выдержала душа) Убран режим блондинки(капс), все функции и объявления перенесены в локальные, использование через require. Arduino.lua
Код local export_array = {}
export_array.com = 5 -- номер порта export_array.delay_key = 20 -- пауза между нажатиями клавиш. Только чтение, изменение через set_delay_key. export_array.delay_mouse = 20 -- пауза между нажатием и отпусканием кнопок мыши. Только чтение, изменение через set_delay_mouse.
export_array.mouse_left_button = 1 export_array.mouse_right_button = 2 export_array.mouse_middle_button = 4
export_array.left_ctrl = 0x80 export_array.left_shift = 0x81 export_array.left_alt = 0x82 export_array.left_gui = 0x83 export_array.right_ctrl = 0x84 export_array.right_shift = 0x85 export_array.right_alt = 0x86 export_array.right_gui = 0x87 export_array.up_arrow = 0xDA export_array.down_arrow = 0xD9 export_array.left_arrow = 0xD8 export_array.right_arrow = 0xD7 export_array.backspace = 0xB2 export_array.tab = 0xB3 export_array["return"] = 0xB0 export_array.esc = 0xB1 export_array.insert = 0xD1 export_array.delete = 0xD4 export_array.page_up = 0xD3 export_array.page_down = 0xD6 export_array.home = 0xD2 export_array["end"] = 0xD5 export_array.caps_lock = 0xC1 export_array.f1 = 0xC2 export_array.f2 = 0xC3 export_array.f3 = 0xC4 export_array.f4 = 0xC5 export_array.f5 = 0xC6 export_array.f6 = 0xC7 export_array.f7 = 0xC8 export_array.f8 = 0xC9 export_array.f9 = 0xCA export_array.f10 = 0xCB export_array.f11 = 0xCC export_array.f12 = 0xCD export_array.F1 = 0xC2 export_array.F2 = 0xC3 export_array.F3 = 0xC4 export_array.F4 = 0xC5 export_array.F5 = 0xC6 export_array.F6 = 0xC7 export_array.F7 = 0xC8 export_array.F8 = 0xC9 export_array.F9 = 0xCA export_array.F10 = 0xCB export_array.F11 = 0xCC export_array.F12 = 0xCD
local command = function (text) local file = io.open("COM" .. tostring(COM),"w") if file then file:write(text) file:close() wait(#text * (export_array.delay_key + export_array.delay_key * 0.2)) -- количество символов * пауза + 20% else log('Порт не открылся, скрипт остановлен') end_script() end end
export_array.set_delay_key = function (ms) if type(tonumber(ms)) ~= 'number' then return end command ('00' .. tostring(ms)) export_array.delay_key = ms end
export_array.set_delay_mouse = function (ms) if type(tonumber(ms)) ~= 'number' then return end command ('01' .. tostring(ms)) export_array.delay_mouse = ms end
export_array.key = function (code) if type(code) == 'number' then command ('1' .. tostring(tonumber(code))) else command ('1' .. tostring(code:byte())) end end
export_array.text = function (text) command ('2' .. text) end
export_array.key_down = function (code) if type(code) == 'number' then command ('3' .. tostring(tonumber(code))) else command ('3' .. tostring(code:byte())) end end
export_array.key_up = function (code) if type(code) == 'number' then command ('4' .. tostring(tonumber(code))) else command ('4' .. tostring(code:byte())) end end
export_array.mouse = {}
export_array.mouse.move = function (x, y) local mouseX, mouseY = mouse_pos('abs') local znakX, znakY = '+', '+' if mouseX - x > 0 then znakX = '-' end if mouseY - y > 0 then znakY = '-' end command ('5' .. znakX .. znakY .. tostring(math.abs(mouseX - x) * 0xFFFF + math.abs(mouseY - y))) end
export_array.mouse.click = function (x, y, button) if button == nil then button = export_array.mouse_left_button end export_array.mouse.move(x, y) command ('6' .. tostring(button)) end
export_array.mouse.left = function (x, y) export_array.mouse.move(x, y) command ('6' .. tostring(export_array.mouse_left_button)) end
export_array.mouse.right = function (x, y) export_array.mouse.move(x, y) command ('6' .. tostring(export_array.mouse_right_button)) end
export_array.mouse.middle = function (x, y) export_array.mouse.move(x, y) command ('6' .. tostring(export_array.mouse_middle_button)) end
export_array.mouse.dbl = function (x, y, button) if button == nil then button = export_array.mouse_left_button end export_array.mouse.move(x, y) command ('6' .. tostring(button)) wait(100) command ('6' .. tostring(button)) end
export_array.mouse.left_dbl = function (x, y) export_array.mouse.move(x, y) command ('6' .. tostring(export_array.mouse_left_button)) wait(100) command ('6' .. tostring(export_array.mouse_left_button)) end
export_array.mouse.right_dbl = function (x, y) export_array.mouse.move(x, y) command ('6' .. tostring(export_array.mouse_right_button)) wait(100) command ('6' .. tostring(export_array.mouse_right_button)) end
export_array.mouse.middle_dbl = function (x, y) export_array.mouse.move(x, y) command ('6' .. tostring(export_array.mouse_middle_button)) wait(100) command ('6' .. tostring(export_array.mouse_middle_button)) end
export_array.mouse.down = function (x, y, button) if button == nil then button = export_array.mouse_left_button end export_array.mouse.move(x, y) command ('7' .. tostring(button)) end
export_array.mouse.left_down = function (x, y) export_array.mouse.move(x, y) command ('7' .. tostring(export_array.mouse_left_button)) end
export_array.mouse.right_down = function (x, y) export_array.mouse.move(x, y) command ('7' .. tostring(export_array.mouse_right_button)) end
export_array.mouse.middle_down = function (x, y) export_array.mouse.move(x, y) command ('7' .. tostring(export_array.mouse_middle_button)) end
export_array.mouse.up = function (x, y, button) if button == nil then button = export_array.mouse_left_button end command ('8' .. tostring(button)) end
export_array.mouse.left_up = function (x, y) command ('8' .. tostring(export_array.mouse_left_button)) end
export_array.mouse.right_up = function (x, y) command ('8' .. tostring(export_array.mouse_right_button)) end
export_array.mouse.middle_up = function (x, y) command ('8' .. tostring(export_array.mouse_middle_button)) end
return export_array
Настройки
Код -- Номер порта com = 5 -- Пауза между нажатиями клавиш. -- Только чтение, изменение через set_delay_key. delay_key = 20 -- Пауза между нажатием и отпусканием кнопок мыши. -- Только чтение, изменение через set_delay_mouse. delay_mouse = 20 Список многосимвольных клавиш
Код mouse_left_button = 1 mouse_right_button = 2 mouse_middle_button = 4
left_ctrl = 0x80 left_shift = 0x81 left_alt = 0x82 left_gui = 0x83 right_ctrl = 0x84 right_shift = 0x85 right_alt = 0x86 right_gui = 0x87 up_arrow = 0xDA down_arrow = 0xD9 left_arrow = 0xD8 right_arrow = 0xD7 backspace = 0xB2 tab = 0xB3 return = 0xB0 _return = 0xB0 enter= 0xB0 esc = 0xB1 insert = 0xD1 delete = 0xD4 page_up = 0xD3 page_down = 0xD6 home = 0xD2 end = 0xD5 _end = 0xD5 caps_lock = 0xC1 f1 = 0xC2 f2 = 0xC3 f3 = 0xC4 f4 = 0xC5 f5 = 0xC6 f6 = 0xC7 f7 = 0xC8 f8 = 0xC9 f9 = 0xCA f10 = 0xCB f11 = 0xCC f12 = 0xCD F1 = 0xC2 F2 = 0xC3 F3 = 0xC4 F4 = 0xC5 F5 = 0xC6 F6 = 0xC7 F7 = 0xC8 F8 = 0xC9 F9 = 0xCA F10 = 0xCB F11 = 0xCC F12 = 0xCD Список доступных функций
Код set_delay_key (ms) -- установить задержку нажатий клавиатуры set_delay_mouse (ms) -- установить задержку нажатий мыши key (code) -- нажать клавишу клавиатуры text (text) -- отослать текст key_down (code) -- зажать (не отжимая) клавишу клавиатуры key_up (code) -- отжать клавишу клавиатуры mouse.move (x, y) -- переместить мышь mouse.click (x, y, button) -- кликнуть мышью, button должен содержать код клавиши мыши mouse.left (x, y) -- кликунть левой кнопкой mouse.right (x, y) -- кликнуть правой кнопкой mouse.middle (x, y) -- кликнуть средней кнопкой mouse.dbl (x, y, button) -- двойной клик, button должен содержать код клавиши мыши mouse.left_dbl (x, y) -- двойной клик левой кнопкой мыши mouse.right_dbl (x, y) -- двойной клик правой кнопкой мыши mouse.middle_dbl (x, y) -- двойной клик средней кнопкой мыши mouse.down (x, y, button) -- зажать (не отжимая) кнопку мыши, button должен содержать код клавиши мыши mouse.left_down (x, y) -- зажать (не отжимая) левую кнопку мыши mouse.right_down (x, y) -- зажать (не отжимая) правую кнопку мыши mouse.middle_down (x, y) -- зажать (не отжимая) среднюю кнопку мыши mouse.up (x, y, button) -- отжать кнопку мыши, button должен содержать код клавиши мыши mouse.left_up (x, y) -- отжать левую кнопку мыши mouse.right_up (x, y) -- отжать правую кнопку мыши mouse.middle_up (x, y) -- отжать среднюю кнопку мыши Использование
Код local hw = require'arduino' hw.key("a") Сообщение отредактировал DarkMaster - 25.11.2020, 20:20
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Сообщений в этой теме
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 cirus Архив распаковать, файл Arduino.lua положить в пап... 22.11.2020, 18:37 Crocotea
Архив распаковать, файл Arduino.lua положить в па... 22.11.2020, 23:44 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 Обновлен 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 страниц 1 2 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|