Ездил на радиорынок за ардуинкой. Из выбора были Микро и Нано. Микра 500 р. Нана - 400. Микро, вся, с обеих сторон - колючая каракатица. Нано чистая, тонкая, без лишнх напаек, они в пакетике россыпью, как раз бы удобно в корпус от флешки но как написано тут - бесполезна. Спросил на всякий случай, какие, новые без скетчей, в диспетчере устройств видятся как клавиатура с мышью, и по глазам понял что лучше бы не спрашивал))) Поборовшись с жабой, решил взять обе, вдруг и вторая куда нибудь сгодится.
Дома оказалось, что под Микру, древнего кабеля с мини ЮСБи нет. У Наны разьем более свежий - Микро-ЮСБ, шнур нашелся и фигась себе - Нана оказалась Леонардой, подвезло)))
Вопрос такой - Arduino_mouse_keyboard.cms неплохо работает, хоть и тормозит немного, но почему при вытащенной ардуинке ничего обратно в скрипт не возвращает а висит и ждет когда рак свистнет? Очень не удобно.
Хотелось сделать чтобы при вытаскивании шнура, скрипт не прерывался а переходил на обычную работу и благополучно завершался.
#include "Arduino_mouse_keyboard.cms"
// подпрограмма обязательно выше вызова
SUB(mouse, $IN_X, $IN_Y, $mouse, $Razb_X, $Razb_Y)
IF(($mouse = 11) or ($mouse = 12))
$MOVE_END_X=$IN_X + rnd(rnd(-1*$Razb_Y, 0),rnd(0, $Razb_Y))
$MOVE_END_Y=$IN_Y + rnd(rnd(-1*$Razb_Y, 0),rnd(0, $Razb_Y))
ELSE
$MOVE_END_X=$IN_X + rnd(rnd(-1*$Razb_X, 0),rnd(0, $Razb_X))
$MOVE_END_Y=$IN_Y + rnd(rnd(-1*$Razb_Y, 0),rnd(0, $Razb_Y))
END_IF
//-------------------------------------------------------
$MOVE_SPEED = 1 // множитель скорости
$MOVE_Start_X = $_xmouse // Считать текущую X
$MOVE_Start_Y = $_ymouse // Считать текущую Y
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
// Расстояние между начальной и конечной точками:
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR = 1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
// Промежуточная точка с рандомом:
$MOVE_X_ = ROUND($MOVE_X,0)+RND(-5,5)
$MOVE_Y_ = ROUND($MOVE_Y,0)+RND(-5,5)
micro_move($MOVE_X_, $MOVE_Y_)
IF($_return1 != 5) // Если Ардуино выключено то:
MOVE($MOVE_X_, $MOVE_Y_)
END_IF
WAITMS(1)
END_CYC
// Конечная точка:
micro_move($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5) // Если Ардуино выключено то:
move($MOVE_END_X, $MOVE_END_Y)
END_IF
//-------------------------------------------------------
SWITCH($mouse)
CASE(0)
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(1)
micro_lclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
print("- Без Ардуино -")
LCLICK($MOVE_END_X, $MOVE_END_Y) // Левый клик
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(2)
micro_rclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
RCLICK($MOVE_END_X, $MOVE_END_Y) // Правый клик
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(3)
micro_mclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
MCLICK($MOVE_END_X, $MOVE_END_Y) // Средний клик
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(4)
micro_dblclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
DBLCLICK($MOVE_END_X, $MOVE_END_Y) // Двойной левый
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(5)
micro_ldown($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
LDOWN($MOVE_END_X, $MOVE_END_Y) // Зажать левую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(6)
micro_lup($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
LUP($MOVE_END_X, $MOVE_END_Y) // Отпустить левую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(7)
micro_rdown($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
RDOWN($MOVE_END_X, $MOVE_END_Y) // Зажать правую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(8)
micro_rup($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
RUP($MOVE_END_X, $MOVE_END_Y) // Отпустить правую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(9)
micro_mdown($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
MDOWN($MOVE_END_X, $MOVE_END_Y) // Зажать среднюю
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(10)
micro_mup($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
END_IF
MUP($MOVE_END_X, $MOVE_END_Y) // Отпустить среднюю
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))
CASE(11)
micro_wheeldown($Razb_X)
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
IF($_return1 != 5)
FOR($i=0, $i < $Razb_X)
WHEELDOWN // Колесико вниз
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
END_CYC
END_IF
CASE(12)
micro_wheelup($Razb_X)
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
IF($_return1 != 5)
FOR($i=0, $i < $Razb_X)
WHEELUP // Колесико вверх
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
END_CYC
END_IF
END_SWITCH
$mouse=0
$Razb_X=0
$Razb_Y=0
END_SUB
//-------------------------------------------------------
// SUB(mouse, $IN_X, $IN_Y, $mouse, $Razb_X, $Razb_Y)
// 1: $IN_X - координата х
// 2: $IN_Y - координата Y
// 3: $mouse - действия мыши в конечной точке
// $mouse = 0 нет действия
// $mouse = 1 LCLICK (Левый клик)
// $mouse = 2 RCLICK (Правый клик)
// $mouse = 3 MCLICK (Средний клик)
// $mouse = 4 DBLCLICK (Двойной левый клик)
// $mouse = 5 LDOWN (Зажать левую)
// $mouse = 6 LUP (Отпустить левую)
// $mouse = 7 RDOWN (Зажать правую)
// $mouse = 8 RUP (Отпустить правую)
// $mouse = 9 MDOWN (Зажать среднюю)
// $mouse = 10 MUP (Отпустить среднюю)
// $mouse = 11 WHEELDOWN (Колесико вниз)
// $mouse = 12 WHEELUP (Колесико вверх)
// Функции при $mouse от 1 до 10
// 4: $Razb_X - разброс х
// 5: $Razb_Y - разброс Y
// Функции при $mouse = 11 или 12
// 4: $Razb_X - число строк колесиком
// 5: $Razb_Y - разброс х и разброс Y
//------------------ ТЭСТ --------------------
// Рисуем в Паинте
//GOTO(mous) // Пропускаем зачистку холста
// Очищаем холст
mouse(140,110,1,8,8) // кликаем на выделение
mouse(10,200,5,0,0) // Верхний угол рамки выделения
mouse(1000,970,6,0,0) // Нижний угол рамки выделения
mouse(500,250,2,0,0) // Открываем меню
WAITMS(100)
mouse(560,267,1,0,0) // стираем старое
WAITMS(100)
mous:
mouse(290,96,1,5,5) // включаем карандаш
FOR($i=0, $i < 5) // Рисуем 5 раз
// рисуем треугольник
mouse(100,300,5,5,8) // точка 1 c зажимом
mouse(920,300,0,5,8) // точка 2
mouse(510,900,0,100,5) // точка 3
WAITMS(100)
mouse(100,300,6,5,8) // точка 1 c отпуском
// рисуем прямоугольник
mouse(300,350,5,5,8) // точка 4 c зажимом
mouse(720,350,0,5,8) // точка 5
mouse(720,530,0,5,8) // точка 6
mouse(300,530,0,5,8) // точка 7
mouse(300,350,6,5,8) // точка 4 c отпуском
WAIT(1)
END_CYC
HALT