マウスのダブルクリックが動くようにする
前の投稿で,マウスのダブルクリックができませんでしたが,このサイトで確認したところ,クリックも判定してもらえていないことが分かりました.
改めて,サンプルプログラムで確認しました.
Arduino IDEのメニューをたどると,サンプルプログラムとして[File]→[Examples]→[09.USB]→[Mouse]→[ButtonMouseControl]というのがあります.このサンプルでは,Mouse.press()とMouse.release()だけを使っており,Mouse.click()を使っていないのですが,このプログラムを用いると,このサイトのシングルクリックの判定とダブルクリックの判定がうまくいきました.また,ドラッグの動作もうまく行きました.
そこで,シンプルに,クリックとドラッグの判定をせずに,マウスボタンのdownとupそのものを送出するようにしました.
これが以下のプログラムです.
// move mouse cursor by joystick // implement left/right button // 2023/4/16 #include <Mouse.h> void setup() { Serial.begin(9600); // joystick gpio_init(27); gpio_set_dir(27, GPIO_IN); // GP27 in:0(false) out:1(true) gpio_init(28); gpio_set_dir(28, GPIO_IN); // GP28 in:0(false) out:1(true) // button gpio_init(16); // right button gpio_set_dir(16, GPIO_IN); gpio_pull_down(16); gpio_init(17); // left button gpio_set_dir(17, GPIO_IN); gpio_pull_down(17); Mouse.begin(); delay(5000); } #define MIN_RAW 3 #define MAX_RAW 1023 #define MIDDLE_RAW ((MAX_RAW - MIN_RAW)/2) #define MOUSE_DOWN 1 #define MOUSE_UP 0 void loop() { //---------------------------------------- // move uint16_t raw_x = analogRead(28); // 3..1023 int16_t value_x = (raw_x - MIDDLE_RAW)/10; // -50..51 uint16_t raw_y = analogRead(27); // 3..1023 int16_t value_y = (raw_y - MIDDLE_RAW)/10; // -50..51 float dx=0.0; float dy=0.0; if (value_x > 0) { dx = -((float)value_x * value_x / 200.0); } else { dx = ((float)value_x * value_x / 200.0); } if (value_y > 0) { dy = (float)value_y * value_y / 200.0; } else { dy = -(float)value_y * value_y / 200.0; } Mouse.move(dx, dy, 0); //---------------------------------------- // click/drag bool left_button_val = gpio_get(17); bool right_button_val = gpio_get(16); // left button down if (left_button_val == MOUSE_DOWN) { // if the mouse is not pressed, press it: if (!Mouse.isPressed(MOUSE_LEFT)) { Mouse.press(MOUSE_LEFT); } } else { // if the mouse is pressed, release it: if (Mouse.isPressed(MOUSE_LEFT)) { Mouse.release(MOUSE_LEFT); } } // right button down if (right_button_val == MOUSE_DOWN) { // if the mouse is not pressed, press it: if (!Mouse.isPressed(MOUSE_RIGHT)) { Mouse.press(MOUSE_RIGHT); } } else { // if the mouse is pressed, release it: if (Mouse.isPressed(MOUSE_RIGHT)) { Mouse.release(MOUSE_RIGHT); } } delay(10); }
これでめでたく,USBマウスとして使用することができるようになりました.
0 件のコメント:
コメントを投稿