找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4146|回复: 3
收起左侧

单片机巡线小车程序到正方形哪里就会停,走不到终点,为什么?

[复制链接]
ID:433808 发表于 2018-11-30 17:00 | 显示全部楼层 |阅读模式
哪位大神可以告诉我,后边该怎么写。现在写的只可以巡线,到正方形哪里就会停,走不到终点,应该怎样改程序啊?
这个是程序。

3.PNG

  1. #include<reg52.h>//单片机头文件
  2. #define PWM1 7//小车前进速度,1-9可调(若转弯容易冲出,调慢即可)
  3. #define PWM2 9//小车转向速度,1-9可调

  4. sbit zuo1=P0^3;//左电机控制端1
  5. sbit zuo2=P0^2;//左电机控制端2
  6. sbit you1=P0^1;//右电机控制端1
  7. sbit you2=P0^0;//右电机控制端2

  8. sbit z=P1^2;//左边 光电管的信号端
  9. sbit q=P1^1;//前边 光电管的信号端
  10. sbit y=P1^0;//右边 光电管的信号端

  11. void delay(int z)//pwm中使用的延时函数
  12. {
  13.         int i,j;
  14.         for(i=2;i>0;i--)
  15.         for(j=z;j>0;j--);      
  16. }
  17. void qian()//前进
  18. {
  19.         you1=0;
  20.         you2=1;
  21.         zuo1=0;
  22.         zuo2=1;
  23.         delay(PWM1);//pwm调速,若PWM1=7表示速度为全速的70%
  24.         you1=1;
  25.         you2=1;
  26.         zuo1=1;
  27.         zuo2=1;
  28.         delay(10-PWM1);        
  29. }
  30. void you()//右转
  31. {
  32.         you1=1;
  33.         you2=1;
  34.         zuo1=0;
  35.         zuo2=1;
  36.         delay(PWM2);//pwm调速,若PWM1=9表示速度为全速的90%
  37.         you1=1;
  38.         you2=1;
  39.         zuo1=1;
  40.         zuo2=1;
  41.         delay(10-PWM2);
  42. }
  43. void zuo()//左转
  44. {
  45.         you1=0;
  46.         you2=1;
  47.         zuo1=1;
  48.         zuo2=1;
  49.         delay(PWM2);//pwm调速,若PWM1=9表示速度为全速的90%
  50.         you1=1;
  51.         you2=1;
  52.         zuo1=1;
  53.         zuo2=1;
  54.         delay(10-PWM2);
  55. }
  56. void ting()//停止
  57. {
  58.         you1=1;
  59.         you2=1;
  60.         zuo1=1;
  61.         zuo2=1;
  62. }

  63. void main()//主函数
  64. {
  65.         while(1)//单片机不间断监测 (是个死循环)
  66.         {                                                           
  67.                 if(z==1&&y==1) qian();//前进
  68.                 else if(z==0&&y==1)        zuo();//左边遇到黑线时,左转      
  69.                 else if(z==1&&y==0) you();//右边遇到黑线时,右转                       
  70.                 else if(z==0&&y==0)//左右同时遇到黑线时
  71.                 {                                               
  72.                         int i=0;                                       
  73.                         for(i=0;i<300;i++) qian();//再向前走一段
  74.                         //到终点不能稳定停止,将上面300调大。                                       
  75.                         while(q==1&&z==1&&y==1)ting();//若全是1,就停止
  76.                 }
  77.                 else ting();                       
  78.         }                              
  79. }
复制代码


回复

使用道具 举报

ID:86442 发表于 2018-11-30 22:16 | 显示全部楼层
这和你传感器的布置距离有关系,三个点分别在哪里呢
回复

使用道具 举报

ID:436876 发表于 2018-11-30 22:47 来自手机 | 显示全部楼层
可能是全测到黑色的线了,你可以试试全感应为黑色时,人为给小车左转或者右转
回复

使用道具 举报

ID:413632 发表于 2018-12-1 13:25 | 显示全部楼层
应该是你的正方形入口和终点冲突了,你应该处理一下,如果不处理这两个地方冲突很显然
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表