SSブログ

DCC/MM2基板を電車でGo!コントローラーで操作 3 [ジョイスティック]

 自分の書いたプログラムを1週間程度で見返してみても、なんか忘れていることが多いので、説明を書いておく。
 説明は、今回のこれについて。

いじってるのはForm1.csだけ。
<変数の宣言>
・struct_locoは電車の速度、加速度、方向、番号、速度上限(500以上では速度が上がらなかったりするので)を保存する構造体。
struct_go_controlerは電車でGo!コントローラー用の構造体だったが、Dualshockでも使用。マスコン、ブレーキ、方向、各コントロール位置での加速度定数を保存する構造体。
クラスでは、
struct_locoを二つ(2列車)、struct_go_controlerを二つ(2P)、Device(DirectInputジョイスティック)を二つ宣言している。

<動作>
タイマー動作により動く。
・Timer1はジョイスティックの状態を掴む→マスコンの状態に変換→電車の速度、方向を計算する。一応の50msごと。
・Timer2は電車の速度、方向に変更があったらDCC/MM2基板に送る。一応の割り込みは300msごとで1P,2P交互。
(なので、どっちも操作していると600msごとにしか通信していなかったりする)

<関数>
・Form1()
Form1のイニシャライズ。
電車の初期値を入れている。(loco[0],loco[1])
また、適当にコントローラーの初期設定と加速度定数を作っている(go_cont[0],go_cont[1])
ブレーキ解除時もなんとなくスピードが落ちるようにしているのもここ。
・joystick_state
Timer1から呼ばれる関数で、
(1)ジョイスティックの状態を読んで、それを16ビットの値に変換後、マスコンの状態、ブレーキの状態、方向の状態に変換する。
(2)現在のマスコン、ブレーキの加速度から速度を計算する。方向が変わっていたら速度を0にする。
・timer1_Tick
Joystick1,2について、joystick_state関数を呼んで、速度、方向に変換しておく。
・button2_Click
引っ張ってきたサンプルの残骸。特に使っていない。
・ timer2_Tick
loco[0],loco[1]の速度、方向に変更があったら、DCC/MM2基板に送信する。P1,P2で交互に行う。
・Form1_FormClosing
Form1で×ボタンが押され、閉じられるときに、DCC/MM2基板に"setPower(0)"を送信し、電源を切る。
・serialPort1_DataReceived
シリアルポートの受信割り込み関数
・RcvDataToTextBox
serialPort1_DataReceivedから直接テキストボックスに書くと、マルチスレッド的にだめらしいので、この関数があるようだ。
・button1_Click
"Open"ボタンを呼ばれたときの関数で、
joystickを二つ見つけて、DCC/MM2基板のシリアルポートを開き、"SetPing()"している。
・ button1_Click_1
”Power On"ボタンが呼ばれたときで、DCC/MM2基板に"setPower(1)"を送信して、電源Onしているだけ。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0