UoKit.com Форумы > Кликер > UO Pilot > Плагины и доп. ПО
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
cirus
Цитата
Подскажите как Arduino работает для виртуалок

Без понятия. Команды Arduino получает через com порт так что его точно придётся включать.
Цитата
И например такая плата подойдет?
https://aliexpress.ru/item/1005001742819480.html

Подойдёт.
Вверх
KotMC
Отрабатывает один раз, при повторном запуске UO Pilot зависает намертво при использовании этого скрипта:

скрипт

--lua

local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end

hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

local startX, startY, endX, endY = 530, 180, 757, 254 -- координаты поиска
local path = [["C:\img\img1.bmp"]] -- путь к картинке, bmp 24 бита
local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки
hint (a) -- результат поиска, подсказка в правом нижнем углу
if arr then -- если найдена
log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
hw.mouse.move (651, 225) -- переместить мышь
end


А если использовать этот то все работает многократно

скрипт

--lua

local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end

--hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши
--hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
--hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
--hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

local startX, startY, endX, endY = 530, 180, 757, 254 -- координаты поиска
local path = [["C:\img\img1.bmp"]] -- путь к картинке, bmp 24 бита
local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки
hint (a) -- результат поиска, подсказка в правом нижнем углу
if arr then -- если найдена
log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
--hw.mouse.move (651, 225) -- переместить мышь
end


Из за чего такое может происходить?

Вверх
DarkMaster
Если во втором скрипте раскомментировать:
Цитата
--hw.mouse.move (651, 225) -- переместить мышь

Проблема появится?

Если нет, то подозреваю проблема вот в этих переменных:
--hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
--hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
--hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

Раскомментируйте строки по одной и смотрите результат. Проверять все варианты бессмыленно.
Вверх
cirus
Цитата
Отрабатывает один раз
Из за чего такое может происходить?

По какой-то причине порт не закрывается. В результате при повтором запуске скрипта он просто ждёт когда порт будет доступен для открытия.
Такое может быть только если остановить скрипт во время выполнения команды ардуино. Других причин не знаю.
У меня работает этот скрипт.

Вверх
DarkMaster
Цитата
В результате при повтором запуске скрипта он просто ждёт когда порт будет доступен для открытия.

Хм... А можно как-то закрыть порт без ребута железки? Так каждый раз при некорректном завершении скрипта дергать задолбаешься)
Вверх
KotMC
Если во втором скрипте раскомментировать:

--hw.mouse.move (651, 225) -- переместить мышь

то все работает без зависаний.

Раскомментирование любой из этих строк:

--hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
--hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
--hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

приводит к полному зависанию пилота, которое лечится только через диспетчер задач.
Вверх
cirus
Цитата
А можно как-то закрыть порт без ребута железки?

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

KotMC, этот файл в папку с пилотом закиньте Нажмите для просмотра прикрепленного файла
В лог будет выводить сообщение что порт открыт и закрыт.
код
Код
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end

log 'clear' log 'mode compact'
log('установить паузу между нажатиями клавиш мыши')
hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши

log('\r\nустановить рандом между нажатиями клавиш мыши')
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек

log('\r\nустановить шаг перемещения курсора')
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается

log('\r\nустановить паузу между каждый шагом перемещения мыши')
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

log(hw.offset_mousemove)
log(hw.delay_mousemove)
log(hw.delay_mouse )
log(hw.random_delay_mouse)

log('\r\nперемещение курсора')
hw.mouse.move (651, 225) -- переместить мышь

После выполнения скрипта в логе должно быть это:
log
установить паузу между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить рандом между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить шаг перемещения курсора
Открытие порта
Порт открыт
Закрытие порта: true

установить паузу между каждый шагом перемещения мыши
Открытие порта
Порт открыт
Закрытие порта: true
4
2
20
10

перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true

Вверх
KotMC
Цитата(cirus @ 18.1.2021, 13:16)

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

KotMC, этот файл в папку с пилотом закиньте Нажмите для просмотра прикрепленного файла
В лог будет выводить сообщение что порт открыт и закрыт.
код
Код
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end

log 'clear' log 'mode compact'
log('установить паузу между нажатиями клавиш мыши')
hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши

log('\r\nустановить рандом между нажатиями клавиш мыши')
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек

log('\r\nустановить шаг перемещения курсора')
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается

log('\r\nустановить паузу между каждый шагом перемещения мыши')
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

log(hw.offset_mousemove)
log(hw.delay_mousemove)
log(hw.delay_mouse )
log(hw.random_delay_mouse)

log('\r\nперемещение курсора')
hw.mouse.move (651, 225) -- переместить мышь

После выполнения скрипта в логе должно быть это:
log
установить паузу между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить рандом между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить шаг перемещения курсора
Открытие порта
Порт открыт
Закрытие порта: true

установить паузу между каждый шагом перемещения мыши
Открытие порта
Порт открыт
Закрытие порта: true
4
2
20
10

перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true



Всё сделал в точности, работает раз через раз. То выводит полный лог, то зависает. Если в момент зависания вытащить arduino и заново вставить, лог начнет двигаться и так за несколько раз вытаскивания вставления лог доходит до конца , после этого может несколько раз работать без зависаний.

Изначально стоял драйвер, который идёт при установки ArduinoIDE, пробовал менять его на драйвер из шапки, с ним не работает вовсе. Все делаю на заново установленной win10.

Вешает пилот однозначно arduino.
Вверх
cirus
Попробуйте другие драйвера, они могут отличаться.
Вверх
KotMC
Перепробовал много разных драйверов результат один, либо сразу зависает либо на втором, третьем пуске.
Поставил win 7 с "родными" драйверами из ArduinoIDE работает более менее стабильно, если зациклить скрипт будет работать пока не отключишь. Драйвер из шапки не смог поставить.

А вот в ручную все же можно повесить порт или пилота - частым запуском, если не делать паузу в секунд 5, после посл вывода:

перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true




Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.