基于MSPM0G3507的双车跟随系统

这是2022年的省赛题,难度不是很高,但真正做起来的时候发现没那么简单,或者说,想用简单的一些外设实现所有题目比较考验代码功底。

总体思路就是:通过灰度传感器所传输的数据进行pid调参,能够达到高速巡线并且不丢线的情况。然后再通过按键设置期望速度以及模式,蓝牙通信方面只需要发送对应的指令就可以实现不同题目的切换。我认为的难点有几个:如何积累检测停车位的数量,如何平稳停车,如何检测岔路口并且能够进行转换小车状态。

我用的是牛眼轮加两个直流减速电机加一个8路灰度加一个蓝牙模块,显示方面用的7针的OLED显示屏(硬件SPI驱动)。最终实现了高速巡线以及通信的功能,由于时间有限,使用的超声波模块并没有再加入算法进行速度的矫正。

代码过多,就不展示了,可读性不是很高。欢迎交流与讨论

嗯...............

决定分享一段代码,这是第三问的逻辑,其实我认为第三问才是最难的,第四问比较考验硬件。

大体的思路就是不断地检验标志位,通过标志位的累加,发送对应的指令

			if(key.flag==1&&key.Subject_flag==2)
			{
				while((get_sensor()<2)&&n==0&&key.flag==1);
				while((get_sensor()>2)&&n==0&&key.flag==1)
				{	
							uart2_send_char('a');
							n=1;
				}
				while((get_sensor()<2)&&n==1&&key.flag==1); 
				while((get_sensor()<2)&&n==1&&key.flag==1)
				{
						uart2_send_char('c');//让后车走内圈的指令,如果后车此时接到这条指令并且get_sensor()<4就给一个左转的速度
						if(get_sensor()<4) 
						{
							Load_Motor_PWM(pid.Car_speed,pid.Car_speed);
							key.flag=0;
						}
						while(get_sensor()>5);
						while(get_sensor()>5&&key.flag==0)
						{
							n=2;
						}
				}
				while((get_sensor()<2)&&n==2&&key.flag==1);//当后车完成内圈超车后让后车走外圈
				while((get_sensor()<2)&&n==2&&key.flag==1)
				{
					uart2_send_char('d');//发送一条走外圈的指令 if(get_sensor()<4) Load_Motor_PWM(pid.Car_speed,pid.Car_speed);
					if(get_sensor()<4) Load_Motor_PWM(0,pid.Car_speed);
					n=3;
				}
				while(get_sensor()<2&&n==3)
				{
					uart2_send_char('b');
			  	key.flag=0;
				}
			}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值