|
哪位大神可以告诉我,后边该怎么写。现在写的只可以巡线,到正方形哪里就会停,走不到终点,应该怎样改程序啊?
这个是程序。
- #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();
- }
- }
复制代码
|
|