- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式实验智能小车避障上位机手柄控制
嵌入式实验报告小车避障+上位机李晨,颜文杰2012/6/7小车的功能及部件小车能够实现的主要功能有自动避障和上位机两个方面。避障主要是依靠传感器检测小车与前方的距离,然后根据算法的程序,自动选择最近的方式避障。上位机则是依靠电脑与小车通过无线串口相连,利用游戏手柄控制上位机的指令对小车进行前进、后退、左转、右转、加速等控制,从而实现用手柄对小车的无线遥控。传感器的分布直接的影响到了小车的自动避障功能,因此,为达到最优的效果,将传感器如下图的分布:前面两个用来判断小车与障碍物所成的角度,左右两边用来使小车与边界有一定的距离。为实现上位机的无线遥控功能,将小车加上无线模块与游戏手柄。小车功能的实现小车的功能已经在上部分说明了,但是为实现两者功能的转化,我们采用了使用上位机发送指令从而改变小车工作模式的方法。下图为上位机工作界面:由上图可知,小车与电脑通过无线模块相连时,通过点选按钮“控制”和“自动避障”,可以使小车实现两种功能的切换。具体实现如下:通过串口中断,在计算机发送指令时改变flag_mode_choice的值,改变主程序中运行的不同模块,从而改变功能。while (1) { while (flag_mode_choice==0) { 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_Res0x520)Turn_Right(); else if(ADC_Ch0_Res0x520)Turn_Left(); if(ADC_Ch2_Res0x520||ADC_Ch1_Res0x520) { if(ADC_Ch2_ResADC_Ch1_Res) Turn_Right(); else if(ADC_Ch2_ResADC_Ch1_Res) Turn_Left(); if(ADC_Ch2_Res0xAAADC_Ch1_Res0xAA) Backward_Cmd(); } Delay(0XAFFFF); } while (flag_mode_choice==1) { if(RxBuffer[1]==0x11) Forward_Cmd(); else if (RxBuffer[1]==0xCC) { now_speed=100;Forward_Cmd();} else if (RxBuffer[1]==0x22) Backward_Cmd(); else if (RxBuffer[1]==0x1A) Forward_Accelerate_Cmd(); else if (RxBuffer[1]==0x1B) Forwar_non_Accelerate_Cmd(); else if (RxBuffer[1]==0x33) Turn_Right(); else if (RxBuffer[1]==0x44) Turn_Left(); else Break_Cmd(); } }利用以下的串口中断实现功能转换:extern u8 RxBuffer[6];extern int flag_mode_choice;void USART1_IRQHandler(void){ if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ITConfig(USART1,USART_IT_RXNE,DISABLE); /* Read one byte from the receive data register */ while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)) ; RxBuffer[0] = USART_ReceiveData(USART1); while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)) ; RxBuffer[1] = USART_ReceiveData(USART1); if (RxBuffer[0] == 0xEA) flag_mode_choice=0;
文档评论(0)