3Dマウス④ ジョイスティックの制御
2023.01.20
前回の3Dマウスの記事はこちら
https://randol-news.net/art/00576.html


前回は配線のミスが無いこと、ソースの書き換えが正常に行えたこと、
キーボードとマウスの制御が問題なくできることを確認しました。
今回はある程度3Dマウスに近い動作ができるまで
実験を進めていきたいと思います。

if (Joy_Switch_POS == LOW) {
  Keyboard.press(KEY_LEFT_SHIFT);
  Mouse.press(MOUSE_MIDDLE);
  delay(2);
  Mouse.move(1,1,0);

  Keyboard.releaseAll();
  Mouse.release(MOUSE_MIDDLE);
  delay(2);
  Mouse.move(-1,-1 ,0);
}else{
  Keyboard.releaseAll();
  Mouse.release(MOUSE_MIDDLE);
}
delay(10);

この処理が怪しい(;´Д`)
マウスカーソルの移動が10pxならうまく処理されるが、
1pxにすると、まったく動かなくなる。
なぜだ(;´Д`)
マウスカーソルをもとの位置に戻さなければ1pxでも正常に動く。
なぜだ(;´Д`)
解せぬ・・

厳密には6pxでも動くが、マウスホイールが動いたと錯覚したのか、
拡大縮小現象もおきる(笑)
安定して動くのが10px
意味不明。

拡大縮小が突然おきる原因は時間がかかったけど判明(;´Д`)
犯人はマウスのホイールボタンのダブルクリックに
「モデルを画面に合わせる」が組み込まれているため、
これが反応している模様。こんなん使ったことない。初めて知ったわ(;´Д`)
隠れたショートカットがまだまだあるんだなーと。
6px未満はドライバーによってダブルクリック認定されるかされないか
際どいラインなんだと思う。
これはPCの性能とマウスドライバーの良しあしでだいぶバラツキが出そうだ。
やばい、詰んだか?(;´Д`)

10pxを最小として組んでいけば?となるが
でもこれだと最小なのに目で追えないほど回転速度が速くて実用的じゃない。
じゃdelayを変化させて速度をコントロールするか?
そうなるとなめらかさを失うしな・・・ 困った。
しかもX、Yの両方向を同時に動かすのにdelayだけで管理するのは無理がある。
ORBIONがなぜマウスカーソルの動きに補正を入れないのか疑問だったが、
ようやく理解した(;´Д`)

3日間悩みに悩んだが、1pxレベルのオービットは必要。これは避けられないと思った。
7pxや10px刻みだと、複雑なものを作っているときに、
狙った角度を正面にできないことが多いからだ。
そこでどのように解決するかというと、1px~7pxまでの動きはカーソルが動くのを許容した。
8~10pxの場合は移動量が多すぎてすぐ画面端に激突したり、
FUSION360のウインドウからはみ出たりするので
元の座標にとどまるように位置修正を施す。
これでお茶を濁す。



ジョイスティックと移動量の関係は計算式ではなく、
表管理することにした。
思いついた当初は、配列で管理するつもりだったけど、
微調整するとき見づらく面倒だったので、
とりあえずIF文の羅列で実験してみたが、処理落ちもしないし、
可読性も高いしこのままでいいかもしれない(;´Д`)



マウスの中央ボタンがダブルクリックになってしまう問題。
これを解決するために、「カーソルは移動させるがボタンは押さない」
という処理を中間に挟んで回避する策を採用。
マウスはクリックとクリックの間に大きいカーソル移動があれば
いくら連射速度が速くともダブルクリックにならないという性質を利用してます。



動作を動画にとって見ました。
なめらかさと速度のバランスを取るのに苦労したけど
これからループ内に他の処理が加わっていくので動きは若干速めに調整。
まぁいいところに落ち着いたんではないかと思う。
ジョイスティックの傾斜が緩いときはカーソルも動き、
急なときはカーソルは止める。割と違和感ない。
回転を遅くしたい時というのはは微調整の為がほとんどなので、
よほど狭いモニターを使っていない限り端に激突することは珍しい。
問題点があるとすれば高速回転をさせたとき、
マウスカーソルがチカチカするくらいか。
高速で行ったり来たりしてるからね、仕方ないね。
ま、これは妥協(;´Д`)


ロータリーエンコーダーは特に工夫もなく、
前回コーディングしたものを入れ込むだけで動いた。
拡大縮小とオービットが実装されたことで、
だいぶ3Dマウスっぽくなってきた。

ファームウェアで残す部分は
パン操作と、ボタンを追加した時の処理、
あとFusion360に合わせて作っているけど、
2,3種は別ソフトでも動くようにしておきたいな。
とは言っても液晶を付けてないので、ソースファイル内で選択させる形だけど。

次は外装のデザインを進めるかな。

次の3Dマウスの記事はこちら
https://randol-news.net/art/00581.html
トラックバックURL
トラックバック一覧

- CafeNote -