Author Topic: автоматизация в Давинчи  (Read 7283 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #15 on: September 17, 2021, 12:29:10 PM »
Спасибо за код.
Массив это координаты органов управления Давинчи, на которые надо позиционировать курсор.
N - это переменная, условный номер органа управления для удобства она номер элемента в массиве, где хранятся координаты.
Вот картинка - номера не обязательно в таком порядке, просто для ясности.

Это удобно столько горячих клавиш?

Я бы всю центральную часть разделил на 4 группы, а в каждой однотипные органы управления.
Выбрал 2 группу. Выбрал зелёный G и меняешь.  2--G
Выбрал 4 группу. Выбрал зелёный G и меняешь.  4--G



Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #16 on: September 18, 2021, 12:05:26 AM »
Да, вы правы, сегодня как раз думал о назначении клавиш.
У меня была такая же мысль.
Возможно, я назначу их на дополнительную клавиатуру, где кнопки будут расположены соответствующим образом.

Моя картинка про количество элементов в массиве для хранения координат. Чтобы было понятно, о каком количестве проверок на нажатие разных клавиш. Их примерно 35, но скорее всего немного больше.



Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #17 on: September 22, 2021, 04:52:28 AM »
Внезапно "нашел" оператор TFREAD. Это позволяет сделать файл с координатами более читаемым и подготавливать его в Экселе или Open office Calc.

тестовый файл с координатами имя файла koorda.csv, такой, как его сохраняет Open office Calc:
Code: [Select]
x,90,34,75,109,146,85
y,854,925,927,926,927,960
в начале нулевой элемент удобно обозначает координатную ось а первый элемент соответствует первому элементу управления.
Позже я сделаю в таблице строку с названиями элементов и строку с их номерами, но читать в массив их не буду. Использую только для ясности в таблице.

Code: (clickermann) [Select]
Print("test3----------------")
$filename = "koorda.csv"          //задаем имя файла с координатиами
$string = TFREAD($filename, 1)   //читаем первую строку
Print($string)                    //печатаем прочитаную строку для контроля
strseparate($string, ",", $arr)   //превращаем строку в массив
print ($arr[2]  )                  //печатаем второй элемент

Print("test4----------------")
strseparate(TFREAD("koorda.csv", 1), ",", $x)   //то же самое, но в одну строку
print ("X1=",$x[1] )                             //печатаем первый элемент
halt

Code: [Select]
9:00:06 test3----------------
9:00:06 x,90,34,75,109,146,85
9:00:06 34
9:00:06 test4----------------
9:00:06 X1=90

Запись в одну строку экономит память за счет того, что не объявляются переменные? Работает ли это быстрее чем длинная запись?

Возможно, стоит попробовать сделать отдельный скрипт для записи координат в файл, чтоб не вручную табличку делать, а потыкать мышью в интерфейс и по клавишам, и клавиши назначались, координаты сами собрались бы,  и записались в файл CSV, а его потом всегда можно открыть в Open office Calc и проверить и отредактировать.
« Last Edit: September 22, 2021, 05:20:10 AM by Ivankak »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #18 on: September 22, 2021, 09:02:12 AM »
Запись в одну строку экономит память за счет того, что не объявляются переменные? Работает ли это быстрее чем длинная запись?
Не имеет значения. На малых данных, как у тебя нет разницы, даже не стоит задумываться об экономии. А вот читаемость снижается. Код пишут 1 раз, а читают много.
Быстрее тоже не будет.

Возможно, стоит попробовать сделать отдельный скрипт для записи координат в файл, чтоб не вручную табличку делать, а потыкать мышью в интерфейс и по клавишам, и клавиши назначались, координаты сами собрались бы,  и записались в файл CSV, а его потом всегда можно открыть в Open office Calc и проверить и отредактировать.
Зачем пробовать, бери и делай, это не такой большой код как кажется, к нему не нужно готовится.
Так готовят данные не редко, глупо иметь инструмент автоматизации и готовить нуЖ/Дные данные вручную.

Мне кажется ты не с того начал. Рано подготавливать координаты для всех элементов. Сначала нужно проверить возможность  и сделать весь основной функционал на одном элементе. Может ты столкнёшся с трудностями которые изменят концепцию.
« Last Edit: September 22, 2021, 09:50:22 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #19 on: September 22, 2021, 02:49:03 PM »
Как дела с кодом?

Какие нибудь тесты делал? Что по управляемости?


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #20 on: September 22, 2021, 08:21:14 PM »
Да, я сделал тесты. Еще в самом начале, В принципе работает. Есть небольшие странности. Когда мышью нажимаешь на центр цветового колеса, в Давинчи, то мышь начинает двигаться раза в 2 медленнее и за счет этого увеличивается точность выбора цвета.
но когда то же самое делаешь через кликерман, то при больших отклонениях мышь как бы "соскакивает" и цветовой курсор, белая точка, соскакивает к краю колеса.
 Но, возможно, что я тогда что-то нахомутал и причина не в кликермане.

Я очень медленно продвигаюсь каждый новый оператор требует много времени для понимания.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #21 on: September 22, 2021, 09:35:52 PM »
Или неправильный скрипт или, если плохо подхватывает в начале, может ему нужно плавное заведение в зону, но это вряд ли.
« Last Edit: September 23, 2021, 08:58:11 AM by Vint »


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #22 on: September 23, 2021, 12:35:34 AM »


Думаю сделать какую-то такую клавиатуру на ардуино, чтоб не путаться в хоткеях.
желтые это N1-N4
сиреневая - колесо
 
Эту картинку набросал для ясности в разговоре. Ничего еще не проектировал.

Затея состоит в том, чтобы не пересекаться с шоткатами в давинчи.
Тогда можно будет назначить, чтоб эта клавиатура посылала коды нажатия любые. Например A+B+C.
Хочу выбрать какие-то несуразные сочетания, которых не может быть в нормальной жизни.

с определением одной клавиши нет вопросов- полно примеров.
Code: (clickermann) [Select]
//нажатие клавиши и устранение дребезга
getkeysdown($kvar)
getkeysdown($kvar1)
WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
getkeysdown($kvar1)
 waitms(15)
END_CYC

SWITCH($kvar)
CASE(#q)
   print("Q")
CASE(#w)
   print("W")
CASE(#e)
   print("E")
CASE(#R)
   print("R")
END_SWITCH
Однако, не могу понять, как определять нажатие сочетания клавиш.
что-то типа ctr+sift+a+b

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #23 on: September 23, 2021, 01:45:42 AM »
Написал код. Почти все работает.
проблема в следующем: пока зажата лкм не реагирует на нажатия кнопок.

Нажимаю "1" (или другую назначенную клавишу) - курсор встает, куда надо и все работает.
Но после этого не реагирует на другие кнопки, пока не кликнешь лкм.



Code: (clickermann) [Select]
SUB(Will)                      //подпрограмма установки мыши с зажатой лкм на нужную координату
    LUP($_xmouse, $_ymouse)
    WAITMS(10)
    LDOWN($X[$N], $Y[$N])
     print("координаты ", $X[$N],",", $Y[$N])
 
END_SUB

LOGCLEAR

$csv = "koorda.csv"          //задаем имя файла с координатами
strseparate(TFREAD($csv, 2), ",", $Names)   //читаем строку  файла в массив $Names
print ("$Names[3]=",$Names[3] )                //печатаем  элемент для проверки
strseparate(TFREAD($csv, 3), ",", $X)   //читаем строку  файла в массив  $X
print ("$X[3]=",$X[3] )                         //печатаем  элемент для проверки
strseparate(TFREAD($csv, 4), ",", $y)   //читаем строку  файла в массив  $y
print ("$y[3]=",$y[3] )                        //печатаем  элемент для проверки
print("массив создан успешно")
print()



WHILE(1)                                    // начало бесконечного цикла
//нажатие клавиши и устранение дребезга
getkeysdown($kvar)      // задаем переменную - какая клавиша нажата
getkeysdown($kvar1)
WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
getkeysdown($kvar1)
 waitms(15)
END_CYC

SWITCH($kvar)     // по условию, какая клавиша нажата - ветвим процесс
CASE(#1)
   print("нажата 1")
      $n=1          // задаем номер для координат из массива
      print("позиция мыши ",$Names[$N])
    Will()
CASE(#2)
   print("нажата 2")
   $n=2
print("позиция мыши ",$Names[$N])
      Will()
CASE(#3)
print("нажата 3")
   $n=3
   print("позиция мыши ",$Names[$N])
    Will()
CASE(#4)
   print("нажата 4")
   $n=4
   print("позиция мыши ",$Names[$N])
      Will()
CASE(#5)
   print("нажата 5")
   $n=5
   print("позиция мыши ",$Names[$N])
      Will()
CASE(#6)
   print("нажата 6")
   $n=6
   print("позиция мыши ",$Names[$N])
      Will()
END_SWITCH
waitms(15)   
END_CYC
haltt

потом опрос клавиш хочу убрать в цикл - для этого заготовлены строки в csv под коды клавиш Key code1-3

содержимое файла koorda.csv

Code: [Select]
0,1,2,3,4,5,6
0,Whill,Y,R,G,B,all
x,90,34,75,109,146,85
y,854,925,927,926,927,960
Key code1,0,0,0,0,0,0
Key code2,0,0,0,0,0,0
Key code3,0,0,0,0,0,0
« Last Edit: September 23, 2021, 02:22:34 AM by Ivankak »

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #24 on: September 23, 2021, 02:52:01 AM »
Возможно, лучше с крутилками делать пульт.
Однако, энкодеры дороже и в 3 раза больше ног на ардуино надо.
Идеально - начал крутить - мышь сама перепрыгнула, куда надо.
Похуже вариант - энкодеры с кнопкой нажал сверху, покрутил, следующий - нажал покрутил.
При такой стоимости разработки уже можно и трекбол туда засунуть....
Все равно дешевле в 10 раз чем самая дешевая панель от блекмэджик будет.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #25 on: September 23, 2021, 12:43:00 PM »
Написал код. Почти все работает.
Нажимаю "1" (или другую назначенную клавишу) - курсор встает, куда надо и все работает.
Приведённый код не может работать. По крайней мере на моей системе. Кстати, какая у тебя версия кликера?

getkeysdown заполняет массив. Массивы вот так сравнивать нельзя
Code: (clickermann) [Select]
WHILE($kvar = $kvar1)
Если при использовании массива указать просто имя $kvar, то будет использоваться элемент с индексом 0
Т. е $kvar равносильно $kvar[0]

Не пользовался getkeysdown, но по опытам видно, что нулевой элемент всегда равен 0, не знаю почему так, может автор что забыл выключить в тестах. Поэтому сравнение только нулевых элементов - всегда истина.

Так же в этот массив попадают и нажатые кнопки мыши (код 1, 2, 4)

Можешь посмотреть что попадает в массив, запустив такой код
Code: (clickermann) [Select]
SUB(log_kvar)
    LOGCLEAR
    LOGWRITE("$kvar:")
    FOR($i=0, $i < ARRSIZE($kvar))
        LOGWRITE("    ", $i, " : ", $kvar[$i])
    END_CYC
END_SUB

LOGCLEAR

WHILE(1)
    GETKEYSDOWN($kvar)
    log_kvar()
    WAITMS(50)
END_CYC

Твоё условие выше всегда выполняется


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #26 on: September 23, 2021, 12:55:29 PM »
Возможно, лучше с крутилками делать пульт.
Однако, энкодеры дороже и в 3 раза больше ног на ардуино надо.
Идеально - начал крутить - мышь сама перепрыгнула, куда надо.
Похуже вариант - энкодеры с кнопкой нажал сверху, покрутил, следующий - нажал покрутил.

Прикольно. А разве у ардуино есть столько входов? Или там есть приблуды для расширения?

Cкажи куда делось определение перемещения мыши? Ну и колеса, заодно. Минимум из схемы скрипта. Концепция использования поменялась?

Пока не дошло до железячной стадии, я тут смотрел на AutoIt есть функционал для определения вращения колеса мыши. Есть блокировка кликов, чтоб они не проходили к приложению и блокировка клавиатуры (это не тестил) - как раз можно при переключении на блок включать блокировку и простых хоткеев, не нужно будет монструозных A+B+C.

Можно всё сделать там или чуть поднапрячся, написать больше кода и прокинуть нужные функции в кликер. Но нужно чётко определить в какие моменты ловить перемещения и кручение, а в какие нет. Ведь нормальное использование тоже крутит-перемещает. Из описания и блок-схемы эти моменты описаны неправильно, так пользоваться будет нельзя.


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #27 on: September 23, 2021, 06:13:13 PM »
Quote
. Кстати, какая у тебя версия кликера?
У меня Clickermann v4.13 x64.
Quote
Приведённый код не может работать. По крайней мере на моей системе
Это очень интересно. А хоть что-то происходит?

может ли быть такое, что пока зажата лкм командой
Code: (clickermann) [Select]
LDOWN($X[$N], $Y[$N]) кликерман не видит новых нажатий клавиш?

Quote
Cкажи куда делось определение перемещения мыши? Ну и колеса, заодно.
Это нужно было, чтоб программа сама, без нажатия кнопки, определяла и переключалась между этими двумя координатами
Если нет возможность определять вращение колеса, то нет смысла и определять смещение мыши.

Code: (clickermann) [Select]
WHILE($kvar = $kvar1)В моем коде затея состоит в том, что когда клавиша нажата долго, то первые элементы массивов становятся равны и цикл начинает крутиться создавая задержку. Но в момент отпускания они сразу становятся не равны и программа идёт дальше.
Но, теперь я понимаю, как надо сделать. Спасибо за пример.

Quote
А разве у ардуино есть столько входов? Или там есть приблуды для расширения?
на Ардуино нет столько ног, но можно поставить сдвиговый регистр и добавить.
А еще можно подумать над дизайном и уменьшить количество энкодеров. На картинке же просто функциональная схема, без дизайна, что пришло в голову за 10 секунд, просто, чтоб меня было понятно.


Quote
Пока не дошло до железячной стадии, я тут смотрел на AutoIt есть функционал для определения вращения колеса мыши. Есть блокировка кликов, чтоб они не проходили к приложению и блокировка клавиатуры (это не тестил) - как раз можно при переключении на блок включать блокировку и простых хоткеев, не нужно будет монструозных A+B+C.
Если дойдет до железа, то есть варианты.
Использовать кнопку для переключения на координаты.
Использовать вместо колеса мыши энкодер на пульте.
Все можно запрограммировать там и не нужно будет никакого софта на винде. И мышь подключать прямо к ней по PS2.
А еще можно попросить кого-то написать dll, чтоб прикрутить доп события мыши.

Quote
Но нужно чётко определить в какие моменты ловить перемещения и кручение, а в какие нет. Ведь нормальное использование тоже крутит-перемещает. Из описания и блок-схемы эти моменты описаны неправильно, так пользоваться будет нельзя.
Да, это правда. Когда я рисовал схему, то полагал, что дополнительным условием для перемещения курсора по событиям мыши будет, какое из цветовых колес в интерфейсе было использовано последним. А когда эта часть работы будет выполнена, то вообще выключить использование этого скрипта. Может перевести в другой цикл, который только отслеживает свой шоткат, чтоб вернуться.



Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #28 on: September 23, 2021, 06:15:32 PM »
Quote
. Кстати, какая у тебя версия кликера?
У меня Clickermann v4.13 x64.
Quote
Приведённый код не может работать. По крайней мере на моей системе
Это очень интересно. А хоть что-то происходит?

может ли быть такое, что пока зажата лкм командой
Code: (clickermann) [Select]
LDOWN($X[$N], $Y[$N]) кликерман не видит новых нажатий клавиш?

Quote
Cкажи куда делось определение перемещения мыши? Ну и колеса, заодно.
Это нужно было, чтоб программа сама, без нажатия кнопки, определяла и переключалась между этими двумя координатами
Если нет возможность определять вращение колеса, то нет смысла и определять смещение мыши. Это вообще сомнительная плюшка в таком алгоритме работы. Если все переключется клавишами, то какой смысл одну единственную крутилку отлавливать с такими сложностями?

Code: (clickermann) [Select]
WHILE($kvar = $kvar1)В моем коде затея состоит в том, что когда клавиша нажата долго, то первые элементы массивов становятся равны и цикл начинает крутиться создавая задержку. Но в момент отпускания они сразу становятся не равны и программа идёт дальше.
Но, теперь я понимаю, как надо сделать. Спасибо за пример.

Quote
А разве у ардуино есть столько входов? Или там есть приблуды для расширения?
на Ардуино нет столько ног, но можно поставить сдвиговый регистр и добавить.
А еще можно подумать над дизайном и уменьшить количество энкодеров. На картинке же просто функциональная схема, без дизайна, что пришло в голову за 10 секунд, просто, чтоб меня было понятно.


Quote
Пока не дошло до железячной стадии, я тут смотрел на AutoIt есть функционал для определения вращения колеса мыши. Есть блокировка кликов, чтоб они не проходили к приложению и блокировка клавиатуры (это не тестил) - как раз можно при переключении на блок включать блокировку и простых хоткеев, не нужно будет монструозных A+B+C.
Если дойдет до железа, то есть варианты.
Использовать кнопку для переключения на координаты.
Использовать вместо колеса мыши энкодер на пульте.
Все можно запрограммировать там и не нужно будет никакого софта на винде. И мышь подключать прямо к ней по PS2.
А еще можно попросить кого-то написать dll, чтоб прикрутить доп события мыши.

Quote
Но нужно чётко определить в какие моменты ловить перемещения и кручение, а в какие нет. Ведь нормальное использование тоже крутит-перемещает. Из описания и блок-схемы эти моменты описаны неправильно, так пользоваться будет нельзя.
Да, это правда. Когда я рисовал схему, то полагал, что дополнительным условием для перемещения курсора по событиям мыши будет, какое из цветовых колес в интерфейсе было использовано последним. А когда эта часть работы будет выполнена, то вообще выключить использование этого скрипта. Может перевести в другой цикл, который только отслеживает свой шоткат, чтоб вернуться.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #29 on: September 23, 2021, 06:23:47 PM »
Это очень интересно. А хоть что-то происходит?
Как и положено, доходит до цикла сдерживания и навечно там застревает. Правда, у меня версия везде x32


может ли быть такое, что пока зажата лкм командой
кликерман не видит новых нажатий клавиш?
Он у тебя застревает там же, только позже.


Это нужно было, чтоб программа сама, без нажатия кнопки, определяла и переключалась между этими двумя координатами
Если нет возможность определять вращение колеса, то нет смысла и определять смещение мыши.
Возможность есть. Сторонней программой. Но логика работы непонятна. Как отделить моменты.

.
А еще можно попросить кого-то написать dll, чтоб прикрутить доп события мыши.
Я dll, конечно, не напишу, но если не найдёшь, на AutoIt могу всё прикрутить.
« Last Edit: September 23, 2021, 06:33:31 PM by Vint »