|
|
|
Pilot + Arduino (Hardware clicker) |
|
|
cirus |
25.11.2020, 2:12
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 27512
Пользователь №: 16.971
Возраст: 29
|
Цитата Также меняются порты Порты могут меняться при загрузке скетча, почему так не знаю. Цитата гораздо важнее понимать, когда железка окончила работу С этого я и начал. Открыть порт и записать вообще не проблема, winapi CreateFile и WriteFile, открывает и записывает, ардуино читает и работает как положено. А вот прочитать потом что-либо, так и не получилось. Понятно что функция ReadFile, но она либо ничего не читает, либо весит пилот, типа ждёт когда что-то запишется в порт. Можно открывать порт в асинхронном режиме, открывает, записывает, но читать не хочет. В итоге пока так как есть, потом будет время попробую разобраться.
|
|
|
|
DarkMaster |
25.11.2020, 2:34
|
Модератор UOPilot
Сообщений: 9.565
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28524
Пользователь №: 11.279
|
Цитата Порты могут меняться при загрузке скетча, почему так не знаю. Потому что это юсб и ком порты там виртуальные. Выделяются динамически, а вот вниз не падают. Если есть жаление, то я даже как-то чистил нумерацию ибо совсем далеко ушли циферки. Цитата Открыть порт и записать вообще не проблема, winapi CreateFile и WriteFile, открывает и записывает, ардуино читает и работает как положено. А вот прочитать потом что-либо, так и не получилось. Понятно что функция ReadFile, но она либо ничего не читает, либо весит пилот, типа ждёт когда что-то запишется в порт. Можно открывать порт в асинхронном режиме, открывает, записывает, но читать не хочет. В итоге пока так как есть, потом будет время попробую разобраться. Может поднять второй ком? Я понимаю, что не совсем есть правильно и ты вообще хочешь дллкой, но я сторонник лаушного обвеса просто потому, что его можно в любой момент переделать под свои нужды, а как луа отработает в rw я хз - на popen там целый цирк ибо оно не умеет и читать и писать одновременно. Кстати луа функции багованные ибо надо открывать в бинарном режиме - не 'w', а 'wb', а то он будет хлам досылать типа переводов строки по идее. Crocotea, а дайка мне откомпиленный бинарник скетча cirus'а который ты используешь. Есть у меня идейка. Cockney Цитата while (buff[*curPos] != '|') { ++*curPos; } Нет проверки на размер буфера. Вот отсюда возможно и выход за пределы и спам остатками бинарника cirus. Цитата // пока не встретили разделитель while (buff[*curPos] != '|') { // попытка распарсить управляющую клавишу Аналогично.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Crocotea |
25.11.2020, 15:20
|
Novice
Сообщений: 51
Регистрация: 30.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.787
|
Цитата(DarkMaster @ 25.11.2020, 6:17) Действительно... Crocotea, а нафига старую версию то?) Пятая же последняя от Cockney. Отсюда походу и проблемы. В целом хотелось бы попросить протестить последнии версии обоих скетчей и мою обертку под скетч Cirus. Надо тему потихоньку в порядок приводить и править первый пост.
Протестил скетч Cockney №5 после Cirus стала работать... Странно но в последний раз не работали все 3. Цитата(DarkMaster @ 23.11.2020, 17:55) а 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 * (DELAY_KEY + 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") не понял как пользоваться Код --lua local hw = require'arduino' hw.key("a") com = 8 set_delay_key = 20 set_delay_mouse = 20
wait(1000) выдает ошибку
|
|
|
|
Crocotea |
25.11.2020, 17:24
|
Novice
Сообщений: 51
Регистрация: 30.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.787
|
Цитата(DarkMaster @ 25.11.2020, 17:14) все обращения через hw. какую ошибку?
Код 17:23:53 12 (autosaved_12.txt, 0): a runtime error. 3: attempt to index local 'hw' (a boolean value) --lua local hw = require'arduino' hw.key("a") com = 8 set_delay_key = 20 Такая
|
|
|
|
Crocotea |
25.11.2020, 18:47
|
Novice
Сообщений: 51
Регистрация: 30.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.787
|
Цитата(DarkMaster @ 25.11.2020, 18:23) чего? файл arduino точно мой и на месте лежит? так не бывает) попробуйте сделать log(type(hw)) сразу после загрузки через require
перепроверил луа, именно тот, пишет: Код 18:46:30 12 (autosaved_12.txt, 0): table 18:46:30 12 (autosaved_12.txt, 0): a runtime error. .\arduino.lua:64: attempt to perform arithmetic on global 'DELAY_KEY' (a nil value)
|
|
|
|
Crocotea |
25.11.2020, 23:07
|
Novice
Сообщений: 51
Регистрация: 30.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.787
|
Цитата(DarkMaster @ 25.11.2020, 23:01) Текст ошибки. Не может быть той же - там в этой строке более нет подобных упоминаний. Код брал с моего поста? Цитаты все я не правил.
файл луа https://yadi.sk/d/50YO-gi0qppIfwошибки Код 22:59:20 12 (autosaved_12.txt, 0): table 22:59:20 12 (autosaved_12.txt, 0): a runtime error. .\arduino.lua:64: attempt to perform arithmetic on global 'DELAY_KEY' (a nil value) 23:00:05 12 (autosaved_12.txt, 0): table 23:00:05 12 (autosaved_12.txt, 0): a runtime error. .\arduino.lua:64: attempt to perform arithmetic on global 'DELAY_KEY' (a nil value) 23:00:34 12 (autosaved_12.txt, 0): table 23:06:15 12 (autosaved_12.txt, 0): table 23:06:21 12 (autosaved_12.txt, 0): table 23:07:00 12 (autosaved_12.txt, 0): table ноль реакции Код --lua local hw = require'arduino' hw.key("a") com = 8 set_delay_key = 20 set_delay_mouse = 20
wait(1000) hw.key(6) hw.key("a") hw.key('a')
|
|
|
|
DarkMaster |
26.11.2020, 0:01
|
Модератор UOPilot
Сообщений: 9.565
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28524
Пользователь №: 11.279
|
все через hw. hw.com = 8 hw.set_delay_key = 20 hw.set_delay_mouse = 20 Цитата .\arduino.lua:64: attempt to perform arithmetic on global 'DELAY_KEY' (a nil value) Файл не соответсвует ошибке. Там просто нет DELAY_KEY в файле вообще нигде. В капсовом виде. Ругается вот на эту строку: Код wait(#text * (DELAY_KEY + DELAY_KEY * 0.2)) -- количество символов * пауза + 20% но ее больше не существует, теперь она: Код wait(#text * (export_array.delay_key + export_array.delay_key * 0.2)) -- количество символов * пауза + 20% Где-то запутались в файлах и версиях.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Crocotea |
26.11.2020, 12:13
|
Novice
Сообщений: 51
Регистрация: 30.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.787
|
Цитата(cirus @ 26.11.2020, 2:15)
arduino.zip ( 2,76 килобайт )
Кол-во скачиваний: 193 Пример использования: Код --lua local hw = require'arduino'
hw.com = 7 -- Номер порта -- установка пауз hw.set_delay_key(30) hw.set_delay_mouse(30)
wait(3000)
hw.key('A') -- нажать кнопку hw.key(hw["return"]) -- нажать Enter hw.text('qwerty!') -- отправить текст hw.key(hw.tab) -- нажать таб
wait(1000) hw.mouse.left(422, 124) -- клик левой кнопкой мыши hw.mouse.right(422, 124) -- клик правой wait(500) hw.mouse.left_dbl(422, 124) -- двойной клик wait(500) hw.mouse.drag(420, 120, 654, 38) -- переместить из одной точки в другую -- паузы можно убрать Код --lua local hw = require'arduino'
hw.com = 8 -- Номер порта -- установка пауз hw.set_delay_key(30) hw.set_delay_mouse(1000)
wait(3000) local a,b,x,y = 248, 266, 497, 374
::mt1:: --hw.key('A') -- нажать кнопку hw.mouse.move(a, b) hw.mouse.move(x, y) log(a,b,x,y) goto mt1 курсор также двигается в хаотичные места, а не по координатам Есть ли вероятность какой-то ошибки изза оконных и и экранных координат? в адруин читает экранные координаты, т.е получается относительные, а в окне пилота относительные координаты идут как 497, 374 abs
|
|
|
|
|
|
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|