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

8 страниц V « < 5 6 7 8 >  
Ответить в эту темуОткрыть новую тему
> Pilot + Arduino (Hardware clicker)
Crocotea
сообщение 30.11.2020, 0:41
Сообщение #121


***

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



Цитата(cirus @ 29.11.2020, 23:12) *

Crocotea, проверьте этот код:
Узнать номер com порта, в котором arduino
Код
--lua
local ffi = require('ffi')
local setupapi = ffi.load('SetupAPI.dll')
local advapi32 = ffi.load('Advapi32.dll')

local DIGCF_ALLCLASSES = 4
local DIGCF_PRESENT = 2
local SPDRP_HARDWAREID = 1
local DICS_FLAG_GLOBAL = 1
local DIREG_DEV = 1
local KEY_READ = 131097
local BUFF_LEN = 20
local ERROR_SUCCESS = 0
local REG_SZ = 1

ffi.cdef[[
struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
struct HKEY__ { int unused; }; typedef struct HKEY__ *HKEY;
typedef HKEY *PHKEY;
typedef unsigned long ULONG;
typedef unsigned long   DWORD;
typedef DWORD         *LPDWORD;
typedef long   LONG;
typedef DWORD *PDWORD;
typedef unsigned char BYTE;
typedef BYTE *PBYTE, *LPBYTE;
typedef wchar_t         WCHAR;
typedef const char      *LPCSTR, *PCSTR;
typedef unsigned long ULONG_PTR, *PULONG_PTR;
typedef void *PVOID;
typedef PVOID HDEVINFO;
typedef ULONG DEVPROPTYPE;
typedef LONG LSTATUS;
typedef DWORD ACCESS_MASK;
typedef ACCESS_MASK REGSAM;

typedef struct _GUID {unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[8];} GUID;
typedef struct _SP_DEVINFO_DATA {DWORD cbSize; GUID ClassGuid; DWORD DevInst; ULONG_PTR Reserved;} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;

HDEVINFO SetupDiGetClassDevsA(const GUID *ClassGuid, PCSTR Enumerator, HWND hwndParent, DWORD Flags);
bool SetupDiDestroyDeviceInfoList(HDEVINFO DeviceInfoSet);
bool SetupDiEnumDeviceInfo(HDEVINFO DeviceInfoSet, DWORD MemberIndex, PSP_DEVINFO_DATA DeviceInfoData);
bool SetupDiGetDeviceRegistryPropertyA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property,
    PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize);
HKEY SetupDiOpenDevRegKey(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData,
  DWORD Scope, DWORD HwProfile, DWORD KeyType, REGSAM samDesired);
LSTATUS RegCloseKey(HKEY hKey);
LSTATUS RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType,LPBYTE lpData, LPDWORD lpcbData);
]]
function get_port(vid, pid)
    if vid == nil then return -1 end
    if pid == nil then return -2 end

    local com
    local DeviceInfoSet = ffi.new('HDEVINFO')
    local DeviceIndex = 0
    local DeviceInfoData = ffi.new('SP_DEVINFO_DATA', 0)
    local DevEnum = ffi.new('PCSTR', "USB")
    local ExpectedDeviceId = 'VID_' .. tostring(vid) .. '&PID_' .. tostring(pid)
    local szBuffer = ffi.new('unsigned char[1024]', 0)
    local ulPropertyType = ffi.new('DEVPROPTYPE[1]')
    local dwSize = ffi.new('PDWORD')
    DeviceInfoSet = setupapi.SetupDiGetClassDevsA(nil, DevEnum, nil, bit.bor(DIGCF_ALLCLASSES, DIGCF_PRESENT))
    DeviceInfoData.cbSize = ffi.sizeof(DeviceInfoData)

    while setupapi.SetupDiEnumDeviceInfo(DeviceInfoSet, DeviceIndex, DeviceInfoData) do
        DeviceIndex = DeviceIndex + 1
        if (setupapi.SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet, DeviceInfoData, SPDRP_HARDWAREID, ulPropertyType, szBuffer, ffi.sizeof(szBuffer), dwSize)) then
            if ffi.string(szBuffer):match(ExpectedDeviceId) then
                local hDeviceRegistryKey = ffi.new('HKEY')
                hDeviceRegistryKey = setupapi.SetupDiOpenDevRegKey(DeviceInfoSet, DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
                local pszPortName = ffi.new('char[?]', BUFF_LEN)
                local dwSize = ffi.new('DWORD[1]', ffi.sizeof(pszPortName))
                local dwType = ffi.new('DWORD[1]')
                if advapi32.RegQueryValueExA(hDeviceRegistryKey, "PortName", nil, dwType, pszPortName, dwSize) == ERROR_SUCCESS and dwType[0] == REG_SZ then
                    com = tonumber(ffi.string(pszPortName):match('%d+'))
                end
            end
            advapi32.RegCloseKey(hDeviceRegistryKey)
        end
    end
    setupapi.SetupDiDestroyDeviceInfoList(DeviceInfoSet)
    if com then return com end
    return 0
end

-- узнать номер порта, передавать vid, pid
local COM = get_port(2341, 8036)  -- указать нужные vid и pid
log(COM)

vid и pid можно узнать в Arduino IDE, в меню 'Инструменты', 'Получить информацию о плате'.


Нашел vid и pid скорректировал под свой. Выдал ошибку. результат:
https://ibb.co/QXttczp
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.11.2020, 0:53
Сообщение #122


**********

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



Цитата
Выдал ошибку.

Вообще-то это скрипт луа, а не скетч.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Crocotea
сообщение 30.11.2020, 1:39
Сообщение #123


***

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



Цитата(cirus @ 30.11.2020, 0:53) *

Вообще-то это скрипт луа, а не скетч.

оуу, так через пилот это запустить?
если через пилот то:
Код
1:40:55 14 (autosaved_14.txt, 0): 8
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.11.2020, 1:44
Сообщение #124


**********

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



Цитата
1:40:55 14 (autosaved_14.txt, 0): 8

Это нужный порт?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Crocotea
сообщение 30.11.2020, 2:52
Сообщение #125


***

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



Цитата(cirus @ 30.11.2020, 1:44) *

Это нужный порт?

да СОМ8
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.11.2020, 3:10
Сообщение #126


**********

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



Прикрепленный файл  arduino.zip ( 2,82 килобайт ) Кол-во скачиваний: 156

Добавил функцию в модуль. Теперь можно не указывать порт.
Код
--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))    -- код ошибки
     end_script ()
end
hw.set_delay_key(20)     -- установка пауз
hw.set_delay_mouse(20)

hw.mouse.left(400, 300)

Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Crocotea
сообщение 30.11.2020, 22:16
Сообщение #127


***

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



Цитата(cirus @ 30.11.2020, 3:10) *

Прикрепленный файл  arduino.zip ( 2,82 килобайт ) Кол-во скачиваний: 156

Добавил функцию в модуль. Теперь можно не указывать порт.
Код
--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))    -- код ошибки
     end_script ()
end
hw.set_delay_key(20)     -- установка пауз
hw.set_delay_mouse(20)

hw.mouse.left(400, 300)


Работает

Очень бы хотелось запускать все таки 2 и более скриптов паралельно
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 1.12.2020, 13:17
Сообщение #128


**********

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



Прикрепленный файл  arduino.zip ( 5 килобайт ) Кол-во скачиваний: 172

Убрал не нужные паузы из скетча.
При переполнении буфера, хотя такого не должно быть, 3 секунды будет гореть встроенный светодиод L. В этом случае нужно увеличить паузы.
Изменил функцию text(), теперь может вводить русские символы.

Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.12.2020, 1:53
Сообщение #129


**********

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



Перенесено в пост №2 https://forum.uokit.com/index.php?s=&sh...st&p=436373
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.12.2020, 8:42
Сообщение #130


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



cirus, у тебя второй пост в теме. Это очень хороший момент =) Можешь туда все выложить? Я сделаю линк на него с мануала. Либо надо просто создать(тебе, чтобы мог спокойно редактивроать) отдельную тему и туда переехать.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.12.2020, 11:41
Сообщение #131


**********

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



Цитата
cirus, у тебя второй пост в теме. Можешь туда все выложить?

Перенёс. Тему можно почистить.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Crocotea
сообщение 6.12.2020, 16:54
Сообщение #132


***

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



Цитата(cirus @ 27.11.2020, 12:52) *

Нет. Можно добавить свою функцию.
Код
--lua
local hw = require'arduino'
hw.com = 7    -- Номер порта
hw.set_delay_key(30)     -- установка пауз
hw.set_delay_mouse(30)

local function key2(code)
--    hw.key_down(hw.left_ctrl) -- зажать ctrl
    hw.key_down(hw.left_shift)  -- зажать shift
    hw.key(code)                      -- нажать клавишу
    hw.key_up(hw.left_shift)      -- отпустить  shift
--    hw.key_up(hw.left_ctrl)    -- отпустить ctrl
end
wait(3000)
key2('2')
key2('5')


добавьте пж эту функцию тоже в пример использования. тоже очень нужная

Цитата(cirus @ 23.11.2020, 14:45) *

key принимает 1 клавишу, если надо нажать несколько вызывайте key для каждого символа. Либо через функцию:
Код
--lua
require'Arduino'
COM = 7     -- номер порта

function _key(text)
    for symbol in text:gmatch(".") do
        key(symbol)
    end
end

wait(3000) -- за это время переключиться на нужное приложение
delaykey(20)   -- установить паузу между нажатиями клавиш
_key('sssss')


эту тоже, только адаптированную под текущий синтаксис


Цитата
Очень бы хотелось запускать все таки 2 и более скриптов паралельно

все еще очень актуально))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.12.2020, 16:59
Сообщение #133


**********

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



Цитата
эту тоже, только адаптированную под текущий синтаксис

Для этого есть функция text().
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.12.2020, 13:13
Сообщение #134


**********

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



Цитата
Очень бы хотелось запускать все таки 2 и более скриптов паралельно

Прикрепленный файл  arduino.zip ( 6,69 килобайт ) Кол-во скачиваний: 163

Пробуйте. Можно запускать несколько скриптов.
Нельзя останавливать скрипт пока ардуино не закончит выполнение операции, порт не закроется и придётся перезапускать пилот.

Все функции мыши, выполняющие клик, которые вызваны без параметров, делают клик в текущих координатах. Например:
Код
hw.mouse.left()   -- клик левой кнопкой мыши в тех координатах, где находится курсор в данный момент
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Crocotea
сообщение 7.12.2020, 17:14
Сообщение #135


***

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



Цитата(cirus @ 7.12.2020, 13:13) *

Прикрепленный файл  arduino.zip ( 6,69 килобайт ) Кол-во скачиваний: 163

Пробуйте. Можно запускать несколько скриптов.
Нельзя останавливать скрипт пока ардуино не закончит выполнение операции, порт не закроется и придётся перезапускать пилот.

Все функции мыши, выполняющие клик, которые вызваны без параметров, делают клик в текущих координатах. Например:
Код
hw.mouse.left()   -- клик левой кнопкой мыши в тех координатах, где находится курсор в данный момент



шикарно, работают несколько скриптов параллельно
хотел уточнить правильно ли я понял. Т.е. если работает скрипт №1 он нажимает s, пока он не закончит скрипт №2 ничего нажать не сможет, однако все остальные функции пилота работают в стандартном режиме? то есть например поиск цвета в скрипте №1 и соответствие цвета в нужных координатах в скрипте №2 будут считываться корректно?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 8.12.2020, 3:29
Сообщение #136


**********

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



Цитата
хотел уточнить

Допустим, скрипт1 отправляет команду ардуино, теперь скрипт1 ждёт когда устройство выполнит команду. В это время другие скрипты работают как надо, но если им потребуется отправить команду ардуино, то они будут ждать когда порт будет доступен для открытия. Скрипт1 дождётся ответа от ардуино, закроет порт и продолжит работу. Другие скрипты смогут отправить команду.
Приоритета у скриптов нет, какой успеет первым открыть порт, тот и выполнит команду.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.12.2020, 3:50
Сообщение #137


**********

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



Перенесено в пост №2.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
trico
сообщение 20.12.2020, 3:36
Сообщение #138


**

Neophyte
Сообщений: 31
Регистрация: 23.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.593
Возраст: 26



с arduino UNO получится? и поможет ли это в борьбе с gameguard?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 20.12.2020, 5:18
Сообщение #139


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Потихоньку переезжаем сюда https://forum.uokit.com/index.php?showtopic=70514
С гвардом поможет, про uno ничего сказать не могу.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.12.2020, 9:34
Сообщение #140


**********

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



Цитата
с arduino UNO получится?

Нет. Нужна плата с микроконтроллером ATmega32u4, в uno ATmega328.
Цитата
Mouse and Keyboard libraries
These core libraries allow a 32u4 based boards or Due and Zero board to appear as a native Mouse and/or Keyboard to a connected computer.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

8 страниц V « < 5 6 7 8 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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