ブログパーツUL5

PS2ワイヤレスコントローラ対応の試作(4)

 MR-C3024からVS-C1に送信するコマンドキャラクタは次の一覧表のようになっています。海外のHiTEC社のワイヤレスコントローラに準拠していますが、コマンドキャラクターは主に大文字にしており、小文字はサブセット的にしています。また、アナログ値はすべてRZ-1用に変換してMR-C3024に送信するので、roboBAISCで計算しないため反応は良くなるはずです。なお、「V」のバイブレータの許可/禁止にはまだ対応していませんが、RZ-1のコントロールには関係ないので当分はこのままでいいでしょう。
  アナログモードでの動作にはまだバグが残っているようで、PS2ワイヤレスコントローラと互換性はあると思いますが、機種ごとに違いがあります。

【追記】
 VS-C1のバイブレータの許可/禁止が動作するようになりましたので、一覧表を修正しました。VS-C1のバイブレーションは短時間しか動作しませんから、「V」のバイブレータの許可だけで十分です。禁止の方は使うことはないでしょう。なお、動作モードはAnalogモードとDegitalモードは推奨しないで、起動時には必ずDSモードにすることにしました。

 VコントローラVS-C1のコントロールコマンド一覧表(修正版)
キャラクタコマンド一覧表
【使用方法】
 受信モジュールのインターフェイス回路をMR-C3024のETXとERXに繋いで、19200bpsで通信ができるようにします。左側のコマンドキャラクタをMR-C3024に送ると、それに対応したワイヤレスコントローラのキー情報が送られてきます。

 通信するroboBASICのプログラム例は次のようになります。押されたキーをサーチしてRZ-1の各動作への飛び先を指示します。
(プログラム例1)
'−−−−−−sample1−−−−−−
txchar ="X"
ETX 19200, txchar
GETX:
ERX 19200, rxchar, GETX
IF rxchar > 0 AND rxchar < 17 THEN
ON rxchar GOTO MAIN,K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11,K12,K13,K14,K15,K16
ENDIF
'−−−−−−−−−−−−−−
【追記】(2011/06/26)
 sample1のプログラム例から現在は本格的なプログラムを組み始めました。コントローラはキーが少ないので、どうしてもシフトキーを設ける必要になります。そこで、キー検出では次のようなプログラムを組んで、key88までモーションのプログラムをすることができます。

'−−−−−−sample2ーーーーー
MAIN:
PSDT = 0
RXD0 = &HFF
RXD1 = &HFF

txchar = "B"
ETX 19200, txchar
GET0:
ERX 19200, rxchar0, GET0

txchar = "A"
ETX 19200, txchar
GET1:
ERX 19200, rxchar1, GET1

PS_left = rxchar1.7
PS_down = rxchar1.6
PS_right = rxchar1.5
PS_up = rxchar1.4
PS_start = rxchar1.3
PS_r3 = rxchar1.2
PS_l3 = rxchar1.1
PS_select = rxchar1.0

PS_square = rxchar0.7
PS_cross = rxchar0.6
PS_circle = rxchar0.5
PS_triangle = rxchar0.4
PS_r1 = rxchar0.3
PS_l1 = rxchar0.2
PS_r2 = rxchar0.1
PS_l2 = rxchar0.0

IF PS_triangle = 0 THEN
PSDT1 = 1
ELSEIF PS_circle = 0 THEN
PSDT1 = 2
ELSEIF PS_cross = 0 THEN
PSDT1 = 3
ELSEIF PS_square = 0 THEN
PSDT1 = 4
ELSEIF PS_up = 0 THEN
PSDT1 = 5
ELSEIF PS_right = 0 THEN
PSDT1 = 6
ELSEIF PS_down = 0 THEN
PSDT1 = 7
ELSEIF PS_left = 0 THEN
PSDT1 = 8
ELSE
PSDT1 = 0
ENDIF

IF PS_start = 0 THEN
PSDT2 = 80
ELSEIF PS_select = 0 THEN
PSDT2 = 70
ELSEIF PS_l3 = 0 THEN
PSDT2 = 60
ELSEIF PS_r3 = 0 THEN
PSDT2 = 50
ELSEIF PS_l2 = 0 THEN
PSDT2 = 10
ELSEIF PS_r2 = 0 THEN
PSDT2 = 20
ELSEIF PS_l1 = 0 THEN
PSDT2 = 30
ELSEIF PS_r1 = 0 THEN
PSDT2 = 40
ELSE
PSDT2 = 0
ENDIF

PSDT = PSDT2 + PSDT1

ON PSDT GOTO MAIN,key1,key2,key3,key4,key5,key6,key7,key8,key9,key10,key11,key12,key13,key14,key15,key16,key17,key18,
key19,key20,key21,key22,key23,key24,key25,key26,key27,key28,key29,key30,key31,key32,key33,key34,key35,
key36,key37,key38,key39,key40,key41,key42,key43,key44,key45,key46,key47,key48,key49,key50,key51,key52,
key53,key54,key55,key56,key57,key58,key59,key60,key61,key62,key63,key64,key65,key66,key67,key68,key69,
key70,key71,key72,key73,key74,key75,key76,key77,key78,key79,key80,key81,key82,key83,key84,key85,key86,
key87,key88

GOTO MAIN
'−−−−−−−−−−−−−−
0

    コメント
    コメントする








       
    この記事のトラックバックURL
    トラックバック

    カレンダ

         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    << September 2017 >>