Author Topic: Изменить способ обращения  (Read 28922 times)

0 Members and 1 Guest are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #45 on: November 30, 2019, 11:00:29 AM »
Ну вот примерно так, судя по мануалу, будет выглядеть перемещение курсора. Писал в слепую, неначем проверить. Может Vint поможет если чтото не так пойдет.

Тут полный готовый скетч с двумя функциями - клик мыши, и перемещение курсора:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val

////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}



Тут твой тест, переделанный под ардуино, вместе с нужными подпрограммами:

Code: (clickermann) [Select]
#name "arduino mouse/keybord"

$comport = 6  //порт твоей ардуины

SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB

SUB(Mouse_click, $button)   // button = 1 это левая кнопка, 2 -  правая, 3 - средняя
   action(268435456 + $button) //в ардуино выйдет первая функция и нужный из трех параметров
END_SUB

SUB(Mouse_move, $x_cor, $y_cor)
   WHILE(($x_cor ! $_xmouse)&($y_cor ! $_ymouse))
      $x_temp = $_xmouse
      $y_temp = $_ymouse
      $x_dist = $x_cor - $_xmouse           // определяем расстояние до нуженой точки
      $y_dist = $y_cor - $_ymouse
     
      IF((-128 < $x_dist)&($x_dist < 127))   //проверяем, чтоб не заходило значение за пределы char
         IF($x_dist < 0)
            $x_dist = 127 - $x_dist     //переделываем в беззнаковый unsigned char
         END_IF
      END_IF
     
      IF((-128 < $y_dist)&($y_dist < 127))
         IF($y_dist < 0)
            $y_dist = 127 - $y_dist
         END_IF
      END_IF
     
      action(536870912 + $x_cor*256 + $y_cor) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CYC
      //на всякий случай поставлю задержку добротную, я хз как там ардуина двигает этот курсор
      wait(5)//пять секунд, если она не требуется, убери или уменьши до нужного!!!!!!!!!!!!!!!!!!
   END_CYC
END_SUB





//твой код  (переделанный под ардуино)

GETSCREEN
IF(PXL(56,71) = 43045)
   Mouse_move(56,71)
   waitms(100)
   Mouse_click(1)
   WAITMS(500)
   LOGWRITE ("Нашел цвет текущие коры указателя = ",$_xmouse," х ",$_ymouse)
   WAITMS(100)
END_IF
Mouse_move(100,100)
LOGWRITE ("текущие коры указателя = ",$_xmouse," х ",$_ymouse)

LOGWRITE (" ")

//остановку убрал, чтоб работа шла постоянно в активном окне. Проверяй лог, если все будет работать, и пиши что вышло.



-------------------------------
Думал заказать микру, сегодня привезли бы, но глянул - 485р+доставка... нету денег :-[. В другой раз, мне коечто еще нужно купить, заодно и ардуинку возьму.
« Last Edit: November 30, 2019, 11:16:17 AM by dramster »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #46 on: November 30, 2019, 02:34:32 PM »
Лог пустой ничего не происходит :-[

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #47 on: November 30, 2019, 02:50:42 PM »
Конечно не происходит, там же ошибка. По крайней мере одну я нашел, но возможно их больше  :D

Строка 35 кликермана, вызов подпрограммы, не верные параметры. Вместо:
Code: (clickermann) [Select]
action(536870912 + $x_cor*256 + $y_cor)
Нужно:
Code: (clickermann) [Select]
action(536870912 + $x_dist*256 + $y_dist)
Проверяй, если не будет работать, будем добавлять логирование и в ардуину и в кликерман.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #48 on: November 30, 2019, 02:57:43 PM »
Далеко не уходи могу до утра сидеть) может скайп? мой - ggkvova  всегда на связе

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #49 on: November 30, 2019, 03:07:12 PM »
Окно игры активно, мышь не двигается, лог пустой. окошко командной строки появляется 1 раз если ничего не трогать, но если двигать курсором окно командной строки появляется каждый цыкл кликмана. Есще не знаю важно или нет но окошко появляется в разных местах, чем дальше курсор от координат 0, 0  тем дальше окно ком. строки

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #50 on: November 30, 2019, 03:23:31 PM »
Ок, для начала убери вот это из кликера,
Code: (clickermann) [Select]
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CYC
оставим статическую задержку в 5сек.

Далее посмотрим что там мы принимаем в ардуине. IDE -меню - инструменты - монитор порта. Там можно смотреть лог работы платы. Открой его, и скажешь что там будет. Скрипт выполнишь один раз в активном окне.

Теперь нужно добавить то самое логирование. Готовый скетч будет выглядеть так:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val
  Serial.println(val, DEC);
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}

Не забывай компилировать и загружать скетч в микруху.


Подправил немного, повтори заново !!!!!!!!!!
« Last Edit: November 30, 2019, 03:27:55 PM by dramster »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #51 on: November 30, 2019, 03:30:14 PM »
При проверке такое пишет
exit status -1073741819
Ошибка компиляции для платы Arduino/Genuino Micro.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #52 on: November 30, 2019, 03:32:18 PM »
Офигеть просто при включенной игре, проверка не проходит ))))

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #53 on: November 30, 2019, 03:35:59 PM »
То же самое, окно появляется теперь каждые 5сек, мышь стоит на месте клики не происходят, лог пустой

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #54 on: November 30, 2019, 03:39:58 PM »
а в мониторе порта что?


Немного сменил скетч, ато там нули будут идти постоянно:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}
« Last Edit: November 30, 2019, 03:42:21 PM by dramster »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #55 on: November 30, 2019, 03:46:42 PM »
Постоянно идет ноль, даже при отработке смд

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #56 on: November 30, 2019, 03:49:28 PM »
Еще проверил этот вариант, не в игре а просто на рабочем столе, поменял координаты в кликермане, что бы попадал в ярлык, но ни лкм, пкм не происходит
http://crapware.aidf.org/forum/index.php?topic=5215.msg34120#msg34120

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #57 on: November 30, 2019, 03:50:36 PM »
Постоянно идет ноль, даже при отработке смд
глянь выше, я там поправил немного чтоб нули не шли.
или это именно на последнем варианте тоже нули?

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #58 on: November 30, 2019, 03:52:50 PM »
последний вариант

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #59 on: November 30, 2019, 03:54:14 PM »
Еще проверил этот вариант, не в игре а просто на рабочем столе, поменял координаты в кликермане, что бы попадал в ярлык, но ни лкм, пкм не происходит
http://crapware.aidf.org/forum/index.php?topic=5215.msg34120#msg34120
кстати тут вообще не идет лог в мониторе порта