モーションプロセッサ用PCコントローラ
の編集
http://masayuki.style.coocan.jp/hp/robowiki/?%E3%83%A2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E7%94%A8PC%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
0N0-ONE
0N0-ONE GP 2006
0N0-ONE GP 2007
0N0-ONE GP 2008
Alibre Design パーツライブラリ
Alibre Design メモ
AutoTicketLinkName
BoROID-01 Ver2.00開発室
BracketName
ConvNetJSをC#に移植してみる
FormattingRules
FrontPage
Help
InterWiki
InterWikiName
InterWikiSandBox
InterWikiテクニカル
MenuBar
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
Roppoのサンプルモーションを使ってみる
ROS-Indigoインストールメモ
SandBox
SUZAKU-VでTOPPERS/ASPを動かす#1
SUZAKU-VでTOPPERS/ASPを動かす#2
TOPPERS/JSPを使う
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
あの楽器を作ってみる
ふうせんプロジェクターを作ってみる
カリンロボ開発室
クラウド型空間マップデータベース
サーボモータを作ってみる
サーボモータを作ってみる2
チロルチョコロボット大会2掲示板
チロルチョコロボット大会3掲示板
チロルチョコロボット大会4掲示板
チロルチョコロボット大会報告板
チロルチョコロボット大会掲示板
チロルチョコロボット大会10掲示板
チロルチョコロボット大会11掲示板
チロルチョコロボット大会12掲示板
チロルチョコロボット大会13掲示板
チロルチョコロボット大会14掲示板
チロルチョコロボット大会15掲示板
チロルチョコロボット大会16掲示板
チロルチョコロボット大会17掲示板
チロルチョコロボット大会18掲示板
チロルチョコロボット大会5掲示板
チロルチョコロボット大会6 in ホビーロボットコロッセオ
チロルチョコロボット大会7掲示板
チロルチョコロボット大会8掲示板
チロルチョコロボット大会9掲示板
チロロッポの作り方
ヘルプ
モーションシンセサイザー
モーションプロセッサ用PCコントローラ
ロボットハンドを作ってみる
作品の写真
全方位3Dカメラを作ってみる
整形ルール
日本語
最適化したアホ毛を作ってみる
身体モデル自動生成
連想型ファイルシステム
* モーションプロセッサ用PCコントローラ(V0.11) [#z30bf064] #contents ---- **概要 [#k336f1b9] ロボファイトなど、同時に多数の無線を使用する場合、無線の使用制限が行われます。~ 場合によっては整備中でも使用できないことが多々あることや、競技によっては割り当てできずに有線コントロールを推奨される場合があります。~ 本ソフトウェアは、モーションプロセッサの高速シリアルを利用した、PCによるコントロールを可能にします。~ 特にKRT-2を使用している方にお勧めです。 **操作方法 [#yba99ef4] #ref(MPJOYPAD01.png) マウス操作はできません。キーボードかジョイスティック操作になります。~ ジョイスティックの判定は起動時に行いますので、接続後に起動してください。~ 終了は、右上のクローズボックスを使用してください。~ -[1-8] COMポートを切り替えます。OFFLINE中のみ反応します。テンキーは使用できません。 -[SPACE] ONLINE/OFFLINEを切り替えます。ONLINE中は表示が反転します。HeartToHeart2でLEVEL3スクリプトを実行させてからONLINEにしてください。ONLINE状態以外はHeartToHeart2と共存できます。 -[ESC] LEVEL3スクリプトを停止して、OFFLINEになります。 -[他のキー] 表示されているボタンを押したことにしてデータを送信します。キーボードの場合のみ同時押し数に制限があります。 **ダウンロード [#m24524fd] -Norton AntiVirus2005(ウィルス定義2006/04/26)でチェック済みです。 -動作するには.NET Framework 2.0が必要です。 #ref(MPJOYPAD01.ZIP) -こちらはSW1-4の論理が逆転しています。(A=ON, B=OFFです)~ 表示以外は変化ありません。~ Proboの配線を見た感じではSW3-4についてはA=ON, B=OFFになっているようです。 #ref(MPJOYPAD02.ZIP) **制限事項など [#afacf28f] -高速シリアルのパケット受信を使用するので、V14-V22が他の用途に使用できません。 -キーの割り当ては固定です。 -他の環境で確認していませんので、動くかどうかは不明です。 -実行したままサスペンドすると、サスペンドできなかったりアプリケーションエラーになる場合があります。 **モーションプロセッサのLEVEL3プログラムでの使用方法 [#o151d4b7] モーションプロセッサの無線コントロールは、通常低速シリアルを利用します。~ 低速シリアル値は、V12およびV13に自動的に取り込まれるので、これを判定に使用します。~ 一方、高速シリアルはスクリプト実行中のパケット取り込みが可能なので、これを使用してコントロールします。~ パケットデータの内、V14は高速シリアル判定用に0x11を送っています。PC側はOFFLINEにするときに0x00を送るので、これで低速シリアルの切り替え判定ができます。~ V15,V16はKRT-2互換のデータで、V17-V22は今後の拡張用です。~ 以下は、LEVEL3プログラムのサンプルです。 ;コントロール信号 ---------------- JumpIf(V14,=,17,InputCheckNx) ;高速シリアル未使用ならProboデータで上書き V15 = V12 V16 = V13 ;操作判定 ------------------------ :InputCheckNx ;入力チェック(プロボ SW1=B) V01 = V15 AND 1 JumpIf(V01,#,0,L_SW1_B) ★[SW1]をBに切り替えた場合の処理へ ;入力チェック(プロボ ↑a) V01 = V16 AND 1 JumpIf(V01,#,0,L_FORWORD) ★[↑]ボタン押下の処理へ ;入力チェック(プロボ 1) V01 = V16 AND 16 JumpIf(V01,#,0,L_1) ★[1]ボタン押下の処理へ **ソースの一部 [#v6a02c31] 制御部分のソースです。 こんな感じで動かしています。(2006-08-05公開) using System; using System.Collections.Generic; using System.Windows.Forms; using System.Threading; using Microsoft.DirectX.DirectInput; using DInput = Microsoft.DirectX.DirectInput; namespace MPJOYPAD { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { ///DirectInputキーボードデバイス Device DInDevKBD; //DirectInputキーボードデバイスの生成 DInDevKBD = new Microsoft.DirectX.DirectInput.Device(SystemGuid.Keyboard); ///DirectInputジョイスティックデバイス Device DInDevJOY = null; //DirectInputジョイスティックデバイスの生成 foreach ( DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)) { DInDevJOY = new Device(di.InstanceGuid); break; } ///画面 Form1 Mainform = new Form1(); //画面表示 Mainform.Show(); ///キーボードデバイス状態 KeyboardState DKeyState; ///ジョイスティックデバイス状態 JoystickState DJoyState; //キーボード入力制御開始 DInDevKBD.Acquire(); //ジョイスティック入力制御を開始 if (DInDevJOY == null) { Mainform.lblSEND.Text = "◆ジョイスティックが接続されていません◆"; } else { DInDevJOY.Acquire(); } ///インターバル値 double nexttime = (double)System.Environment.TickCount; float wait = 1000f / 30f; ///ONLINEフラグ bool online = false; ///ON/OFFフラグ bool onoff = false; ///COMポート名 Mainform.lblCOM.Text = "COM4"; ///送信データ int olddat = 0xffff; String SENDDATA = ""; while (Mainform.Created) { //メインループ if ((double)System.Environment.TickCount >= nexttime) { //入力チェックループ ///入力データ合成値 int indat = 0; //キーボードの状態を取得 DKeyState = DInDevKBD.GetCurrentKeyboardState(); ///ジョイスティックの状態 int joyY = 0; int joyX = 0; byte[] joybtn; //ジョイスティックの状態を取得 if (DInDevJOY != null) { DJoyState = DInDevJOY.CurrentJoystickState; if (DJoyState.Y < 0x1000) joyY = 1; if (DJoyState.Y > 0xF000) joyY = 2; if (DJoyState.X < 0x1000) joyX = 3; if (DJoyState.X > 0xF000) joyX = 4; joybtn = DJoyState.GetButtons(); } else { joybtn = new byte[8]; } //キーボード「A」の判定 indat = (indat | KeyCheck(Mainform.lblL2, 0x0200, DKeyState[DInput.Key.A] | (joybtn[6] != 0),true)); //キーボード「S」の判定 indat = (indat | KeyCheck(Mainform.lblL1, 0x0100, DKeyState[DInput.Key.S] | (joybtn[4] != 0),true)); //キーボード「]」の判定 indat = (indat | KeyCheck(Mainform.lblR2, 0x0400, DKeyState[DInput.Key.RightBracket] | (joybtn[7] != 0),true)); //キーボード「:」の判定 indat = (indat | KeyCheck(Mainform.lblR1, 0x0800, DKeyState[DInput.Key.Colon] | (joybtn[5] != 0),true)); //キーボード「D」の判定 indat = (indat | KeyCheck(Mainform.lblFORWORD, 0x0001, DKeyState[DInput.Key.D] | (joyY == 1))); //キーボード「Z」の判定 indat = (indat | KeyCheck(Mainform.lblLEFT, 0x0008, DKeyState[DInput.Key.Z] | (joyX == 3))); //キーボード「X」の判定 indat = (indat | KeyCheck(Mainform.lblBACK, 0x0002, DKeyState[DInput.Key.X] | (joyY == 2))); //キーボード「C」の判定 indat = (indat | KeyCheck(Mainform.lblRIGHT, 0x0004, DKeyState[DInput.Key.C] | (joyX == 4))); //キーボード「;」の判定 indat = (indat | KeyCheck(Mainform.lbl1, 0x0010, DKeyState[DInput.Key.SemiColon] | (joybtn[1] != 0))); //キーボード「.」の判定 indat = (indat | KeyCheck(Mainform.lbl3, 0x0080, DKeyState[DInput.Key.Period] | (joybtn[0] != 0))); //キーボード「/」の判定 indat = (indat | KeyCheck(Mainform.lbl2, 0x0020, DKeyState[DInput.Key.Slash] | (joybtn[2] != 0))); //キーボード「\」の判定 indat = (indat | KeyCheck(Mainform.lbl4, 0x0040, DKeyState[DInput.Key.BackSlash] | (joybtn[3] != 0))); //キーボード「1-8」の判定 if (online==false) { if (DKeyState[DInput.Key.D1]) Mainform.lblCOM.Text = "COM1"; if (DKeyState[DInput.Key.D2]) Mainform.lblCOM.Text = "COM2"; if (DKeyState[DInput.Key.D3]) Mainform.lblCOM.Text = "COM3"; if (DKeyState[DInput.Key.D4]) Mainform.lblCOM.Text = "COM4"; if (DKeyState[DInput.Key.D5]) Mainform.lblCOM.Text = "COM5"; if (DKeyState[DInput.Key.D6]) Mainform.lblCOM.Text = "COM6"; if (DKeyState[DInput.Key.D7]) Mainform.lblCOM.Text = "COM7"; if (DKeyState[DInput.Key.D8]) Mainform.lblCOM.Text = "COM8"; } //キーボード「SPACE」の判定 if (DKeyState[DInput.Key.Space]) { onoff = true; } else { if (onoff == true) { onoff = false; if (online) { //高速シリアル判定無効化コマンド表示 SENDDATA = "#001100000000000000<CR><LF>"; Mainform.lblSEND.Text = SENDDATA; Application.DoEvents(); //高速シリアル判定無効化コマンド送信 byte[] buf = new byte[21]; buf[0] = (byte)'#'; for (int i = 1; i <= 18; i++) buf[i] = (byte)'0'; buf[3] = (byte)'1'; buf[4] = (byte)'1'; buf[19] = 0x0d; buf[20] = 0x0a; try { Mainform.serialPort1.Write(buf,0,21); } catch { } //回線切断 Mainform.serialPort1.Close(); Mainform.lblONLINE.BackColor = System.Drawing.Color.White; Mainform.lblONLINE.ForeColor = System.Drawing.Color.Black; online = false; } else { //回線接続 Mainform.lblONLINE.BackColor = System.Drawing.Color.Black; Mainform.lblONLINE.ForeColor = System.Drawing.Color.White; Application.DoEvents(); online = true; try { Mainform.serialPort1.Close(); } catch { } try { Mainform.serialPort1.PortName = Mainform.lblCOM.Text; Mainform.serialPort1.Open(); } catch { System.Threading.Thread.Sleep(100); Mainform.lblONLINE.BackColor = System.Drawing.Color.White; Mainform.lblONLINE.ForeColor = System.Drawing.Color.Black; Application.DoEvents(); online = false; } } } } //キーボード「ESC」の判定 if(KeyCheck(Mainform.lblESC, 1, DKeyState[DInput.Key.Escape]) ==1 ){ //スクリプト停止コマンド表示 SENDDATA = "#000000000000000000<CR><LF>"; Mainform.lblSEND.Text = SENDDATA; if (Mainform.serialPort1.IsOpen == true) { //スクリプト停止コマンド送信 byte[] buf = new byte[21]; buf[0] = (byte)'#'; for (int i = 1; i <= 18; i++) buf[i] = (byte)'0'; buf[19] = 0x0d; buf[20] = 0x0a; try { Mainform.serialPort1.Write(buf,0,21); } catch { } //OFFLINEに移行 onoff = true; } } else { //パケットコマンド表示 if (indat != olddat) { SENDDATA = "#11" + indat.ToString("X4") + "000000000000<CR><LF>"; Mainform.lblSEND.Text = SENDDATA; } if ((Mainform.serialPort1.IsOpen == true) && (indat != olddat)) { //パケットコマンド送信 byte[] buf = new byte[21]; buf[0] = (byte)'#'; for (int i = 1; i <= 18; i++) buf[i] = (byte)'0'; buf[1] = (byte)'1'; buf[2] = (byte)'1'; buf[3] += (byte)((indat & 0xf000) / 0x0fff); buf[4] += (byte)((indat & 0x0f00) / 0x00ff); buf[5] += (byte)((indat & 0x00f0) / 0x000f); buf[6] += (byte)(indat & 0x000f); buf[19] = 0x0d; buf[20] = 0x0a; try { Mainform.serialPort1.Write(buf, 0, 21); } catch { } olddat = indat; } } nexttime += wait; } Application.DoEvents(); } } /// <summary> /// キーボード入力をチェックし、ONの場合はON値を返す。 /// </summary> static int KeyCheck(Control lbl, int ondata, bool key) { return KeyCheck(lbl, ondata, key, false); } static int KeyCheck(Control lbl, int ondata, bool key, bool rev) { if (key) { lbl.BackColor = System.Drawing.Color.Black; lbl.ForeColor = System.Drawing.Color.White; if (rev) { return 0; } else { return ondata; } } else { lbl.BackColor = System.Drawing.Color.White; lbl.ForeColor = System.Drawing.Color.Black; if (rev) { return ondata; } else { return 0; } } } } } ---- #comment
パスワード:
タイムスタンプを変更しない
* モーションプロセッサ用PCコントローラ(V0.11) [#z30bf064] #contents ---- **概要 [#k336f1b9] ロボファイトなど、同時に多数の無線を使用する場合、無線の使用制限が行われます。~ 場合によっては整備中でも使用できないことが多々あることや、競技によっては割り当てできずに有線コントロールを推奨される場合があります。~ 本ソフトウェアは、モーションプロセッサの高速シリアルを利用した、PCによるコントロールを可能にします。~ 特にKRT-2を使用している方にお勧めです。 **操作方法 [#yba99ef4] #ref(MPJOYPAD01.png) マウス操作はできません。キーボードかジョイスティック操作になります。~ ジョイスティックの判定は起動時に行いますので、接続後に起動してください。~ 終了は、右上のクローズボックスを使用してください。~ -[1-8] COMポートを切り替えます。OFFLINE中のみ反応します。テンキーは使用できません。 -[SPACE] ONLINE/OFFLINEを切り替えます。ONLINE中は表示が反転します。HeartToHeart2でLEVEL3スクリプトを実行させてからONLINEにしてください。ONLINE状態以外はHeartToHeart2と共存できます。 -[ESC] LEVEL3スクリプトを停止して、OFFLINEになります。 -[他のキー] 表示されているボタンを押したことにしてデータを送信します。キーボードの場合のみ同時押し数に制限があります。 **ダウンロード [#m24524fd] -Norton AntiVirus2005(ウィルス定義2006/04/26)でチェック済みです。 -動作するには.NET Framework 2.0が必要です。 #ref(MPJOYPAD01.ZIP) -こちらはSW1-4の論理が逆転しています。(A=ON, B=OFFです)~ 表示以外は変化ありません。~ Proboの配線を見た感じではSW3-4についてはA=ON, B=OFFになっているようです。 #ref(MPJOYPAD02.ZIP) **制限事項など [#afacf28f] -高速シリアルのパケット受信を使用するので、V14-V22が他の用途に使用できません。 -キーの割り当ては固定です。 -他の環境で確認していませんので、動くかどうかは不明です。 -実行したままサスペンドすると、サスペンドできなかったりアプリケーションエラーになる場合があります。 **モーションプロセッサのLEVEL3プログラムでの使用方法 [#o151d4b7] モーションプロセッサの無線コントロールは、通常低速シリアルを利用します。~ 低速シリアル値は、V12およびV13に自動的に取り込まれるので、これを判定に使用します。~ 一方、高速シリアルはスクリプト実行中のパケット取り込みが可能なので、これを使用してコントロールします。~ パケットデータの内、V14は高速シリアル判定用に0x11を送っています。PC側はOFFLINEにするときに0x00を送るので、これで低速シリアルの切り替え判定ができます。~ V15,V16はKRT-2互換のデータで、V17-V22は今後の拡張用です。~ 以下は、LEVEL3プログラムのサンプルです。 ;コントロール信号 ---------------- JumpIf(V14,=,17,InputCheckNx) ;高速シリアル未使用ならProboデータで上書き V15 = V12 V16 = V13 ;操作判定 ------------------------ :InputCheckNx ;入力チェック(プロボ SW1=B) V01 = V15 AND 1 JumpIf(V01,#,0,L_SW1_B) ★[SW1]をBに切り替えた場合の処理へ ;入力チェック(プロボ ↑a) V01 = V16 AND 1 JumpIf(V01,#,0,L_FORWORD) ★[↑]ボタン押下の処理へ ;入力チェック(プロボ 1) V01 = V16 AND 16 JumpIf(V01,#,0,L_1) ★[1]ボタン押下の処理へ **ソースの一部 [#v6a02c31] 制御部分のソースです。 こんな感じで動かしています。(2006-08-05公開) using System; using System.Collections.Generic; using System.Windows.Forms; using System.Threading; using Microsoft.DirectX.DirectInput; using DInput = Microsoft.DirectX.DirectInput; namespace MPJOYPAD { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { ///DirectInputキーボードデバイス Device DInDevKBD; //DirectInputキーボードデバイスの生成 DInDevKBD = new Microsoft.DirectX.DirectInput.Device(SystemGuid.Keyboard); ///DirectInputジョイスティックデバイス Device DInDevJOY = null; //DirectInputジョイスティックデバイスの生成 foreach ( DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)) { DInDevJOY = new Device(di.InstanceGuid); break; } ///画面 Form1 Mainform = new Form1(); //画面表示 Mainform.Show(); ///キーボードデバイス状態 KeyboardState DKeyState; ///ジョイスティックデバイス状態 JoystickState DJoyState; //キーボード入力制御開始 DInDevKBD.Acquire(); //ジョイスティック入力制御を開始 if (DInDevJOY == null) { Mainform.lblSEND.Text = "◆ジョイスティックが接続されていません◆"; } else { DInDevJOY.Acquire(); } ///インターバル値 double nexttime = (double)System.Environment.TickCount; float wait = 1000f / 30f; ///ONLINEフラグ bool online = false; ///ON/OFFフラグ bool onoff = false; ///COMポート名 Mainform.lblCOM.Text = "COM4"; ///送信データ int olddat = 0xffff; String SENDDATA = ""; while (Mainform.Created) { //メインループ if ((double)System.Environment.TickCount >= nexttime) { //入力チェックループ ///入力データ合成値 int indat = 0; //キーボードの状態を取得 DKeyState = DInDevKBD.GetCurrentKeyboardState(); ///ジョイスティックの状態 int joyY = 0; int joyX = 0; byte[] joybtn; //ジョイスティックの状態を取得 if (DInDevJOY != null) { DJoyState = DInDevJOY.CurrentJoystickState; if (DJoyState.Y < 0x1000) joyY = 1; if (DJoyState.Y > 0xF000) joyY = 2; if (DJoyState.X < 0x1000) joyX = 3; if (DJoyState.X > 0xF000) joyX = 4; joybtn = DJoyState.GetButtons(); } else { joybtn = new byte[8]; } //キーボード「A」の判定 indat = (indat | KeyCheck(Mainform.lblL2, 0x0200, DKeyState[DInput.Key.A] | (joybtn[6] != 0),true)); //キーボード「S」の判定 indat = (indat | KeyCheck(Mainform.lblL1, 0x0100, DKeyState[DInput.Key.S] | (joybtn[4] != 0),true)); //キーボード「]」の判定 indat = (indat | KeyCheck(Mainform.lblR2, 0x0400, DKeyState[DInput.Key.RightBracket] | (joybtn[7] != 0),true)); //キーボード「:」の判定 indat = (indat | KeyCheck(Mainform.lblR1, 0x0800, DKeyState[DInput.Key.Colon] | (joybtn[5] != 0),true)); //キーボード「D」の判定 indat = (indat | KeyCheck(Mainform.lblFORWORD, 0x0001, DKeyState[DInput.Key.D] | (joyY == 1))); //キーボード「Z」の判定 indat = (indat | KeyCheck(Mainform.lblLEFT, 0x0008, DKeyState[DInput.Key.Z] | (joyX == 3))); //キーボード「X」の判定 indat = (indat | KeyCheck(Mainform.lblBACK, 0x0002, DKeyState[DInput.Key.X] | (joyY == 2))); //キーボード「C」の判定 indat = (indat | KeyCheck(Mainform.lblRIGHT, 0x0004, DKeyState[DInput.Key.C] | (joyX == 4))); //キーボード「;」の判定 indat = (indat | KeyCheck(Mainform.lbl1, 0x0010, DKeyState[DInput.Key.SemiColon] | (joybtn[1] != 0))); //キーボード「.」の判定 indat = (indat | KeyCheck(Mainform.lbl3, 0x0080, DKeyState[DInput.Key.Period] | (joybtn[0] != 0))); //キーボード「/」の判定 indat = (indat | KeyCheck(Mainform.lbl2, 0x0020, DKeyState[DInput.Key.Slash] | (joybtn[2] != 0))); //キーボード「\」の判定 indat = (indat | KeyCheck(Mainform.lbl4, 0x0040, DKeyState[DInput.Key.BackSlash] | (joybtn[3] != 0))); //キーボード「1-8」の判定 if (online==false) { if (DKeyState[DInput.Key.D1]) Mainform.lblCOM.Text = "COM1"; if (DKeyState[DInput.Key.D2]) Mainform.lblCOM.Text = "COM2"; if (DKeyState[DInput.Key.D3]) Mainform.lblCOM.Text = "COM3"; if (DKeyState[DInput.Key.D4]) Mainform.lblCOM.Text = "COM4"; if (DKeyState[DInput.Key.D5]) Mainform.lblCOM.Text = "COM5"; if (DKeyState[DInput.Key.D6]) Mainform.lblCOM.Text = "COM6"; if (DKeyState[DInput.Key.D7]) Mainform.lblCOM.Text = "COM7"; if (DKeyState[DInput.Key.D8]) Mainform.lblCOM.Text = "COM8"; } //キーボード「SPACE」の判定 if (DKeyState[DInput.Key.Space]) { onoff = true; } else { if (onoff == true) { onoff = false; if (online) { //高速シリアル判定無効化コマンド表示 SENDDATA = "#001100000000000000<CR><LF>"; Mainform.lblSEND.Text = SENDDATA; Application.DoEvents(); //高速シリアル判定無効化コマンド送信 byte[] buf = new byte[21]; buf[0] = (byte)'#'; for (int i = 1; i <= 18; i++) buf[i] = (byte)'0'; buf[3] = (byte)'1'; buf[4] = (byte)'1'; buf[19] = 0x0d; buf[20] = 0x0a; try { Mainform.serialPort1.Write(buf,0,21); } catch { } //回線切断 Mainform.serialPort1.Close(); Mainform.lblONLINE.BackColor = System.Drawing.Color.White; Mainform.lblONLINE.ForeColor = System.Drawing.Color.Black; online = false; } else { //回線接続 Mainform.lblONLINE.BackColor = System.Drawing.Color.Black; Mainform.lblONLINE.ForeColor = System.Drawing.Color.White; Application.DoEvents(); online = true; try { Mainform.serialPort1.Close(); } catch { } try { Mainform.serialPort1.PortName = Mainform.lblCOM.Text; Mainform.serialPort1.Open(); } catch { System.Threading.Thread.Sleep(100); Mainform.lblONLINE.BackColor = System.Drawing.Color.White; Mainform.lblONLINE.ForeColor = System.Drawing.Color.Black; Application.DoEvents(); online = false; } } } } //キーボード「ESC」の判定 if(KeyCheck(Mainform.lblESC, 1, DKeyState[DInput.Key.Escape]) ==1 ){ //スクリプト停止コマンド表示 SENDDATA = "#000000000000000000<CR><LF>"; Mainform.lblSEND.Text = SENDDATA; if (Mainform.serialPort1.IsOpen == true) { //スクリプト停止コマンド送信 byte[] buf = new byte[21]; buf[0] = (byte)'#'; for (int i = 1; i <= 18; i++) buf[i] = (byte)'0'; buf[19] = 0x0d; buf[20] = 0x0a; try { Mainform.serialPort1.Write(buf,0,21); } catch { } //OFFLINEに移行 onoff = true; } } else { //パケットコマンド表示 if (indat != olddat) { SENDDATA = "#11" + indat.ToString("X4") + "000000000000<CR><LF>"; Mainform.lblSEND.Text = SENDDATA; } if ((Mainform.serialPort1.IsOpen == true) && (indat != olddat)) { //パケットコマンド送信 byte[] buf = new byte[21]; buf[0] = (byte)'#'; for (int i = 1; i <= 18; i++) buf[i] = (byte)'0'; buf[1] = (byte)'1'; buf[2] = (byte)'1'; buf[3] += (byte)((indat & 0xf000) / 0x0fff); buf[4] += (byte)((indat & 0x0f00) / 0x00ff); buf[5] += (byte)((indat & 0x00f0) / 0x000f); buf[6] += (byte)(indat & 0x000f); buf[19] = 0x0d; buf[20] = 0x0a; try { Mainform.serialPort1.Write(buf, 0, 21); } catch { } olddat = indat; } } nexttime += wait; } Application.DoEvents(); } } /// <summary> /// キーボード入力をチェックし、ONの場合はON値を返す。 /// </summary> static int KeyCheck(Control lbl, int ondata, bool key) { return KeyCheck(lbl, ondata, key, false); } static int KeyCheck(Control lbl, int ondata, bool key, bool rev) { if (key) { lbl.BackColor = System.Drawing.Color.Black; lbl.ForeColor = System.Drawing.Color.White; if (rev) { return 0; } else { return ondata; } } else { lbl.BackColor = System.Drawing.Color.White; lbl.ForeColor = System.Drawing.Color.Black; if (rev) { return ondata; } else { return 0; } } } } } ---- #comment
テキスト整形のルールを表示する
添付ファイル:
MPJOYPAD02.ZIP
877件
[
詳細
]
MPJOYPAD01.ZIP
886件
[
詳細
]
MPJOYPAD01.png
1072件
[
詳細
]