Turn_Right();
elseif(ADC_Ch2_Res>ADC_Ch1_Res)
Turn_Left();
if(ADC_Ch2_Res<0xAA&&ADC_Ch1_Res<0xAA)
Backward_Cmd();
2.上位机功能实现
上位机的界面是由VisualC++6.0中的MFC编写的。
其中有打开串口,发送显示,接受显示等功能,也可实现小车的功能切换,可以直接支持游戏手柄的控制。
使用无线的控制时,波特率为9600,按钮的代码段如下所示:
//避障模式
voidCSerialPortTestDlg:
:
OnButtonSend()
{
Buf[0]=0xEA;
Buf[1]=0xAA;
//Buf[2]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);//发送数据
}
voidCSerialPortTestDlg:
:
OnChangeEditSendmsg()
{
//TODO:
IfthisisaRICHEDITcontrol,thecontrolwillnot
//sendthisnotificationunlessyouoverridetheCDialog:
:
OnInitDialog()
//functionandcallCRichEditCtrl().SetEventMask()
//withtheENM_CHANGEflagORedintothemask.
//TODO:
Addyourcontrolnotificationhandlercodehere
}
//上位机控制模式
voidCSerialPortTestDlg:
:
OnButtonSend2()
{
Buf[0]=0xEB;
Buf[1]=0xAA;
//Buf[2]=0xAA;
//Buf[3]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}
//前进//
voidCSerialPortTestDlg:
:
OnButtonSend6()
{
Buf[0]=0xEB;
Buf[1]=0x11;
//Buf[2]=0xAA;Buf[3]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}
//后退
voidCSerialPortTestDlg:
:
OnButtonSend4()
{
Buf[0]=0xEB;
Buf[1]=0x22;
//Buf[2]=0xAA;Buf[3]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}
//左转
voidCSerialPortTestDlg:
:
OnButtonSend3()
{
Buf[0]=0xEB;
Buf[1]=0x33;
//Buf[2]=0xAA;Buf[3]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}
//右转
voidCSerialPortTestDlg:
:
OnButtonSend5()
{
Buf[0]=0xEB;
Buf[1]=0x44;
//Buf[2]=0xAA;Buf[3]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}
//手柄控制
LRESULTCSerialPortTestDlg:
:
WindowProc(UINTmessage,WPARAMwParam,LPARAMlParam)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
joyx=LOWORD(lParam)/2048;
joyy=HIWORD(lParam)/2048;
//WORDjoyx,joyy;
if((Buf[0]==0xEB)&&(Buf[1]==0x44)&&(joyx<=20&&joyx>=12)){
Buf[0]=0xEB;Buf[1]=0x11;
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
//Sleep(TIMEDELAY);
}elseif((Buf[0]==0xEB)&&(Buf[1]==0x33)&&(joyx<=20&&joyx>=12)){
Buf[0]=0xEB;Buf[1]=0x11;
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}elseif((Buf[0]==0xEB)&&(Buf[1]==0x22)&&(joyy<=25&&joyy>=12)){
Buf[0]=0xEB;Buf[1]=0x11;
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
}
if(message==MM_JOY1MOVE)
{
joyx=LOWORD(lParam)/2048;
joyy=HIWORD(lParam)/2048;//如果游戏杆在中心位置的左边,移动光标到左边。
反之亦然
if(joyx<=12)
{
//SetDlgItemText(IDC_STATIC1,"左转");
Buf[0]=0xEB;Buf[1]=0x44;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}elseif(joyx>=20)
{
Sleep(5);
//SetDlgItemText(IDC_STATIC1,"右转");
Buf[0]=0xEB;Buf[1]=0x33;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}elseif(joyy<=12)//如果游戏杆在中心位置的下边,移动光标到下边。
反之亦然
{
//SetDlgItemText(IDC_STATIC1,"快速前进");
Buf[0]=0xEB;Buf[1]=0x11;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}
elseif(joyy>=25)
{
//SetDlgItemText(IDC_STATIC1,"后退");
Buf[0]=0xEB;Buf[1]=0x22;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}if(wParam&JOY_BUTTON1)
{
Sleep(5);
//SetDlgItemText(IDC_STATIC1,"1");//前进
Buf[0]=0xEA;Buf[1]=0xAA;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}elseif(wParam&JOY_BUTTON2)
{
Sleep(5);
//SetDlgItemText(IDC_STATIC1,"2");//后退
}elseif(wParam&JOY_BUTTON3)
{
Sleep(5);
//SetDlgItemText(IDC_STATIC1,"3");
Buf[0]=0xEB;
Buf[1]=0xAA;
//TODO:
Addyourcontrolnotificationhandlercodehere
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
//UpdateData(TRUE);//读入编辑框中的数据
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}
elseif(wParam&JOY_BUTTON4)
{
Sleep(5);
//SetDlgItemText(IDC_STATIC1,"4");
}
elseif(wParam&JOY_BUTTON1CHG)
{
//SetDlgItemText(IDC_STATIC1,"select");//标准避障模式
Buf[0]=0xEA;Buf[1]=0xCC;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}elseif(wParam&JOY_BUTTON2CHG)
{
//SetDlgItemText(IDC_STATIC1,"start");//标准上位机控制模式
Buf[0]=0xEB;Buf[1]=0xCC;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}elseif(wParam&JOY_BUTTON5)
{
//SetDlgItemText(IDC_STATIC1,"5");
}
elseif(wParam&JOY_BUTTON6)
{
//SetDlgItemText(IDC_STATIC1,"6");
}elseif(wParam&JOY_BUTTON7)//select
{
//SetDlgItemText(IDC_STATIC1,"7");
Buf[0]=0xEB;Buf[1]=0x1A;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}elseif(wParam&JOY_BUTTON8)//select
{
//SetDlgItemText(IDC_STATIC1,"8");
Buf[0]=0xEB;Buf[1]=0x1B;
//if(!
m_bSerialPortOpened)return;//检查串口是否打开
m_strEditSendMsg=(CString)Buf;
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);
Sleep(TIMEDELAY);
}
}
returnCDialog:
:
WindowProc(message,wParam,lParam);
}