概要
Arduino DueでMouse.hを使う場合の情報が少ないので投稿します.
接続
名称 | 機能 | 場所 |
---|---|---|
Program Port | プログラム書き込み | DCジャックに近いほう |
Native Port | Mouse click等の書き込んだUSB機能が実行される方 | DCジャックから遠いほう |
注意
Native Portは自動的にUSB機能が始まるので,ずっとクリックするようなプログラムを書いてあると,つないでいる間ずっとクリックし続けてPCの操作ができなくなり,クッキークリッカーがはかどります.
”No Device Found com X” はボードのERASEボタンを3秒ほど長押ししてください.
プログラム:ずっとクリックし続ける
# include <Mouse.h>
volatile boolean flag = true;
void setup() {
pinMode(2, INPUT);
Mouse.begin();
}
void loop() {
Mouse.click();
}
450click/minでした.
スイッチを押したらクリック
pin5にスイッチをつける
# include <Mouse.h>
volatile int flag = 0;
void setup() {
pinMode(5, INPUT);
Mouse.begin();
Serial.begin(250000);
Serial.println("hello");
}
void loop() {
int data = digitalRead(5);
if (data == LOW ){
if(flag == 0){
Mouse.click();
flag = 1;
Serial.println(flag);
Serial.println("hello");
}
}
if (data == HIGH){
flag = 0;
}
}
digitalRead(2)だとなぜか,HIGH,LOWが交互に反転してうまく動かないので注意です.
pullupとか入れたらいいかもしれません.私は,ハード的に入れました.
マウス移動
Mouse.move(x,y,wheel);
相対移動.
PCでは左上原点で右x,下yです.
私のスマホは720*1520画素で,原点は右下で左x,上yでした
スマホのUSBマウスとして動作させる,x方向の移動では
move(700)-> 5mm
move(10)->0.5mm
move(5000)->9mm
move(30000)->4mm
move(10000)->1mm
move(8000)->5mm
move(4000)->8mm
規則性は不明です.8mmずつしか移動できないっぽいので,8mmずつで少しずつ動かすしかなさそうです.
同様のことをy方向で行うとyは9mmずつっぽいです.
追記:引数はsigned charっぽいです.つまり,-128~127までしか受け付けないっぽい
# include <Mouse.h>
volatile int flag = 0;
void setup() {
pinMode(5, INPUT);
Mouse.begin();
Serial.begin(250000);
Serial.println("hello");
}
void loop() {
int data = digitalRead(5);
if (data == LOW ){
if(flag == 0){
Mouse.move(100,100,0);
flag = 1;
Serial.println(flag);
Serial.println("hello");
}
}
if (data == HIGH){
flag = 0;
}
}
ドラック
デスクトップ上で実行すると
こんな感じで範囲選択できます.
左ボタンを押すという関数
Mouse.press();
でできます.moveで移動後
Mouse.release();
でボタンを離します.
# include <Mouse.h>
volatile int flag = 0;
void setup() {
pinMode(5, INPUT);
Mouse.begin();
Serial.begin(250000);
Serial.println("hello");
}
void loop() {
int data = digitalRead(5);
if (data == LOW ){
if(flag == 0){
Mouse.press();
Mouse.move(100,500,0);
delay(1000);
Mouse.release();
flag = 1;
Serial.println(flag);
Serial.println("hello");
}
}
if (data == HIGH){
flag = 0;
}
}
追記:move
moveはsigned charのみ受け付ける
関数を作った
# include <Mouse.h>
volatile int flag = 0;
void setup() {
pinMode(5, INPUT);
Mouse.begin();
Serial.begin(250000);
Serial.println("hello");
}
void loop() {
int data = digitalRead(5);
if (data == LOW ) {
if (flag == 0) {
move_mm(50,50);
flag = 1;
Serial.println("end");
Serial.println("numnnnn");
}
}
if (data == HIGH) {
flag = 0;
}
}
void home_UL() {//左上移動
move(-1000, -1000);
}
void home_DL() {//左下移動
move(-1000, 1000);
}
volatile int delay_time = 10;
void move(int x, int y) {
if (x >= 0) {
int x_num = floor(x / 127);
Serial.println(x_num);
Serial.println("move");
signed char x_lef = x - x_num * 127;
for (int i = 0; i < x_num; i++) {
Mouse.move(127, 0, 0);
delay(delay_time);
}
Mouse.move(x_lef, 0, 0);
delay(delay_time);
} else {
x = x * -1;
int x_num = floor(x / 127);
signed char x_lef = (x - x_num * 127) * -1;
for (int i = 0; i < x_num; i++) {
Mouse.move(-127, 0, 0);
delay(delay_time);
}
Mouse.move(x_lef, 0, 0);
delay(delay_time);
}
if (y >= 0) {
int y_num = floor(y / 127);
signed char y_lef = y - y_num * 127;
for (int i = 0; i < y_num; i++) {
Mouse.move(0, 127, 0);
delay(delay_time);
}
Mouse.move(0, y_lef, 0);
delay(delay_time);
} else {
y = y * -1;
int y_num = floor(y / 127);
signed char y_lef = (y - y_num * 127) * -1;
for (int i = 0; i < y_num; i++) {
Mouse.move(0 , -127, 0);
delay(delay_time);
}
Mouse.move(0, y_lef, 0);
delay(delay_time);
}
}
void move_mm(int x, int y) {
/*
* 右下原点にしたい
* x:そのまま
* y:-y_mm で反転する.
*
*
*/
home_DL();
int x_num = x*4.35;
int y_num = y*-4.35;
Serial.println(y_num);
move(x_num,y_num);
}