标题:
单片机巡线小车程序到正方形哪里就会停,走不到终点,为什么?
[打印本页]
作者:
shuaizuyun
时间:
2018-11-30 17:00
标题:
单片机巡线小车程序到正方形哪里就会停,走不到终点,为什么?
哪位大神可以告诉我,后边该怎么写。现在写的只可以巡线,到正方形哪里就会停,走不到终点,应该怎样改程序啊?
这个是程序。
3.PNG
(251.32 KB, 下载次数: 59)
下载附件
2018-11-30 16:57 上传
#include<reg52.h>//单片机头文件
#define PWM1 7//小车前进速度,1-9可调(若转弯容易冲出,调慢即可)
#define PWM2 9//小车转向速度,1-9可调
sbit zuo1=P0^3;//左电机控制端1
sbit zuo2=P0^2;//左电机控制端2
sbit you1=P0^1;//右电机控制端1
sbit you2=P0^0;//右电机控制端2
sbit z=P1^2;//左边 光电管的信号端
sbit q=P1^1;//前边 光电管的信号端
sbit y=P1^0;//右边 光电管的信号端
void delay(int z)//pwm中使用的延时函数
{
int i,j;
for(i=2;i>0;i--)
for(j=z;j>0;j--);
}
void qian()//前进
{
you1=0;
you2=1;
zuo1=0;
zuo2=1;
delay(PWM1);//pwm调速,若PWM1=7表示速度为全速的70%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-PWM1);
}
void you()//右转
{
you1=1;
you2=1;
zuo1=0;
zuo2=1;
delay(PWM2);//pwm调速,若PWM1=9表示速度为全速的90%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-PWM2);
}
void zuo()//左转
{
you1=0;
you2=1;
zuo1=1;
zuo2=1;
delay(PWM2);//pwm调速,若PWM1=9表示速度为全速的90%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-PWM2);
}
void ting()//停止
{
you1=1;
you2=1;
zuo1=1;
zuo2=1;
}
void main()//主函数
{
while(1)//单片机不间断监测 (是个死循环)
{
if(z==1&&y==1) qian();//前进
else if(z==0&&y==1) zuo();//左边遇到黑线时,左转
else if(z==1&&y==0) you();//右边遇到黑线时,右转
else if(z==0&&y==0)//左右同时遇到黑线时
{
int i=0;
for(i=0;i<300;i++) qian();//再向前走一段
//到终点不能稳定停止,将上面300调大。
while(q==1&&z==1&&y==1)ting();//若全是1,就停止
}
else ting();
}
}
复制代码
作者:
lsyforever
时间:
2018-11-30 22:16
这和你传感器的布置距离有关系,三个点分别在哪里呢
作者:
DIY0426
时间:
2018-11-30 22:47
可能是全测到黑色的线了,你可以试试全感应为黑色时,人为给小车左转或者右转
作者:
Wang-tg
时间:
2018-12-1 13:25
应该是你的正方形入口和终点冲突了,你应该处理一下,如果不处理这两个地方冲突很显然
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1