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

0 Members and 1 Guest are viewing this topic.

Ramzesia

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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #76 on: November 30, 2019, 05:00:11 PM »
Ну теперь то точно все сработает... этот гребанный язык си..... >:(
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;


 
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) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      Serial.println("Mouse_click");
      click_par = int (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()
      Serial.println("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;
    }
  delay(5000);

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

Ramzesia

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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #78 on: November 30, 2019, 05:09:18 PM »
Вот теперь должен двигать, проверь:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;

 
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) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      Serial.println("Mouse_click");
      click_par = int (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()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }
  delay(5000);

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

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #79 on: November 30, 2019, 05:13:17 PM »
тоже самое не двигается

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #80 on: November 30, 2019, 05:16:47 PM »
Что там с типами переменных в мануале наверно напутано, пробую напрямую без переменных, должно двигать:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;

 
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) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      Serial.println("Mouse_click");
      click_par = int (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()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(100, 100, 0);
      break;
    }
  delay(5000);

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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #81 on: November 30, 2019, 05:20:20 PM »
Пример мануала:
Code: (clickermann) [Select]
// считываем величину перемещения по двум осям:
  int xReading = readAxis(0);
  int yReading = readAxis(1);
 
// перемещаем указатель мыши:
    Mouse.move(xReading, yReading, 0);
Типы параметров  - int

А в описании написано :

Синтаксис
Mouse.move(xVal, yVal, wheel)
Параметры
xVal: величина, на которую следует переместить указатель вдоль оси x - signed char

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #82 on: November 30, 2019, 05:21:16 PM »
не двигается по прежнему

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #83 on: November 30, 2019, 05:24:26 PM »
Лаааадно  :o

Code: (clickermann) [Select]
#include "Mouse.h"
 
void setup() {
  Mouse.begin();
}
 
void loop() {
Mouse.move(100, 100, 0);
delay(3000);
}

Не забываешь проверять-компилировать перед загрузкой?
« Last Edit: November 30, 2019, 05:27:20 PM by dramster »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #84 on: November 30, 2019, 05:30:47 PM »
Нет не забываю, не двигается

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #85 on: November 30, 2019, 05:38:44 PM »
Может она у тебя сламалась ?  ;D

Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
void setup() {
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
Mouse.move(100, 100, 0);
Keyboard.println("Hello!");
delay(3000);
}

проверим клавиатуру

Ramzesia

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

Ramzesia

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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #88 on: November 30, 2019, 05:56:37 PM »
и что теперь? возвращаемся назад?  ;D

Код ардуино, исправленный, должен работать:

Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;
 
 
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) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   switch (kmfunct) {
 
    case 1:  //  Mouse.click

      click_par = int (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()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);

      Mouse.move(x_cor, y_cor, 0);
      break;
    }
 
  val = 0; //в конце обнуляем нашу переменную
  }
}

Код кликермана для теста:

Code: (clickermann) [Select]
$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_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CYC
     
   END_CYC
END_SUB





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


Mouse_move(56,71) // координаты чуть что подправь, чтоб увидеть клики
waitms(100)
Mouse_click(1)
waitms(100)
Mouse_move(200,200)
waitms(100)
Mouse_click(2)
wait(5)


« Last Edit: November 30, 2019, 05:58:09 PM by dramster »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #89 on: November 30, 2019, 06:04:03 PM »
Ничего не происходит, но когда двигаю курсор начинает бешено много  открываться cmd окошко