嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx

上传人:b****8 文档编号:22925870 上传时间:2023-02-06 格式:DOCX 页数:17 大小:373.60KB
下载 相关 举报
嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx_第1页
第1页 / 共17页
嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx_第2页
第2页 / 共17页
嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx_第3页
第3页 / 共17页
嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx_第4页
第4页 / 共17页
嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx

《嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

嵌入式实验智能小车避障+上位机手柄控制Word格式文档下载.docx

ADC_Ch0_Res=ADC_RegularConvertedValueTab[0]-ADC_Calibration_DR;

ADC_Ch1_Res=ADC_RegularConvertedValueTab[1]-ADC_Calibration_DR;

ADC_Ch2_Res=ADC_RegularConvertedValueTab[2]-ADC_Calibration_DR;

ADC_Ch3_Res=ADC_RegularConvertedValueTab[3]-ADC_Calibration_DR;

if(RxBuffer[1]==0xCC)now_speed=100;

Forward_Cmd();

if(ADC_Ch3_Res<

0x520)Turn_Right();

elseif(ADC_Ch0_Res<

0x520)Turn_Left();

if(ADC_Ch2_Res<

0x520||ADC_Ch1_Res<

0x520)

{

ADC_Ch1_Res)

Turn_Right();

elseif(ADC_Ch2_Res>

Turn_Left();

0xAA&

&

ADC_Ch1_Res<

0xAA)

Backward_Cmd();

}

Delay(0XAFFFF);

}

while(flag_mode_choice==1){

if(RxBuffer[1]==0x11)

elseif(RxBuffer[1]==0xCC)

{now_speed=100;

Forward_Cmd();

}

elseif(RxBuffer[1]==0x22)

elseif(RxBuffer[1]==0x1A)

Forward_Accelerate_Cmd();

elseif(RxBuffer[1]==0x1B)

Forwar_non_Accelerate_Cmd();

elseif(RxBuffer[1]==0x33)

elseif(RxBuffer[1]==0x44)

elseBreak_Cmd();

利用以下的串口中断实现功能转换:

externu8RxBuffer[6];

externintflag_mode_choice;

voidUSART1_IRQHandler(void)

{

if(USART_GetITStatus(USART1,USART_IT_RXNE)!

=RESET)

USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);

/*Readonebytefromthereceivedataregister*/

while(!

USART_GetFlagStatus(USART1,USART_FLAG_RXNE));

RxBuffer[0]=USART_ReceiveData(USART1);

RxBuffer[1]=USART_ReceiveData(USART1);

if(RxBuffer[0]==0xEA)

flag_mode_choice=0;

if(RxBuffer[0]==0xEB)

flag_mode_choice=1;

/*CleartheUSART1Receiveinterrupt*/

USART_ClearITPendingBit(USART1,USART_IT_RXNE);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

1.避障功能的实现

为实现小车的避障功能,使小车前面两个传感器的值相比较,若其中一个大于另一个,则向偏大的方向转弯,反之亦然。

程序实现如下:

ADC_Ch0_Res=ADC_RegularConvertedValueTab[0]-ADC_Calibration_DR;

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);

//发送数据

OnChangeEditSendmsg()

IfthisisaRICHEDITcontrol,thecontrolwillnot

//sendthisnotificationunlessyouoverridetheCDialog:

OnInitDialog()

//functionandcallCRichEditCtrl().SetEventMask()

//withtheENM_CHANGEflagORedintothemask.

//上位机控制模式

OnButtonSend2()

Buf[0]=0xEB;

//Buf[3]=0xAA;

//前进//

OnButtonSend6()

Buf[1]=0x11;

Buf[3]=0xAA;

//后退

OnButtonSend4()

Buf[1]=0x22;

//左转

OnButtonSend3()

Buf[1]=0x33;

//右转

OnButtonSend5()

Buf[1]=0x44;

//手柄控制

LRESULTCSerialPortTestDlg:

WindowProc(UINTmessage,WPARAMwParam,LPARAMlParam)

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)&

}elseif((Buf[0]==0xEB)&

(Buf[1]==0x22)&

(joyy<

=25&

joyy>

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_strEditSendMsg=(CString)Buf;

m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);

Sleep(TIMEDELAY);

}elseif(joyx>

=20)

Sleep(5);

右转"

Buf[1]=0x33;

}elseif(joyy<

=12)//如果游戏杆在中心位置的下边,移动光标到下边。

快速前进"

}

elseif(joyy>

=25)

{

后退"

Buf[1]=0x22;

}if(wParam&

JOY_BUTTON1)

1"

//前进

Buf[0]=0xEA;

Buf[1]=0xAA;

}elseif(wParam&

JOY_BUTTON2)

2"

}elseif(wParam&

JOY_BUTTON3)

3"

Buf[1]=0xAA;

//TODO:

//UpdateData(TRUE);

}

elseif(wParam&

JOY_BUTTON4)

4"

elseif(wParam&

JOY_BUTTON1CHG)

select"

//标准避障模式

Buf[1]=0xCC;

}elseif(wParam&

JOY_BUTTON2CHG)

start"

//标准上位机控制模式

JOY_BUTTON5)

5"

elseif(wParam&

JOY_BUTTON6)

6"

JOY_BUTTON7)//select

7"

Buf[1]=0x1A;

JOY_BUTTON8)//select

8"

Buf[1]=0x1B;

returnCDialog:

WindowProc(message,wParam,lParam);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1