プログラムバックUP

// sampleDlg.cpp : 実装ファイル

アームがリミットを使ってとまった.
りみっっとセンサの見ている場所がちがったらしい.



//ヘッダファイル
#include "stdafx.h"
#include "sample.h"
#include "sampleDlg.h"
#include ".\sampledlg.h"
#include "CSocketX.h"
#include
#include
#include
#include
#include
#include // MFC のソケット拡張機能
#include // 数学関数用ヘッダファイル
#include // DirectShow用ヘッダファイル
#include // DirectSound用ヘッダファイル
#include // 画像処理ライブラリ用ヘッダファイル1
#include // 画像処理ライブラリ用ヘッダファイル2
#include // コマンドプロトタイプ宣言ヘッダファイル

/** import DirectX **/
#pragma comment ( lib, "winmm.lib" )
#pragma comment ( lib, "dsound.lib" )
#pragma comment ( lib, "dxguid.lib" )

/*------- メインカメラキャプチャ用変数 -------*/
// 再生用
IGraphBuilder *pGraph = NULL;
ICaptureGraphBuilder2 *pBuilder = NULL;
IMediaControl *pMediaControl;
IVideoWindow *pVidWin = NULL;
IBaseFilter *pSrc = NULL;
HWND hPicture = NULL;

// デバイス用
ICreateDevEnum *pDevEnum = NULL;
IEnumMoniker *pClassEnum = NULL;
IMoniker *pMoniker = NULL;
ULONG cFetched;

// ピクチャウィンドウ用
CWnd *WPICT; // メインカメラを表示するコントロールのハンドラ
CRect WRect; // ピクチャコントロールのサイズを格納
CRgn WRgn;
CDC *pDC; // ピクチャコントロールのハンドル

IMGID ImgID,imgYUV,imgDST; // IP5000イメージ変数
IMGID imgYUV1,imgYUV2,imgUV1,imgUV2,imgYUV3,imgUV3,imgLabel;

CSocketX TCP_socket; // TCPのソケット

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE = __FILE__;
#endif

//覚醒モード画像フラグ実装してなかったら消してもYOI
int BurstCount=0;
int BurstFlag=0;//バースト状態の画像切り替えよう
int BurstFlag2=1;//ビークルの状態画像切り替えよう
int BCommandflag=1;
int OnTimerflag=999;
int Joystickflag=0;
int JoySpeedflag1=0;
int JoySpeedflag2=1;
int Stopflag=0;
int BSPEED=1;
int rx0,ry0,flagR,flagE;//Arm 画像処理グローバルにする必要あったけ?
int StartFlag=0;
int SkinFlag=2;
int LturnFlag=0;
int RturnFlag=0;
int TurnCount=0;
int matoflag=1;
int LightFlag=0;
int temperature=0;
int status=30;
int LDownFlag=0;
int ArmFlag=0;
int ArmOpen=0;
char flg=0x00;// CsampleDlg ダイアログ
char pixel;

CString filename; // 画像のファイル名
CString m_message; //デバックよう
CString m_message2;
CString rev2;


BOOL bmpflg; // 擬似サーモフラフィフラグ


/************** 通信 ****************/
#define TCP_port 8000 // TCPポート
#define TCP_port2 8001 // TCPポート2
#define UDP_port 8002 // UDPポート
#define IP_Address "192.168.231.10" // ビークルのIPアドレス



//////////////////////////////////画像///////////////////////////////////////

//共通で使う画像
#define MATO TEXT("img\\mato.bmp")//マト

//スキン2(ENGLISH)
#define right_volt0 TEXT("Skin2\\meter_v0.bmp")//右→right Volt
#define right_volt1 TEXT("Skin2\\meter_v1.bmp")//右→right Volt
#define right_volt2 TEXT("Skin2\\meter_v2.bmp")//右→right Volt
#define right_volt3 TEXT("Skin2\\meter_v3.bmp")//右→right Volt
#define right_volt4 TEXT("Skin2\\meter_v4.bmp")//右→right Volt

#define left_nomal TEXT("Skin2\\state_normal0.bmp")//左←left

//state画像
#define left_advance TEXT("Skin2\\state_Advance0.bmp")//前進
#define left_back TEXT("Skin2\\state_Back0.bmp")//後進
#define left_lturn TEXT("Skin2\\state_L_Turn0.bmp")//左折
#define left_rturn TEXT("Skin2\\state_R_Turn0.bmp")//右折
#define left_nomal_light TEXT("Skin2\\state_normal1.bmp")//ライト

#define left_advance_light TEXT("Skin2\\state_Advance1.bmp")//ライト+前進
#define left_back_light TEXT("Skin2\\state_Back1.bmp")//ライト+後進
#define left_lturn_light TEXT("Skin2\\state_L_Turn1.bmp")//ライト+左折
#define left_rturn_light TEXT("Skin2\\state_R_Turn1.bmp")//ライト+右折

#define option TEXT("Skin2\\light_off.bmp")//おぷしょん
#define option_on TEXT("Skin2\\light_on.bmp")


#define serch TEXT("Skin2\\search.bmp")//さーち serch


//モード(上野がぞう)
#define mode_normal TEXT("Skin2\\mode_normal4.bmp")//モード
#define mode_drive TEXT("Skin2\\mode_drive4.bmp")//ドライブモード
#define mode_arm TEXT("Skin2\\mode_arm4.bmp")//アームモード
#define mode_solar TEXT("Skin2\\mode_solar.bmp")//ソーラモード

//ステータス(下の画像)
#define under_state_nomal TEXT("Skin2\\moniter_s0.bmp")//ノーマル
#define under_state_advance TEXT("Skin2\\moniter_s3.bmp")//前進
#define under_state_back TEXT("Skin2\\moniter_s4.bmp")//後進

#define under_state_lturn1 TEXT("Skin2\\moniter_tt4.bmp")//左旋回1
#define under_state_lturn2 TEXT("Skin2\\moniter_tt5.bmp")//左旋回2
#define under_state_lturn3 TEXT("Skin2\\moniter_tt6.bmp")//左旋回3
#define under_state_lturn4 TEXT("Skin2\\moniter_tt7.bmp")//左旋回4

#define under_state_Rturn1 TEXT("Skin2\\moniter_tt0.bmp")//右旋回1
#define under_state_Rturn2 TEXT("Skin2\\moniter_tt1.bmp")//右旋回2
#define under_state_Rturn3 TEXT("Skin2\\moniter_tt2.bmp")//右旋回3
#define under_state_Rturn4 TEXT("Skin2\\moniter_tt3.bmp")//右旋回4

#define under_state_nomal_light TEXT("Skin2\\moniter_light5.bmp")//ノーマル+ライト
#define under_state_advance_light TEXT("Skin2\\moniter_light1.bmp")//前進+ライト
#define under_state_back_light TEXT("Skin2\\moniter_light4.bmp")//後進+raito

#define under_state_Rturn1_light TEXT("Skin2\\moniter_ll0.bmp")//右旋回1+らいと
#define under_state_Rturn2_light TEXT("Skin2\\moniter_ll1.bmp")//右旋回2+ライト
#define under_state_Rturn3_light TEXT("Skin2\\moniter_ll2.bmp")//右旋回3+らいと
#define under_state_Rturn4_light TEXT("Skin2\\moniter_ll3.bmp")//右旋回4+らいと

#define under_state_lturn1_light TEXT("Skin2\\moniter_ll4.bmp")//右旋回1+らいと
#define under_state_lturn2_light TEXT("Skin2\\moniter_ll5.bmp")//右旋回2+ライト
#define under_state_lturn3_light TEXT("Skin2\\moniter_ll6.bmp")//右旋回3+らいと
#define under_state_lturn4_light TEXT("Skin2\\moniter_ll7.bmp")//右旋回4+らいと

#define under_state_arm1 TEXT("Skin2\\arm000.bmp")//アームモード索敵
#define under_state_arm2 TEXT("Skin2\\arm001.bmp")//アームモード発見

//↓趣味
#define under_state_Burst0 TEXT("Skin2\\moniter_Burst4.bmp")//ステータス\バースト
#define under_state_Burst1 TEXT("Skin2\\moniter_Burst5.bmp")//


//SPEED画像
#define right_speed0 TEXT("Skin2\\meter_s0.bmp")//右→right Speed
#define right_speed1 TEXT("Skin2\\meter_s1.bmp")//speed1
#define right_speed2 TEXT("Skin2\\meter_s2.bmp")//speed2
#define right_speed3 TEXT("Skin2\\meter_s3.bmp")//speed3
#define right_speed4 TEXT("Skin2\\meter_s4.bmp")//speed4
//↓これは趣味
#define right_speed5 TEXT("Skin2\\meter_s5.bmp")//speed4MAX
#define right_speed6 TEXT("Skin2\\meter_s7.bmp")//speed5MAX後0

///////////////////////////////////////////////////////////////////////////////////

UINT Arm(LPVOID pParam); // アーム処理スレッド


CsampleDlg::CsampleDlg(CWnd* pParent /*=NULL*/)
: CDialog(CsampleDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

//----
m_BmpInfo = NULL;
m_BmpImage = NULL;

}
BEGIN_MESSAGE_MAP(CsampleDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_COMMAND(ID_32771, ImageOpen)
ON_COMMAND(ID_32778, ImageOpen)
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
ON_WM_CTLCOLOR()
ON_WM_SIZE()

END_MESSAGE_MAP()


// CsampleDlg メッセージ ハンドラ

BOOL CsampleDlg::OnInitDialog()
{
int nNum;

CDialog::OnInitDialog();
SetTimer( 200, 20, NULL );
//ダイアログの背景色をかえる
m_brDlg.CreateSolidBrush(RGB(0,0,0));
// このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
// Framework は、この設定を自動的に行います。
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
if( m_blInput.InitJoystick( ::AfxGetInstanceHandle(), GetSafeHwnd(), 1, &nNum ) != 0 ){
PostMessage( WM_DESTROY );
}
// TODO: 初期化をここに追加します。


// IP5000を初期化&メモリ確保(img1,img2,img3)
InitIPExt();
imgYUV = AllocImg(IMG_FS_512H_512V); // カラー用画像メモリの確保
imgDST = AllocImg(IMG_FS_512H_512V);
imgLabel = AllocImg(IMG_FS_512H_512V);
ImgID = AllocYUVImg(IMG_FS_512H_512V);
imgYUV1= AllocYUVImg(IMG_FS_512H_512V);
imgUV1= AllocYUVImg(IMG_FS_512H_512V);
imgYUV2= AllocYUVImg(IMG_FS_512H_512V);
imgUV2= AllocYUVImg(IMG_FS_512H_512V);
imgYUV3= AllocYUVImg(IMG_FS_512H_512V);
imgUV3= AllocYUVImg(IMG_FS_512H_512V);
// カメラの選択
SelectCamera(CAMERA_PORT0,YUV_CAMERA);
SetVideoFrame (INTERLACE, VIDEO_FS_512H_440V);
// 変数の初期化
bmpflg = FALSE;
flg = 0x00; // 画面フラグを初期化

//Skin2
right_up.Load(right_volt0);
right_down.Load(right_speed0);
left.Load(left_nomal);
option1.Load(option);
option2.Load(option);
serch1.Load(serch);
mode.Load(mode_normal);
state.Load(under_state_nomal);
//mato
img10.Load(MATO);
GetObject(mask,sizeof(BITMAP),&bmpFore);

if (!AfxSocketInit())
{
return FALSE;
}
SetWindowPos(NULL, 0, 0, 1280, 990, SWP_NOZORDER);

UpdateData ( FALSE );

return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}

// ダイアログに最小化ボタンを追加する場合、アイコンを描画するための
// 下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、
// これは、Framework によって自動的に設定されます。

void CsampleDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 描画のデバイス コンテキスト

SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);

// クライアントの四角形領域内の中央
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// アイコンの描画製作対象物
dc.DrawIcon(x, y, m_hIcon);



}
else
{
CPaintDC dc(this); // 描画のデバイス コンテキスト
CDialog::OnPaint();
CPen myPen,*pOldPen;

option1.BitBlt(dc.m_hDC,18,0);//ライト
option2.BitBlt(dc.m_hDC,1000,0);//ライト
left.BitBlt(dc.m_hDC,18,160);//左ステータス
mode.BitBlt(dc.m_hDC,270,0);//うえのもーど
state.BitBlt(dc.m_hDC,270,697);//したのビークル状況
right_up.BitBlt(dc.m_hDC,1000,160);//ボルト
right_down.BitBlt(dc.m_hDC,1000,560);//speed
dc.TextOut(20, 20, m_message);
dc.TextOut(40,40,m_message2);
if(!m_BmpInfo) return;
if (flg == 0x01) {
hDC = m_pict1.GetDC()->GetSafeHdc();
} else {
hDC = m_pict3.GetDC()->GetSafeHdc();
}
::BeginPaint(m_hWnd,&ps);
hCompatiDC = ::CreateCompatibleDC(hDC);
myDIB = ::CreateDIBitmap(hDC,&m_BmpInfo->bmiHeader,CBM_INIT,m_BmpImage,m_BmpInfo,DIB_RGB_COLORS);
oldDIB = (HBITMAP)::SelectObject(hCompatiDC,myDIB);
if (flg == 0x01) {
StretchBlt(hDC,0,0,715,580,hCompatiDC,0,0,m_BmpInfo->bmiHeader.biWidth,m_BmpInfo->bmiHeader.biHeight,SRCCOPY);
} else {
StretchBlt(hDC,0,0,352,240,hCompatiDC,0,0,m_BmpInfo->bmiHeader.biWidth,m_BmpInfo->bmiHeader.biHeight,SRCCOPY);
}
::EndPaint(m_hWnd,&ps);
::SelectObject(hCompatiDC,oldDIB);
::DeleteObject(myDIB);
::DeleteObject(hCompatiDC);
::ReleaseDC(m_hWnd,hDC);
}
}

//ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、
// システムがこの関数を呼び出します。
HCURSOR CsampleDlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}

void CsampleDlg::OnBnClickedButton1()
{
// TODO : ここにコントロール通知ハンドラ コードを追加します。
}

/** 開始 **/
void CsampleDlg::ImageOpen()
{
CMenu *menu = AfxGetMainWnd()->GetMenu();
CsampleDlg::start();
//menu->EnableMenuItem(ID_32771,MF_GRAYED); // 押せなくする
//menu->EnableMenuItem(ID_32778,MF_ENABLED); // 戻す
//menu->EnableMenuItem(ID_32775,MF_ENABLED); // 戻す
//menu->EnableMenuItem(ID_32776,MF_ENABLED); // 戻す
//menu->EnableMenuItem(ID_32786,MF_ENABLED); // 戻す

}



void CsampleDlg::start()
{

UpdateData ();
CsampleDlg::CaptureStart();
// ビークルの状態を表示する
// 車体を表示する
UINT m_uint;
AfxBeginThread(Arm,&m_uint);// 赤外線カメラ起動

if (!TCP_socket.Create(0,SOCK_STREAM,NULL)) {
MessageBox("通信失敗1");
return;
}

if(!TCP_socket.Connect(_T(IP_Address), TCP_port )) {
MessageBox("通信失敗2");
return;
}
LDownFlag=1;
m_message2 = "おされてねーよ";
CsampleDlg::Command(10);
status=0;

}
/** バッテリー更新**/
void CsampleDlg::volt_mode(int temp){
right_up.Destroy();
if (temperature <=165){
right_up.Load(right_volt0);//0%
}else if(temperature <=175){
right_up.Load(right_volt1);//25%
}else if(temperature <=185){
right_up.Load(right_volt2);//50%
}else if(temperature <=195){
right_up.Load(right_volt3);//75%
}else if(temperature <=0xff){
right_up.Load(right_volt4);//100%
}
}
void CsampleDlg::Solar()
{

}

//ライト更新
void CsampleDlg::light_mode(int temp){
option1.Destroy();
option2.Destroy();

if(temp!=1){
option1.Load(option);
option2.Load(option);
}else{
option1.Load(option_on);
option2.Load(option_on);
}
}


//モード更新
void CsampleDlg::top_mode(int temp){
mode.Destroy();

switch(temp){
case 0://ノーマル
mode.Load(mode_normal);
break;
case 1://ドライブ
mode.Load(mode_drive);
break;
case 2://アーム
mode.Load(mode_arm);
break;
case 3://ソーラー
mode.Load(mode_solar);
break;

}


}


//ビークル情報更新
void CsampleDlg::under_state_mode(int temp)
{

state.Destroy();
switch(temp*=BurstFlag2){
case 1://ノーマル
if(LightFlag!=1){
state.Load(under_state_nomal);
}else{
state.Load(under_state_nomal_light);
}
break;
case 2://前進
if(LightFlag!=1){
state.Load(under_state_advance);
}else{
state.Load(under_state_advance_light);
}
break;
case 3://後進
if(LightFlag!=1){
state.Load(under_state_back);
}else{
state.Load(under_state_back_light);
}
break;
case 4://右旋回
if(LightFlag!=1){
state.Load(under_state_Rturn1);
}else{
state.Load(under_state_Rturn1_light);
}
break;
case 5://左旋回
if(LightFlag!=1){
state.Load(under_state_lturn1);
}else{
state.Load(under_state_lturn1_light);
}
break;
case 6://アーム索敵
state.Load(under_state_arm1);
break;
case 7://アーム発見
state.Load(under_state_arm2);
break;
case 0:
case 10://覚醒
state.Load(under_state_Burst0);
break;
}
}



//ステート情報更新
void CsampleDlg::state_mode(int temp)
{
//0 なにもなし+ライトon
//1前進or前進+ライト
//2後進or後進+ライト

//4左旋回r turn or 左旋回+ライト
//5右旋回l turn or 右旋回+ライト
if(SkinFlag==2){
left.Destroy();
switch(temp){
case 0:
if(LightFlag!=1){
left.Load(left_nomal);
}else{
left.Load(left_nomal_light);
}
break;
case 1:
if(LightFlag!=1){
left.Load(left_advance);
}else{
left.Load(left_advance_light);
}
break;
case 2:
if(LightFlag!=1){
left.Load(left_back);
}else{
left.Load(left_back_light);
}
break;
case 4:
if(LightFlag!=1){
left.Load(left_lturn);
}else{
left.Load(left_lturn_light);
}
break;
case 5://right
if(LightFlag!=1){
left.Load(left_rturn);
}else{
left.Load(left_rturn_light);
}
TurnCount=2;
break;
//case 6://覚醒
//
// left.Load(left_nomal);
// mode.Load(mode_drive);
break;
// case 8:
// mode.Load(mode_arm);
// left.Load(left_nomal);
// state.Load(under_state_arm1);
// break;

}
}
}
//スピード速度更新
void CsampleDlg::Speed(int temp)
{
if(SkinFlag==2){
switch(temp){
case 0:
if(BSPEED==999){
right_down.Destroy();
right_down.Load(right_speed6);
}else{
right_down.Destroy();
right_down.Load(right_speed0);
}
break;
case 1:
right_down.Destroy();
right_down.Load(right_speed1);
break;
case 2:
right_down.Destroy();
right_down.Load(right_speed2);
break;
case 3:
right_down.Destroy();
right_down.Load(right_speed3);
break;
case 4:
right_down.Destroy();
right_down.Load(right_speed4);
break;
case 999:
right_down.Destroy();
right_down.Load(right_speed5);
break;
}

}

}
//コマンド情報更新
void CsampleDlg::Command(int temp)
{
long z;
switch(temp){
case 1:
BSPEED=BSPEED+1;
break;
case 2://前進・後進命令
BCommandflag=1;
m_message="test";
switch(BSPEED){
case 1:
if(Joystickflag==1){
//TCP_SendMessage("M1");
}else{
//TCP_SendMessage("B1");
}
break;
case 2:
if(Joystickflag==1){
TCP_SendMessage("M2");
}else{
TCP_SendMessage("B2");
}
break;
case 3:
if(Joystickflag==1){
TCP_SendMessage("M3");
}else{
TCP_SendMessage("B3");
}
break;
case 4:
if(Joystickflag==1){
TCP_SendMessage("M4");
}else{
TCP_SendMessage("B4");
}
break;
case 999:
if(Joystickflag==1){
TCP_SendMessage("M5");
}else{
TCP_SendMessage("B5");
}
break;
default:
if(BSPEED<=0){
if(Joystickflag==1){
//TCP_SendMessage("M1");
}else{
//TCP_SendMessage("B1");
}
BSPEED=1;
}else{
if(Joystickflag==1){
//TCP_SendMessage("M4");
}else{
//TCP_SendMessage("B4");
}
BSPEED=4;
BurstCount=0;
}
break;
}
if(Joystickflag==1){
//画像読み込み//
top_mode(1);
under_state_mode(2);
state_mode(1);
}else{
//画像読み込み//
top_mode(1);
under_state_mode(3);
state_mode(2);
}
//画像読み込み//
Speed(BSPEED);

//画面更新//
Invalidate(FALSE);

break;
case 3://左折
TurnCount=1;
BCommandflag=1;
LturnFlag=1;

//左折命令送信
TCP_SendMessage("L2");

//画像読み込み//
top_mode(1);
under_state_mode(5);
state_mode(4);
Speed(2);

//描画更新//
Invalidate(FALSE);

break;
case 4://スピード減速
BSPEED=BSPEED-1;
break;
case 5:
if(BCommandflag==1){
LturnFlag=0;
RturnFlag=0;
TCP_SendMessage("S");
m_message = "ろっくちゅう";

//画像読み込み//
top_mode(0);
under_state_mode(1);
state_mode(0);
Speed(0);
//描画更新//
Invalidate(FALSE);
for(z=200000;z>=0;z--);
}
BCommandflag=0;
break;
case 6://覚醒
if(BurstFlag2==0){
BurstCount=0;
BurstFlag2=1;
BSPEED=0;
//画像読み込み//
under_state_mode(1);

}else{
BurstCount=2;
BurstFlag2=0;
BSPEED=999;
//画像読み込み//
under_state_mode(10);
}
Speed(0);
Invalidate(FALSE);
break;
case 7://右折
TurnCount=2;
BCommandflag=1;
RturnFlag=2;
//右折命令送信
TCP_SendMessage("R2");

//画像読み込み//
top_mode(1);
under_state_mode(4);
state_mode(5);
Speed(2);

//描画更新//
Invalidate(FALSE);
break;
case 8://アームモード
//画像読み込み//
top_mode(2);
under_state_mode(7);


//描画更新//
Invalidate(FALSE);
break;
case 10://電圧測定
//電圧測定命令送信
TCP_SendMessage("V");

if (!(TCP_socket.Receive(rev2, 100) == SOCKET_ERROR)){
char *recv = new char[6];
strcpy(recv,rev2);
if(recv[0] == 'V'){
temperature =(unsigned int)recv[1];
//画像読み込み//
if(temperature<0){
temperature*=-1;
temperature+=128;
}
volt_mode(temperature);
//描画更新//
Invalidate(FALSE);

}
temperature=0;
delete recv;
}
break;
case 11://アームDOWN
//右折命令送信
TCP_SendMessage("D2");
break;
case 12://アームUP
TCP_SendMessage("U2");
break;
case 13://アームOPEN
m_message = "OPEN";
//sora
//TCP_SendMessage("I2");
TCP_SendMessage("O2");//アームおーぷん
break;
case 14://アームCLOSE
m_message = "CLOSE";
//sora
//TCP_SendMessage("P2");
TCP_SendMessage("C2");//アームくろーず
break;
case 15://maru
TCP_SendMessage("F2");
//TCP_SendMessage("E2"); //senkai
//TCP_SendMessage("Q2");//solrDC
break;
case 16:
TCP_SendMessage("Y2");
//TCP_SendMessage("T2"); //せんかい
//TCP_SendMessage("W2");//solrDC
break;
case 17:
TCP_SendMessage("F2");
break;
}

}
void CsampleDlg::TCP_SendMessage(char* mes){

//CString send;
char *send =new char[3];
strcpy(send,mes);

if(LightFlag==0){
send[2]='0';
}else{
send[2]='1';
}
//strcpy(mes,send);

TCP_socket.Send(send,1000);
}


// メインカメラキャプチャ開始関数
BOOL CsampleDlg::CaptureStart(void)
{
HRESULT hResult; // 返り値の代入

CsampleDlg::ReleaseAll();
//WPICT = GetDlgItem(IDC_PIC2);//ピクチャーボックス★ミ

// フラグを見て、表示するピクチャーコントロール指定する
if (flg == 0x00) {
WPICT = GetDlgItem(IDC_PIC3);
} else {
WPICT = GetDlgItem(IDC_PIC4);
}


// 指定したピクチャコントロールの情報を取得する
WPICT->GetClientRect(WRect);
pDC=WPICT->GetDC();
pDC->SelectObject(&(WRgn));

// COM初期化
hResult = CoInitialize(NULL);
if( FAILED(hResult) ){ // エラー処理
AfxMessageBox("COMの初期化に失敗しました", MB_OK | MB_ICONSTOP );
return FALSE;
}
// フィルタグラフの生成
hResult = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder,
(void **)&pGraph);

if( FAILED(hResult) ){ // エラー処理
AfxMessageBox("グラブの生成失敗", MB_OK | MB_ICONSTOP );
return FALSE;
}

// システムデバイス列挙子の生成
hResult = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
IID_ICreateDevEnum,
(void **)&pDevEnum);
if( FAILED(hResult) ){ // エラー処理
AfxMessageBox("デバイス列挙子の生成失敗", MB_OK | MB_ICONSTOP );
return FALSE;
}
pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pClassEnum, 0);

// デバイスがあるかを調べる
if (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK){
// 最初のモニカをフィルタオブジェクトにバインドする
pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void **)&pSrc);
// デバイスをバインドするための資源を開放する
pMoniker->Release();
}
// デバイスを選択し終わったので、デバイスの列挙・選択の資源を解放する
pClassEnum->Release();
pDevEnum->Release();

pGraph->AddFilter(pSrc, L"Video Capture");

// キャプチャビルダの作成
hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2,
(void **)&pBuilder);
if( FAILED(hResult) ){ // エラー処理
AfxMessageBox("キャプチャビルダの生成失敗", MB_OK | MB_ICONSTOP );
return FALSE;
}

// グラブにビデオキャプチャフィルタをセットする
pBuilder->SetFiltergraph(pGraph);
hResult = pBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pSrc, NULL, NULL );
if( FAILED(hResult) ){
CsampleDlg::ReleaseAll();
return FALSE;
}
// 表示する画面の設定
hPicture = NULL;


if (flg == 0x00) {
GetDlgItem(IDC_PIC3, &hPicture);
} else {
GetDlgItem(IDC_PIC4, &hPicture);
}

pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
pVidWin->put_OwnerRelease();
pVidWin = NULL;
}

if( pSrc ){
pSrc->Release();
pSrc = NULL;
}

if( pMediaControl ){
pMediaControl->Release();
pMediaControl = NULL;
}

if( pBuilder ){
pBuilder->Release();
pBuilder = NULL;
}

if( pGraph ){
pGraph->Release();
pGraph = NULL;
}
}
// メインカメラキャプチャ停止関数
BOOL CsampleDlg::CaptureEnd(void)
{
HRESULT hResult; // 関数の返り値を代入

hResult = pMediaControl->Stop();
if( FAILED(hResult) ) {
return FALSE;
}

// 資源の解放
pVidWin->put_Visible(OAFALSE);
pVidWin->put_Owner(NULL);
CsampleDlg::ReleaseAll();

// COMの初期化
hResult = CoInitialize(NULL);
if( FAILED(hResult) ){
AfxMessageBox("COMライブラリ初期化失敗", MB_OK | MB_ICONSTOP );
return FALSE;
}

// COMの終了
CoUninitialize();
if( pDC ) {
ReleaseDC(pDC);
pDC = NULL;
}

return TRUE;
}

void CsampleDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CPaintDC dc(this); // 描画のデバイス コンテキスト
// TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。
// 画面フラグを変更する
if(LDownFlag==1){
CsampleDlg::CaptureEnd();
if (flg == 0x00) {
flg = 0x01;
} else {
flg = 0x00;
}
// 各カメラを起動する(表示画面が入れ替わる)
CsampleDlg::CaptureStart();
}

CDialog::OnLButtonDown(nFlags, point);
}

// 対象物認識
UINT Arm( LPVOID pParam )
{
LoadBMPFile(imgYUV1,MATO);//マトY読み込み
imgUV1=GetUVImgID(imgYUV1);//マトUV読み込み
//DispImg(imgYUV1);
bmpflg = FALSE;
while(1){

//画像取得
GetCamera(imgYUV);
IP_Binarize(imgYUV, imgDST, 120);

//while(ret1){
BurstCount+=1;
if(BurstCount==30){
if(BurstFlag==0){
state.Destroy();
state.Load(under_state_Burst0);
BurstFlag=1;
BurstCount=2;
}else{
BurstCount=2;
BurstFlag=0;
state.Destroy();
state.Load(under_state_Burst1);
}
Invalidate(FALSE); // 再描画するよう通知
}
}
}
if(SkinFlag==2 && BSPEED300){
status=0;
}
status+=1;

if( m_blInput.RefreshJoystickData() ){


int NumX;
int NumY;
int NumX1;
int NumY1;
int Turns;
NumX = m_blInput.GetJoystickAxisData( BLINP_X_ABS,0 );
NumY = m_blInput.GetJoystickAxisData( BLINP_Y_ABS,0 );
NumX1 = m_blInput.GetJoystickAxisData( BLINP_Z_ABS,0 );
NumY1 = m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE,0 );



if( m_blInput.GetJoystickButton( BLINP_2BUTTON, 0 ) == TRUE){
if(OnTimerflag==3){
m_message2 = "○";
CsampleDlg::Command(15);//○ボタン
OnTimerflag=1;
}
}else if( m_blInput.GetJoystickButton( BLINP_1BUTTON, 0 ) == TRUE ){
if(OnTimerflag!=2){
m_message2="ハンドオープン";
ArmOpen=0;
//Invalidate(FALSE); // 再描画するよう通知
//CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}
}else if( m_blInput.GetJoystickButton( BLINP_3BUTTON, 0 ) == TRUE){
if(OnTimerflag==3){
CsampleDlg::Command(16);//×ボタン
OnTimerflag=1;
}
}else if( m_blInput.GetJoystickButton( BLINP_4BUTTON, 0 ) == TRUE){
if(OnTimerflag==3){
m_message2="ハンドクローズ";
//CsampleDlg::Command(4);//□ボタン
ArmOpen=1;
OnTimerflag=1;
}
}else if( m_blInput.GetJoystickButton( BLINP_7BUTTON, 0 ) == TRUE ){
//L1 速度減少 目を覚ませシン
if(OnTimerflag==3){
CsampleDlg::Command(4);
OnTimerflag=1;
}
}else if( m_blInput.GetJoystickButton( BLINP_8BUTTON, 0 ) == TRUE ){
// R1 速度増加 逃げるな戦え!
if(OnTimerflag==3){
CsampleDlg::Command(1);
OnTimerflag=1;
}
}else if( m_blInput.GetJoystickButton( BLINP_6BUTTON, 0 ) == TRUE ){
//L2+R2 覚醒 あんたって人はーーーーー!!!!
if( m_blInput.GetJoystickButton( BLINP_5BUTTON, 0 ) == TRUE ){
if(OnTimerflag==3){
CsampleDlg::Command(6);
OnTimerflag=1;
}
}else{
if(OnTimerflag==3){
//ライトON
LightFlag=1;
light_mode(LightFlag);
under_state_mode(1);
state_mode(0);
Invalidate(FALSE);
BCommandflag=1;
CsampleDlg::Command(5);
OnTimerflag=1;
}
}

}else if(m_blInput.GetJoystickButton( BLINP_5BUTTON, 0 ) == TRUE ){
if(OnTimerflag==3){
//ライトOFF
LightFlag=0;
light_mode(LightFlag);
under_state_mode(1);
state_mode(0);
Invalidate(FALSE);
BCommandflag=1;
CsampleDlg::Command(5);
OnTimerflag=1;
}
}else if(m_blInput.GetJoystickButton( BLINP_9BUTTON, 0 ) == TRUE ){
//アームモード開始
if(Armflag==0){
CsampleDlg::Command(8);
ArmFlag=1;
}else{
ArmFlag=0;
}
}else if(m_blInput.GetJoystickButton( BLINP_12BUTTON, 0 ) == TRUE ){
//アーム開閉
if(OnTimerflag==3){
if(ArmFlag==1){
if(ArmOpen==0){
CsampleDlg::Command(13);
//ArmOpen=1;
}else{
CsampleDlg::Command(14);
//ArmOpen=0;
}

}
OnTimerflag=1;
}
////////スティック右
}else if((m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE, 0 ) >= (-32768">*1
&& (m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE, 0 ) < (-28000))){
m_message = "スティック右上";
if(ArmFlag==1){
if(OnTimerflag!=8){
CsampleDlg::Command(12);
OnTimerflag=8;
}
}
}else if*2 && (m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE, 0 ) > (8000))){
m_message = "スティック右下";
if(ArmFlag==1){
if(OnTimerflag!=7){
CsampleDlg::Command(11);
OnTimerflag=7;
}
}
}else if*3 && (m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) > (28000))){
//m_message = "スティック左下大";
JoySpeedflag1=7;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=4;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=0;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;

}

}else if*4 && (NumX <= (-2500))){
m_message = "スティック左左大";
if(OnTimerflag!=4){
CsampleDlg::Command(3);
OnTimerflag=4;
}
}else if*5 && (NumX > (28000))){
m_message = "スティック左右大";
//右旋回
if(OnTimerflag!=5){
CsampleDlg::Command(7);
OnTimerflag=5;
}

}else{
////////スティック左
if*6 && (NumY <= (-3000))){
//m_message = "スティック左上小1";//0
JoySpeedflag1=0;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=1;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=1;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}
}else if*7 && (NumY < (-15000))){
//m_message = "スティック左上小2";//1
JoySpeedflag1=1;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=2;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=1;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}

}else if*8 && (NumY <= (-20500))){
//m_message = "スティック左上小3";

JoySpeedflag1=2;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=3;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=1;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}

}else if*9 && (NumY < (-31000))){
//m_message = "スティック左上大";
JoySpeedflag1=3;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=4;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=1;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;

}

}else if*10 && (m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) >= (3000))){
//m_message = "スティック左下小1";
JoySpeedflag1=4;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=1;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=0;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;

}
}else if*11 && (m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) >= (10000))){
//m_message = "スティック左下小2";
JoySpeedflag1=5;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=2;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=0;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}

}else if*12 && (m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) >= (17500))){
//m_message = "スティック左下小3";
JoySpeedflag1=6;
if(JoySpeedflag1!=JoySpeedflag2){
BSPEED=3;
JoySpeedflag2=JoySpeedflag1;
Joystickflag=0;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;

}

}else{

//十字キー 上:前進 下:後進 右:右旋回 左:左旋回
switch(m_blInput.GetJoystickPOVData( BLINP_1POV, 0 ))
{
case 0:
//↑
if(StartFlag==1){
if(OnTimerflag!=2){
Joystickflag=1;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}
break;
}else{

break;
}

case -1://増設
m_message = "おされてねーよ";
StartFlag=1;
if(OnTimerflag!=3){
if(OnTimerflag==1){
//img9.Destroy();
//img9.Load(COMMAND);
OnTimerflag=3;
}else if(OnTimerflag!=0){
CsampleDlg::Command(5);
OnTimerflag=3;
}else{

}
}
break;
case 27000:
//m_message = "左";
if(OnTimerflag!=4){
CsampleDlg::Command(3);
OnTimerflag=4;
}

break;
case 18000:
//↓
if(OnTimerflag!=2){
Joystickflag=0;
CsampleDlg::Command(2);//△ボタン
OnTimerflag=2;
}
break;
case 9000:
//右旋回
if(OnTimerflag!=5){
CsampleDlg::Command(7);
OnTimerflag=5;

}
////m_message = "右";
break;
}
}

}
//}
}

Invalidate(FALSE); // 再描画するよう通知

CDialog::OnTimer(nIDEvent);
}
// 画像表示関数
void CsampleDlg::disp_pict(void)
{
CFile file;
BITMAPINFOHEADER myBmpInfoHdr;

// 画像ファイルを開く
if(!file.Open(filename,CFile::modeRead|CFile::typeBinary)){
return;
}

//ファイルヘッダ部とインフォヘッダ部を読み込む
file.Read(&m_BmpFileHdr,sizeof(BITMAPFILEHEADER));
file.Read(&myBmpInfoHdr,sizeof(BITMAPINFOHEADER));

//前回の画像イメージをいったん解放
if(m_BmpInfo) delete m_BmpInfo;

// m_BmpInfoに画像をいえれるためのサイズを確保する
if(myBmpInfoHdr.biBitCount >= 16){
m_BmpInfo = (LPBITMAPINFO)new char[sizeof(BITMAPINFO)];
}else{
m_BmpInfo = (LPBITMAPINFO)new char[sizeof(BITMAPINFOHEADER) + (1<bmiColors,(1<bmiHeader = myBmpInfoHdr;

//ファイル内のビットマップ実データを位置に合わせる
file.Seek(m_BmpFileHdr.bfOffBits,CFile::begin);

if(m_BmpImage) delete m_BmpImage;

//実画像データ分のバイト数を確保
//bfsize ビットマップファイル全サイズ
//bfOffBits 先頭にあるヘッダ情報サイズ
m_BmpImage = new char[m_BmpFileHdr.bfSize - m_BmpFileHdr.bfOffBits];

//ビットマップ実データを読み込み格納
file.Read(m_BmpImage,m_BmpFileHdr.bfSize - m_BmpFileHdr.bfOffBits);
file.Close();

// OnPaint関数を呼び出す(描画メッセージを送信)
Invalidate(FALSE);

}
void CsampleDlg::DoDataExchange(CDataExchange* pDX)
{
// TODO : ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。

CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PIC3, m_pict1);
DDX_Control(pDX, IDC_PIC4, m_pict3);

}



HBRUSH CsampleDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor){
case CTLCOLOR_DLG:
return (HBRUSH) m_brDlg;
default:
break;
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);


// TODO : 既定値を使用したくない場合は別のブラシを返します。
return hbr;
}

void CsampleDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO : ここにメッセージ ハンドラ コードを追加します。
}

*1:OAHWND)hPicture); pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS); pVidWin->SetWindowPosition(0, 0, WRect.right, WRect.bottom); pVidWin->put_BackgroundPalette(OATRUE); // キャプチャ開始 hResult = pMediaControl->Run(); if( FAILED(hResult) ){ // エラー処理 pVidWin->put_Visible(OAFALSE); pVidWin->put_Owner(NULL); CsampleDlg::ReleaseAll(); AfxMessageBox("再生失敗", MB_OK | MB_ICONSTOP ); return FALSE; } return TRUE; } // DIRECT SHOWで利用した資源を開放する void CsampleDlg::ReleaseAll(void) { /* 各資源を生成したかを調べて、   生成した場合は開放・初期化する */ if( pVidWin ){ pVidWin->Release(); pVidWin = NULL; } if( pSrc ){ pSrc->Release(); pSrc = NULL; } if( pMediaControl ){ pMediaControl->Release(); pMediaControl = NULL; } if( pBuilder ){ pBuilder->Release(); pBuilder = NULL; } if( pGraph ){ pGraph->Release(); pGraph = NULL; } } // メインカメラキャプチャ停止関数 BOOL CsampleDlg::CaptureEnd(void) { HRESULT hResult; // 関数の返り値を代入 hResult = pMediaControl->Stop(); if( FAILED(hResult) ) { return FALSE; } // 資源の解放 pVidWin->put_Visible(OAFALSE); pVidWin->put_Owner(NULL); CsampleDlg::ReleaseAll(); // COMの初期化 hResult = CoInitialize(NULL); if( FAILED(hResult) ){ AfxMessageBox("COMライブラリ初期化失敗", MB_OK | MB_ICONSTOP ); return FALSE; } // COMの終了 CoUninitialize(); if( pDC ) { ReleaseDC(pDC); pDC = NULL; } return TRUE; } void CsampleDlg::OnLButtonDown(UINT nFlags, CPoint point) { CPaintDC dc(this); // 描画のデバイス コンテキスト // TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 // 画面フラグを変更する if(LDownFlag==1){ CsampleDlg::CaptureEnd(); if (flg == 0x00) { flg = 0x01; } else { flg = 0x00; } // 各カメラを起動する(表示画面が入れ替わる) CsampleDlg::CaptureStart(); } CDialog::OnLButtonDown(nFlags, point); } // 対象物認識 UINT Arm( LPVOID pParam ) { LoadBMPFile(imgYUV1,MATO);//マトY読み込み imgUV1=GetUVImgID(imgYUV1);//マトUV読み込み //DispImg(imgYUV1); bmpflg = FALSE; while(1){ //画像取得 GetCamera(imgYUV); IP_Binarize(imgYUV, imgDST, 120); //while(ret<13){ // // 膨張 // IP_Dilation4(imgDST,imgLabel); // DispImg(imgLabel); // IP_Copy(imgLabel,imgDST); // ret = ret + 1; //} //for(flagE=0;flagE1){ BurstCount+=1; if(BurstCount==30){ if(BurstFlag==0){ state.Destroy(); state.Load(under_state_Burst0); BurstFlag=1; BurstCount=2; }else{ BurstCount=2; BurstFlag=0; state.Destroy(); state.Load(under_state_Burst1); } Invalidate(FALSE); // 再描画するよう通知 } } } if(SkinFlag==2 && BSPEED<800){ if(LturnFlag==1 || RturnFlag==2){ TurnCount=TurnCount+2; if(LightFlag!=1){ switch(TurnCount){ case 29: state.Destroy(); state.Load(under_state_lturn1); break; case 30: state.Destroy(); state.Load(under_state_Rturn1); break; case 59: state.Destroy(); state.Load(under_state_lturn2); break; case 60: state.Destroy(); state.Load(under_state_Rturn2); break; case 89: state.Destroy(); state.Load(under_state_lturn3); break; case 90: state.Destroy(); state.Load(under_state_Rturn3); break; case 119: state.Destroy(); state.Load(under_state_lturn4); TurnCount=1; break; case 120: state.Destroy(); state.Load(under_state_Rturn4); TurnCount=2; break; } }else{ switch(TurnCount){ case 29: state.Destroy(); state.Load(under_state_lturn1_light); break; case 30: state.Destroy(); state.Load(under_state_Rturn1_light); break; case 59: state.Destroy(); state.Load(under_state_lturn2_light); break; case 60: state.Destroy(); state.Load(under_state_Rturn2_light); break; case 89: state.Destroy(); state.Load(under_state_lturn3_light); break; case 90: state.Destroy(); state.Load(under_state_Rturn3_light); break; case 119: state.Destroy(); state.Load(under_state_lturn4_light); TurnCount=1; break; case 120: state.Destroy(); state.Load(under_state_Rturn4_light); TurnCount=2; break; } } Invalidate(FALSE); // 再描画するよう通知 } } //電圧測定 if(status == 300 && LDownFlag==1){ CsampleDlg::Command(10); status=0; }else if(status>300){ status=0; } status+=1; if( m_blInput.RefreshJoystickData() ){ int NumX; int NumY; int NumX1; int NumY1; int Turns; NumX = m_blInput.GetJoystickAxisData( BLINP_X_ABS,0 ); NumY = m_blInput.GetJoystickAxisData( BLINP_Y_ABS,0 ); NumX1 = m_blInput.GetJoystickAxisData( BLINP_Z_ABS,0 ); NumY1 = m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE,0 ); if( m_blInput.GetJoystickButton( BLINP_2BUTTON, 0 ) == TRUE){ if(OnTimerflag==3){ m_message2 = "○"; CsampleDlg::Command(15);//○ボタン OnTimerflag=1; } }else if( m_blInput.GetJoystickButton( BLINP_1BUTTON, 0 ) == TRUE ){ if(OnTimerflag!=2){ m_message2="ハンドオープン"; ArmOpen=0; //Invalidate(FALSE); // 再描画するよう通知 //CsampleDlg::Command(2);//△ボタン OnTimerflag=2; } }else if( m_blInput.GetJoystickButton( BLINP_3BUTTON, 0 ) == TRUE){ if(OnTimerflag==3){ CsampleDlg::Command(16);//×ボタン OnTimerflag=1; } }else if( m_blInput.GetJoystickButton( BLINP_4BUTTON, 0 ) == TRUE){ if(OnTimerflag==3){ m_message2="ハンドクローズ"; //CsampleDlg::Command(4);//□ボタン ArmOpen=1; OnTimerflag=1; } }else if( m_blInput.GetJoystickButton( BLINP_7BUTTON, 0 ) == TRUE ){ //L1 速度減少 目を覚ませシン if(OnTimerflag==3){ CsampleDlg::Command(4); OnTimerflag=1; } }else if( m_blInput.GetJoystickButton( BLINP_8BUTTON, 0 ) == TRUE ){ // R1 速度増加 逃げるな戦え! if(OnTimerflag==3){ CsampleDlg::Command(1); OnTimerflag=1; } }else if( m_blInput.GetJoystickButton( BLINP_6BUTTON, 0 ) == TRUE ){ //L2+R2 覚醒 あんたって人はーーーーー!!!! if( m_blInput.GetJoystickButton( BLINP_5BUTTON, 0 ) == TRUE ){ if(OnTimerflag==3){ CsampleDlg::Command(6); OnTimerflag=1; } }else{ if(OnTimerflag==3){ //ライトON LightFlag=1; light_mode(LightFlag); under_state_mode(1); state_mode(0); Invalidate(FALSE); BCommandflag=1; CsampleDlg::Command(5); OnTimerflag=1; } } }else if(m_blInput.GetJoystickButton( BLINP_5BUTTON, 0 ) == TRUE ){ if(OnTimerflag==3){ //ライトOFF LightFlag=0; light_mode(LightFlag); under_state_mode(1); state_mode(0); Invalidate(FALSE); BCommandflag=1; CsampleDlg::Command(5); OnTimerflag=1; } }else if(m_blInput.GetJoystickButton( BLINP_9BUTTON, 0 ) == TRUE ){ //アームモード開始 if(Armflag==0){ CsampleDlg::Command(8); ArmFlag=1; }else{ ArmFlag=0; } }else if(m_blInput.GetJoystickButton( BLINP_12BUTTON, 0 ) == TRUE ){ //アーム開閉 if(OnTimerflag==3){ if(ArmFlag==1){ if(ArmOpen==0){ CsampleDlg::Command(13); //ArmOpen=1; }else{ CsampleDlg::Command(14); //ArmOpen=0; } } OnTimerflag=1; } ////////スティック右 }else if((m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE, 0 ) >= (-32768

*2:m_blInput.GetJoystickAxisData( BLINP_Z_ROTATE, 0 ) <= (32768

*3:m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) <= (32768

*4:NumY > (-5000) && NumX >= (-32768

*5:NumY > (-5000) && NumX <= (32768

*6:NumY >= (-15000

*7:NumY >= (-20500

*8:NumY >= (-31000

*9:NumY >= (-32768

*10:m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) <= (10000

*11:m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) <= (17500

*12:m_blInput.GetJoystickAxisData( BLINP_Y_ABS, 0 ) <= (28000