2021年06月01日

電車でGO!コントローラでTSマスコンをエミュレートしてBVEで遊ぶ。

dengo_ts_emu_c.jpg

Bve trainsim というPCで遊べる電車でGO的な鉄道運転シミュレーターがあるのですが、キーボード操作では風情がありませんよね。
ということで、プレイステーション版 電車でGOのコントローラを入手 ※ し、BVEで使ってみることにしました。
※ 勢い余って ワンハンドルタイプ(TCPP-20001)とツーハンドルタイプ(SLPH-00051)の両方をセットで購入。

BVEでマスコン型コントローラーを使う方法は、電車でGOのコントローラに古いタイプのPS2-USBアダプタ組み合わせる方法の他に、Master Controller For Train Simulator(通称TSマスコン)を使う方法もあります。
TSマスコンのインターフェースDLLのソースコードは開発元より公開されていて、動作に必要なコマンドはすべて記載されています。

入力デバイスプラグイン サンプルプログラム

解説記事(ぴよ軒ノート)

ということで、将来的に鉄道模型でも使えるように、電GOコントローラーの信号をArduinoで読み取り、TSマスコンの動作をエミュレートする手法を取ることにしました。

電GOコントローラーをArduinoで読み取るサンプルは、KeKe115さんが github で公開されています
中を見ると、ハンドルの位置は、ボタンの組み合わせで定義されているようです。
このソースをちょちょいと改造して、ハンドルポジションに応じたTSマスコンのコマンドを出すようにしたところ、あっさりとツーハンドルタイプでBVEを遊べるようになりました。
が、ワンハンドルタイプはなぜか動作しません。トライ・アンド・エラーでいろいろ調べたところ、どうやらワンハンドルマスコンはポーリング間隔が約65msを超えるとハンドル位置を取得できないことが判明。(流用元は100ms)
これを修正して無事にワンハンドルでも動くようになりました。
ボタンの状態を取得する処理をいれたついでに全面的に処理を見直したので、見た目はオリジナルからだいぶ離れていますが、概ね同じ処理をしています。
レバーサはセレクトボタン押下で「中立→前進→中立→後退」と遷移するようにしてあります。

github に公開していますのでMITライセンスの元、ご自由にどうぞ。
posted by MON at 00:00| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする
【今是昨非】http://nomulabo.com/