三个问题:
1 你的flag没有初始化。
2 while(flag!=1){}中的代码有些问题。有几处应加上{ },给你改了一下:
while(flag!=1)
{
if(a5==0)
qianjin();
else
{ if(a4==0)
zuozhuan();
else
{ if(a6==0)
youzhuan();
else
flag=1;
}
}
}
3 为什么不在最外层设置大循环?
我也是初次做小车
上面的是我做玩后的一些见解
你这个可以这样
你的小车每到一个分岔口(“T”或者“十”型路口)就随机选择一个寻迹方向(路线),并且把第一个寻迹值保存起来(就是记住这次小车是往哪里走的,防止下次走重复的路)。
小车走下去会有2种情况:
1,小车此次走的路线正确 继续前走,值到下一个路口
2,小车走了一段路后没路了,又分为2种情况:
(1),小车走错路了,得退回去,这时候小车可以后退寻迹,直到返回分岔口,再重复上面过程(注意,此时小车选择路线时要和前面保存起来的值进行对比,不可以再走小车前面走过的错路了,并且还得把这次跑的方向保存,下面小车如果在这个点在此返回了,小车选择路线时就要排除上面2次的路线了,以此类推)
(2),小车到终点了,我看了你们的跑道情况,终点前面有2个断点,可以利用这个区分小车是到了终点还是跑错路了
程序可能有点复杂,祝你们成功
part1: 用一路led照亮地面,左中右三路红外传感看反光。根据反光3'bxxx写个mealy状态机。
9种状态3‘zzz,3'b000~3'b111 根据后8种状态的64种变化,输出前进还是后退,速度,方向等。
3‘b111 -> 3'b111: 在线上, DIR=2'b00; RUN=4, 快进;
3'b111 -> 3'b011: 小弯左偏, DIR=2'b10; RUN=2, 慢进;
3'b111 -> 3'b110:
3'b111 -> 3''b001: 大弯左偏, DIR=2'b10; RUN=1, 低速;
3'b111 -> 3'b000: >90度的急弯, 跑丢了: RUN=1, DIR=2'b11, REV=1倒回去找回路线。
3'b000 - > 3'b001:
3'b001 ->
default:
Part2:
根据REV确定步进电机的正转还是反转,根据DIR产生脉冲序列,根据RUN产生脉冲频率。
主要还是状态解析能力,参考<异步时序电路设计>之mealy,输出跟当前态和历史态都相关。
>
以上就是关于下面一段c语言代码驱动小车实现三路循迹,停车5秒,壁障,寻光,但是下载到单片机中,驱动小车存在问题。全部的内容,包括:下面一段c语言代码驱动小车实现三路循迹,停车5秒,壁障,寻光,但是下载到单片机中,驱动小车存在问题。、寻迹小车后退过程中继续循迹、用Verilog控制智能循迹小车的代码怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)