ジョイスティックマウスを作りたい

スポンサーリンク
スポンサーリンク

ジョイスティックマウス

Arduinoとジョイスティックで、マウスが作れるらしいので作ってみる。スケッチ例だけだと自分の環境では動かなかったので、一個ずつやってみる。

スポンサーリンク

お買い物

ドキュメント移動

センタープッシュが付いてるやつにした。

スポンサーリンク

接続

つないだ。

スポンサーリンク

とりあえずanalogRead()で取得

int axisX = 0;
int axisY = 0;

void setup() {
  pinMode(18,INPUT);
  pinMode(19,INPUT);

  Serial.begin(9600);
}

void loop() {
  axisX = analogRead(18);
  axisY = analogRead(19);
  Serial.print("X: ");
  Serial.print(axisX);
  Serial.print("   Y: ");
  Serial.print(axisY);
  Serial.println();
}

analogRead()は基準電圧間を10bit(0-1023)のデジタルデータに変換してくれる。静止状態だと、中央値の511-512になるはずなので、この結果はちょっとずれてる。キャリブレーションが必要だけど、まぁ無視する。

スポンサーリンク

Mouse.hを使ってみる

#include <Mouse.h>

boolean finished = false;

void setup() {
  Mouse.begin();

}

void loop() {
  if (!finished) {
    for (int i = 1 ; i <= 10; i++) {
      Mouse.move(-10, 10, 0);
      delay(1000);
      finished = true;
    }
  }
}

止まらなくなるのが怖いので、一旦何回かやったら止まるようにする。Mouse.move()の意味がよく分かってなかったのだけど、現在の位置から、引数の分だけマウスが飛ぶ感じの動きみたい。引数を大きくすれば飛ぶ量が大きくなる。スイーっと動くんじゃなくて、飛ぶ。

スポンサーリンク

2つを合わせてみる

#include <Mouse.h>

boolean finished = false;
int axisX = 0;
int axisY = 0;
signed char X;
signed char Y;

void setup() {
  pinMode(18, INPUT);
  pinMode(19, INPUT);

  Mouse.begin();
}

void loop() {

  if (!finished) {
    for (int i = 1 ; i <= 10000; i++) {
      axisX = analogRead(18);
      axisY = analogRead(19);
      X = map(axisX, 0, 1023, -3, 3);
      Y = map(axisY, 0, 1023, -3, 3);

      Mouse.move(X, Y, 0);
      delay(2);
      finished = true;
    }
  }
}

取りあえず動くものを書いてみた。これだけでも既にカーソルが動いてくれる。すげーな。ただ静止状態でもカーソルが動いてしまうし、動きはカクカクしていてなめらか~な感じじゃない。XY軸沿いの動きはするんだけど、斜めになるととたんに反応が悪くなる。なんだろなー。

map()

https://www.arduino.cc/reference/en/language/functions/math/map/
ある範囲における数値を別な範囲における数値に変換する - Qiita
以上 以下の範囲に存在する数値 を、0 以上 1 以下の範囲に存在する数値 に変換する、つまり正規化するためには\b…

これ便利ね。

スポンサーリンク

参考

https://www.arduino.cc/reference/en/language/functions/usb/mouse/

コメント

タイトルとURLをコピーしました