Switch版電車でGOコントローラをArduino Unoにつなぐ [電子工作]
電機屋の毎日のブログでDSair2 電車でGO!!マスコンへの対応で公開されていますが、当方では、ArduinoのUSBホストシールドを使ってデータ拾ってみました。参考までにみてください。
USBホストのシールドはアマゾンで買いました。 USBホストシールド 2.0 for Arduino (compatible with Google Android ADK)
このUSB用のチップMAX3421も品薄なんですよね・・・
いろんなサイトにいろんなこと書いてあるけどUnoで使うなら、特に基板に何もしなくてもそのままで使えます。
WindowsPCのUSB端子に差すと
VID 0x0F0D, PID 0x00C1, Pname Microsoft PC ジョイスティック ドライバー
NumAxes 4, MaxAxes 6, NumButtons 14, MaxButtons 32, Caps HASZ HASR HASPOV POV4DIR, PeriodMin 10, PeriodMax 1000
Xmin 0, Xmax 65535, Ymin 0, Ymax 65535, Zmin 0, Zmax 65535, Rmin 0, Rmax 65535, Umin 0, Umax 65535, Vmin 0, Vmax 65535
RegKey DINPUT.DLL
OEMVxD
と認識しているようにでベンダ(0x0F0D)はZUKIでなくHORIみたいです。(よくわからんけど)
最初、Switchのジョイコンでとれるかなと思ったのですが、VID,PID変えてもジョイコンでは認識していなくて(めんどくさそうなので)、スケッチのサンプルをジョイスティックにしたら読めました。特に面倒なことしていなさそうなので汎用のジョイステックで問題ないと思います。
ArduinoのライブラリーはUSB_Host_Shield_2.0
このライブラリのexamples\HIDの中にあるUSBHIDJoystickのスケッチで見れます。
何もせずにUnoへスケッチを書き込み、マスコンをUSBシールドのUSB端子に差すと
シリアルモニタに結果が返ってきます。
あまり、小難しくないので、いろんなものに応用できると思います。
一応シリアルモニタにかえって来た値をメモしておきます。
マスコン(Rzの値が変化します)
EB X1: 40 Y1: 00 X2: 0F Y2: 80 Rz: 00
B8 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 05
B7 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 13
B6 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 20
B5 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 2E
B4 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 3C
B3 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 49
B2 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 57
B1 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 65
N X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 80
P1 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 9F
P2 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: B7
P3 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: CE
P4 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: E6
P5 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: FF
ボタン(押している間だけ値が設定される。 離すともとに戻る)
A X1: 04 →00
B X1: 02 →00
X X1: 08 →00
Y X1: 01 →00
→ X2: 02 →0F
↑ X2: 00 →0F
← X2: 06 →0F
↓ X2: 04 →0F
● Y1: 20 →00
Home Y1: 10 →00
R X1: 20 →00
+ Y1: 02 →00
- Y1: 01 →00
L X1: 10 →00
ZR X1: 80 →00
ZL X1: 40 →00
USBホストのシールドはアマゾンで買いました。 USBホストシールド 2.0 for Arduino (compatible with Google Android ADK)
このUSB用のチップMAX3421も品薄なんですよね・・・
いろんなサイトにいろんなこと書いてあるけどUnoで使うなら、特に基板に何もしなくてもそのままで使えます。
WindowsPCのUSB端子に差すと
VID 0x0F0D, PID 0x00C1, Pname Microsoft PC ジョイスティック ドライバー
NumAxes 4, MaxAxes 6, NumButtons 14, MaxButtons 32, Caps HASZ HASR HASPOV POV4DIR, PeriodMin 10, PeriodMax 1000
Xmin 0, Xmax 65535, Ymin 0, Ymax 65535, Zmin 0, Zmax 65535, Rmin 0, Rmax 65535, Umin 0, Umax 65535, Vmin 0, Vmax 65535
RegKey DINPUT.DLL
OEMVxD
と認識しているようにでベンダ(0x0F0D)はZUKIでなくHORIみたいです。(よくわからんけど)
最初、Switchのジョイコンでとれるかなと思ったのですが、VID,PID変えてもジョイコンでは認識していなくて(めんどくさそうなので)、スケッチのサンプルをジョイスティックにしたら読めました。特に面倒なことしていなさそうなので汎用のジョイステックで問題ないと思います。
ArduinoのライブラリーはUSB_Host_Shield_2.0
このライブラリのexamples\HIDの中にあるUSBHIDJoystickのスケッチで見れます。
何もせずにUnoへスケッチを書き込み、マスコンをUSBシールドのUSB端子に差すと
シリアルモニタに結果が返ってきます。
あまり、小難しくないので、いろんなものに応用できると思います。
一応シリアルモニタにかえって来た値をメモしておきます。
マスコン(Rzの値が変化します)
EB X1: 40 Y1: 00 X2: 0F Y2: 80 Rz: 00
B8 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 05
B7 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 13
B6 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 20
B5 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 2E
B4 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 3C
B3 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 49
B2 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 57
B1 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 65
N X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 80
P1 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: 9F
P2 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: B7
P3 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: CE
P4 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: E6
P5 X1: 00 Y1: 00 X2: 0F Y2: 80 Rz: FF
ボタン(押している間だけ値が設定される。 離すともとに戻る)
A X1: 04 →00
B X1: 02 →00
X X1: 08 →00
Y X1: 01 →00
→ X2: 02 →0F
↑ X2: 00 →0F
← X2: 06 →0F
↓ X2: 04 →0F
● Y1: 20 →00
Home Y1: 10 →00
R X1: 20 →00
+ Y1: 02 →00
- Y1: 01 →00
L X1: 10 →00
ZR X1: 80 →00
ZL X1: 40 →00
このUSBホストシールドとDesktopStationさんのDSシールドをUNOに2段重ねてスケッチ書くと単体でDCCコントローラーになるのでしょうか?それともピン設定が重複するので、無理でしょうか?
by ゆうえん・こうじ (2021-08-15 12:58)
すみません
コメントいただいていることに気づきませんでした。
DesktopStationさんのDSシールドとUSBホストシールドはピンが競合するのでそのまま重ねられません。
なので将来的にはUSBマスコン基板とI2Cで接続してコントローラにできないか検討しています。
by ラスカル (2021-10-26 22:06)