Вот пример левого и правого клика мышки, и нажатие и и отпускание кнопки W. Код ардуино:
.......
Это был лишь пример сопряжения ардуины с кликерманом. Для мелких нужд вполне хватает. Я использовал ардуино про микро единожды (дня4-5) для прокачки одной профессии в мта-са - мультиплеер гта-санандреас, там какуюто защиту влупили, ни клавиатура ни мышь не работают через кликерманн без пс\2. Код состряпал на скорую руку, он отработал, и я про него забыл.
Я тут сегодня немного подумал как сделать и компактно и функционально, чтобы можно было через кликер использовать все функции MouseKeyboard и максимально компактно и интуитивно это писалось.
Суть в том, что в микруху мы отсылаем строку и делаем из нее число. Я решил что 4 байта вполне хватит для всего функционала "unsigned long". Далее берем 4 последних бита (хотя хватило бы и три) - это номер нашей функции (16 значений). Нам то нужно всего то - Mouse.click(), Mouse.move(), Mouse.press(), Mouse.release(), Keyboard.press(), Keyboard.release(), Keyboard.releaseAll(), Keyboard.write(). Остальные 28 бит используем для параметров.
Для начала принимаем это число тем же старым способом, код ардуино:
////////////////////////////////////////////////////////////////////////
//ожидание команды от кликермана в виде строоки
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
////////////////////////////////////////////////////////////////////////
В кликермане так и пишем подпрограммы как они и есть, чтобы не путаться с мануалами:
Начну с первой функции Mouse.click():
SUB(Mouse_click, $button) // button = 1 это левая кнопка, 2 - правая, 3 - средняя
action(268435456 + $button) //в ардуино выйдет первая функция и нужный из трех параметров
END_SUB
//пример вызов лклик
Mouse_click(1)
Подпрограмма "action" остается старой.
В ардуино код на этот параметр выполнит так:
//ожидаем, пока переменная 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;
}
}
//...................
Далее читаю насчет Mouse.move() , а тут засада, не сосем понятны параметры, и они ограничены величиной signed char
.
СинтаксисMouse.move(xVal, yVal, wheel)
ПараметрыxVal: величина, на которую следует переместить указатель вдоль оси x - signed char
yVal: величина, на которую следует переместить указатель вдоль оси y - signed char
wheel: величина смещения колеса прокрутки - signed char
Если я правильно понял, то курсор может за один раз сместиться максимум на 127 пикселей, а параметр wheel крутит колесо. Както отстойно получается. ...или может wheel это шаг хода курсора
А возможно мануал врет? и можно перемещать курсор на большие расстояния?
Вобщем на этом я пока остановился, так как неначем тестить, нету платы, если интерес не пропадет, закажу на днях.