找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3207|回复: 0
打印 上一主题 下一主题
收起左侧

怎么添加几句单片机程序,让D2-3循迹避障小车遇到黑线能停15秒吗?

[复制链接]
跳转到指定楼层
楼主
D2-3循迹避障小车,能完成循迹和避障,目前想完成一点难点的,在循迹线上加两道黑横线,小车检测到第一道黑线开始启动,到第二道黑线停20s,然后继续循迹,目前已有循迹避障的程序,需要添加后完成黑线停的要求。


单片机源码:
main.c
#include "STC15W201S.h"
#include <intrins.h>         
sbit D1 = P1^3;  //用于控制左边发光二极管
sbit D2 = P3
^2;   //用于控制右边发光二极管
sbit MOTOLsw = P1^2;   //用于控制左边电机
sbit MOTORsw = P3^3;  //用于控制右边电机
sbit D10 =  P3^6;  //右边障碍物检测信号
sbit D8 = P1^1;   //左边障碍物检测信号

sbit D7 = P1^0;  //右边黑线检测信号
sbit D9 = P3^7;  //左边黑线检测信号
sbit xunji_bizhang_sel = P5^5;  //循迹避障选择开关
void Delay500ms()  //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
  do
  {
   while (--k);
  } while (--j);
} while (--i);
}

void main(void)
{  
char i;
bit j;
while(1)
{
  i = 0;
    if(xunji_bizhang_sel == 0)    //避障
    {
    if(1 == D10)
    {
      D1 = 0;
      
   
    }
    else
    {
      D1 = 1;
      i =1;
    }
   
    if(1 == D8)
    {
      D2 = 0;
      
    }
    else
    {
      D2 = 1;
       i = 2;
    }
   
    if(0 == D8 && 0 == D10)  //两边都有障碍物
    {
      i = 3;
    }
   
   
    switch(i)
    {
      case 0:
       MOTOLsw =0;
       MOTORsw =0;
       break;
      case 1:
       MOTOLsw =0;
       MOTORsw =1;
       Delay500ms();
       break;
      case 2:
       MOTOLsw =1;
       MOTORsw =0;
       Delay500ms();
       break;
      case 3:
       j^=1;
       if(j)
       {
         MOTOLsw =1;
         MOTORsw =0;
         Delay500ms();
       }
       else
       {
         MOTOLsw =0;
         MOTORsw =1;
         Delay500ms();
       }
       break;
      default:
       MOTOLsw =0;
       MOTORsw =0;
      break;
    }
  
   }
  else       //循迹
  {
    if(0 == D9)   //如果左边检测到黑线,左边电机停止,否则左边电机继续运转
   {
     D1 =0;
     MOTOLsw =0;
   }
   else      
    {
     D1 =1;
     MOTOLsw =1;
   }
    if(0 == D7)   //如果右边检测到黑线,右边电机停止,否则右边电机继续运转
    {
     D2 =0;
     MOTORsw = 0;
   }
   else
   {
       D2 =1;
     MOTORsw =1 ;
   }
   
    if((1 == D7) &&( D9 == 1))  //如果两边都检测到黑线(转弯的时候),任意选一边电机停止
    {
     D1 = 1;
     D2 = 1;
     MOTORsw = 0;
    }
  }
}
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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