十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
基于51单片机运用两个单片机控制小车前进,一个控制转向,一个控制后轮前进,两个单片机没有联系各自工作。21ic电子技术网站上有很多源码,可以找找看!
创新互联一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以网站设计制作、成都网站建设、移动互联产品、营销型网站建设服务为核心业务。10年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
别想那么复杂。
首先,你把检测黑线的传感器就当一普通开关。因为,当照射在黑线上时,光线反射能力弱,输出低电平。照在黑线外,则输出高电平。只有高低两种电平,所以,你只需要把它当一个普通开关看待。
然后,既然是普通开关,写代码时只需要位声明以及设置gpio为双向或强拉模式,51单片机都不用设置gpio。
最后,程序里,检测到高电平然后io口电平取反就行。
简单的写的话不会区别偏离黑线距离远近的,复杂点儿的话会分区编程,简单版如下:
void turn_left()
{
P1.0 = 0; //左前轮
P1.1 = 1; //右前轮
P1.2 = 0; //左后轮
P1.3 = 1; //右后轮
}
... ...
unsigned char judge()
{
switch(P2 0x??)
case 0x??:
{
break;
}
... ...
return 某变量(用于选择拐弯方向程序)
}
转弯比较简单,就是一个轮转,另一个不转达到转弯目的,你也可以用速度高低来控制,自己DIY就行。
你在中断里面把flag=1;进入主函数后flag一直保持1,而你中断的判断条件是if(flag==0P32==0),它就进不了中断了。你要想这么写的话可以改成这样看看:
void INT_0() interrupt 0
{
flag==0;
if(flag==0)
{
P2=0x00; //小车停车
delayms(2000); //延时两秒
flag=1;
}
}
或者干脆把if判断去了得了,(仅代表自己看法,我也不怎么懂啊)。自己多调试调试,肯定能做好的。
1、这不是一个完整的C程序,仅仅是一个延时函数,标准的C程序必须包括main函数。
2、t是函数的参数,在调用的时候,将t值传入,这个值就相当于你说的初值了。
3、3个while可以看出,这是3层循环,所以总的循环次数是j*I*t,即乘数关系。因为只使用1层或2层循环的话,循环次数受char类型的限制,所以,必须使用3层循环。
4、这个函数的作用应当是控制小车的速度。
胶带的宽度一定的话:
四个传感器一字排列的情况最简单:
按1234号传感器命名,照在胶带上状态位为A,否则为a.
直线正常行走时,23号持续为A,14号持续为a.
分析开始右转的逻辑:
2号变a,继续直线行走,直到4号变A,根据24号间的距离和小车在这段时间内行驶的距离计算出转动角度(这就是动态平面几何问题了,自己画图解一下,注意转弯时候前后中心点的轨迹,胶带宽度是关键,得到的角度不会也不必太精确。这里我只讨论逻辑),然后以比计算结果稍大(目的是确保能让2恢复状态A)的转动角度开始转弯,等到2和3都恢复状态A,小车变回直线行走,等到2号重新变a,小车再恢复到原先的转动角度……后面一直循环就行了
直线上如果车子前进方向倾斜,和转弯一样,下面以车子向右倾斜为例分析:
会出现3号变a的情况,继续保持直线行走,直到1号变A,计算出小车在这个过程中行进距离,结合胶带宽度,1和3号间的距离,就可以算出偏离的角度然后决定转动角度。后面具体调整和过弯道一样。
然后我来吐槽为什么要用labview,你是想着拿着笔记本进行无线操控么 - -,嵌入式的labview编程现在还不成熟好吧~