Автор Тема: автоматизация в Давинчи  (Прочитано 2281 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Vint

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

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

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



Ivankak

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

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



Ivankak

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

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

Код: Clickermann
  1. Print("test3----------------")
  2. $filename = "koorda.csv"          //задаем имя файла с координатиами
  3. $string = TFREAD($filename, 1)   //читаем первую строку
  4. Print($string)                    //печатаем прочитаную строку для контроля
  5. strseparate($string, ",", $arr)   //превращаем строку в массив
  6. print ($arr[2]  )                  //печатаем второй элемент
  7.  
  8. Print("test4----------------")
  9. strseparate(TFREAD("koorda.csv", 1), ",", $x)   //то же самое, но в одну строку
  10. print ("X1=",$x[1] )                             //печатаем первый элемент
  11. halt

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 и проверить и отредактировать.
« Последнее редактирование: Сентябрь 22, 2021, 05:20:10 am от Ivankak »

Vint

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

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

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #19 : Сентябрь 22, 2021, 02:49:03 pm »
Как дела с кодом?

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


Ivankak

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

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #21 : Сентябрь 22, 2021, 09:35:52 pm »
Или неправильный скрипт или, если плохо подхватывает в начале, может ему нужно плавное заведение в зону, но это вряд ли.
« Последнее редактирование: Сентябрь 23, 2021, 08:58:11 am от Vint »


Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #22 : Сентябрь 23, 2021, 12:35:34 am »


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

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

с определением одной клавиши нет вопросов- полно примеров.
Код: Clickermann
  1. //нажатие клавиши и устранение дребезга
  2. getkeysdown($kvar)
  3. getkeysdown($kvar1)
  4. WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
  5. getkeysdown($kvar1)
  6. waitms(15)
  7. END_CYC
  8.  
  9. SWITCH($kvar)
  10. CASE(#q)
  11.   print("Q")
  12. CASE(#w)
  13.   print("W")
  14. CASE(#e)
  15.   print("E")
  16. CASE(#R)
  17.   print("R")
  18. END_SWITCH
Однако, не могу понять, как определять нажатие сочетания клавиш.
что-то типа ctr+sift+a+b

Ivankak

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

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



Код: Clickermann
  1. SUB(Will)                      //подпрограмма установки мыши с зажатой лкм на нужную координату
  2.    LUP($_xmouse, $_ymouse)
  3.    WAITMS(10)
  4.    LDOWN($X[$N], $Y[$N])
  5.     print("координаты ", $X[$N],",", $Y[$N])
  6.  
  7. END_SUB
  8.  
  9. LOGCLEAR
  10.  
  11. $csv = "koorda.csv"          //задаем имя файла с координатами
  12. strseparate(TFREAD($csv, 2), ",", $Names)   //читаем строку  файла в массив $Names
  13. print ("$Names[3]=",$Names[3] )                //печатаем  элемент для проверки
  14. strseparate(TFREAD($csv, 3), ",", $X)   //читаем строку  файла в массив  $X
  15. print ("$X[3]=",$X[3] )                         //печатаем  элемент для проверки
  16. strseparate(TFREAD($csv, 4), ",", $y)   //читаем строку  файла в массив  $y
  17. print ("$y[3]=",$y[3] )                        //печатаем  элемент для проверки
  18. print("массив создан успешно")
  19. print()
  20.  
  21.  
  22.  
  23. WHILE(1)                                    // начало бесконечного цикла
  24. //нажатие клавиши и устранение дребезга
  25. getkeysdown($kvar)      // задаем переменную - какая клавиша нажата
  26. getkeysdown($kvar1)
  27. WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
  28. getkeysdown($kvar1)
  29. waitms(15)
  30. END_CYC
  31.  
  32. SWITCH($kvar)     // по условию, какая клавиша нажата - ветвим процесс
  33. CASE(#1)
  34.   print("нажата 1")
  35.      $n=1          // задаем номер для координат из массива
  36.      print("позиция мыши ",$Names[$N])
  37.    Will()
  38. CASE(#2)
  39.   print("нажата 2")
  40.   $n=2
  41. print("позиция мыши ",$Names[$N])
  42.      Will()
  43. CASE(#3)
  44. print("нажата 3")
  45.   $n=3
  46.   print("позиция мыши ",$Names[$N])
  47.    Will()
  48. CASE(#4)
  49.   print("нажата 4")
  50.   $n=4
  51.   print("позиция мыши ",$Names[$N])
  52.      Will()
  53. CASE(#5)
  54.   print("нажата 5")
  55.   $n=5
  56.   print("позиция мыши ",$Names[$N])
  57.      Will()
  58. CASE(#6)
  59.   print("нажата 6")
  60.   $n=6
  61.   print("позиция мыши ",$Names[$N])
  62.      Will()
  63. END_SWITCH
  64. waitms(15)    
  65. END_CYC
  66. haltt
  67.  

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

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

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
« Последнее редактирование: Сентябрь 23, 2021, 02:22:34 am от Ivankak »

Ivankak

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

Vint

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

getkeysdown заполняет массив. Массивы вот так сравнивать нельзя
Код: Clickermann
  1. WHILE($kvar = $kvar1)

Если при использовании массива указать просто имя $kvar, то будет использоваться элемент с индексом 0
Т. е $kvar равносильно $kvar[0]

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

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

Можешь посмотреть что попадает в массив, запустив такой код
Код: Clickermann
  1. SUB(log_kvar)
  2.    LOGCLEAR
  3.    LOGWRITE("$kvar:")
  4.    FOR($i=0, $i < ARRSIZE($kvar))
  5.        LOGWRITE("    ", $i, " : ", $kvar[$i])
  6.    END_CYC
  7. END_SUB
  8.  
  9. LOGCLEAR
  10.  
  11. WHILE(1)
  12.    GETKEYSDOWN($kvar)
  13.    log_kvar()
  14.    WAITMS(50)
  15. END_CYC

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


Vint

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

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

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

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

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


Ivankak

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

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

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

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

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


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

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



Ivankak

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

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

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

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

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


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

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

Vint

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


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


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

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