前回、Arduino Leonardo pro micro を使って、本物のファミコンのコントローラーを、USB接続のゲームパッドに改造しました。どちらのコントローラも名前が「Arduino Leonardo」だったので、今回はデバイス名を変更してIコンとIIコンを区別できるようにします。
過去記事
IコンとIIコンとの2つを作ったのですが、どちらもデバイス名が「Arduino Leonardo」となっていて、エミュレータでコントローラの設定をするときに、どちらのコントローラがIコンなのか、IIこんなのか混乱して設定に苦労しました。
これは、Arduinoがスケッチを書き込むときに、ボードの名前をUSBのデバイス名に設定しているためです。2つとも同じLeonardoというマイコンボードなので、どちらも同じ名前になってしまいます。
そこで、マイコンボードに書き込まれるUSBのデバイス名を、強制的に変更して、どちらのコントローラーなのかを分かりやすくしてみました。
Aruduinoのプログラムの改造
USBのデバイス名を変更するために、Arduinoのプログラムの中の、USBCore.cppというソースコードを書き換えます。
macの場合は
[arduino.app]->[Contents]->[Java]->[hardware]->[arduino]->[avr]->[cores]->[arduino]の中に、[USBCore.cpp]というファイルが入っています。
テキストエディタでソースコードを開くと、40行目あたりにUSB_PRIDUCTという項目の行が見つかります。
#ifndef USB_PRODUCT
// If no product is provided, use USB IO Board
#define USB_PRODUCT "USB IO Board"
#endif
この後の行に、
#define USB_PRODUCT "FC pad I"
を付け加えます。これは、「デバイスの名前を"FC pad I"という名前にします(強制的に上書き)よ」という設定です。
↓のようになります。
Arduinoのプログラムの改造はこれだけです。USBCore.cppを上書き保存します。
この状態で、過去記事のジョイスティックのスケッチをコンパイルして、マイコンボードにスケッチを書き込みます。こうすることで、書き込んがマイコンボードの名前が"Arduino Leonardo"から"FC pad I"に変更されます。
IIコンの場合は、
#define USB_PRODUCT "FC pad II"
にして、コンパイルして書き込みます。これで、IIコンの名前は"Arduino Leonardo"から"FC pad II"に変更されました。
マイコンにスケッチの書き込みが終わったら、先ほど追加した行は削除か、コメントアウトしておいてください。
//#define USB_PRODUCT "FC pad II"
そうしないと、次回Leonardoのマイコンボードにプログラムを書き込んだ時に、名前が元々のLeonardoでなくなってしまいます。
結果
2つのコントローラをUSBでパソコンに接続します。ファミコンエミュレータのOpenEmuで、コントローラの設定を開くと、無事「FC pad I」と「FC pad II」が現れました。
これで、どちらのコントローラがIコンで、どちらがIIコンか迷うことなく設定でができるようになりました。
Arduinoのプログラムのソースコードを修正して、USBのデバイス名を変更する改造でした。この方法ならば、ゲームコントローラだけでなく、独自のUSB機器を作った時にも、オリジナルのデバイス名に変更できますね。
コメント