|
哪位大神可以告訴我,后邊該怎么寫。現在寫的只可以巡線,到正方形哪里就會停,走不到終點,應該怎樣改程序啊?
這個是程序。
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();
- }
- }
復制代碼
|
|