找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机基础红外循迹避障求助帖,避障有一步卡住了!

[复制链接]
跳转到指定楼层
楼主
ID:773142 发表于 2020-6-12 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5黑币
以下我的程序,我的问题是 当我的小车避障模块感应到了障碍物,他也不执行我的命令 继续行驶
#include"reg52.h"
#include"intrins.h"
sbit IN1=P1^1;         //引脚定义
sbit IN2=P1^2;
sbit ENA=P2^6;
sbit IN3=P1^3;
sbit IN4=P1^4;
sbit ENB=P2^1;
sbit red_right=P0^3;
sbit red_left=P0^2;
sbit red_forehead=P0^1;
#define leftmoto_go IN1=1;IN2=0;
#define rightmoto_go IN3=1;IN4=0;
#define leftmoto_back IN1=0;IN2=1;
#define rightmoto_back IN3=0;IN4=1;
#define letfmoto_stop IN1=0,IN2=0;
#define rightmoto_stop IN3=0,IN4=0;
typedef unsigned int u16;
typedef unsigned char u8;
u8 pwm_left_val=230;
u8 pwm_right_val=230;
u8 pwm_t;
void delay(u16 a)
{
  while(a--);                                                
}

void forward()          //前进
{
leftmoto_go;rightmoto_go;
}
void stop()                  //停止
{
  letfmoto_stop;rightmoto_stop;
}
void backward()          //后退
{
  leftmoto_back;rightmoto_back;
}
void right_turn()  //右转
{
leftmoto_go;rightmoto_back;
}void left_turn()         //左转
{
rightmoto_go;leftmoto_back;
}

void Timer0() interrupt 1         //PWM调速
{
pwm_t++;
if(pwm_t==255)
{
  pwm_t=ENA=ENB=0;
}
if(pwm_left_val==pwm_t)
{
  ENA=1;
}
  if(pwm_right_val==pwm_t)
{
  ENB=1;
}
}
void main()
{
  TMOD|=0x02;
  TH0=250;
  TL0=250;
  TR0=1;
  ET0=1;
  EA=1;
  while(1)
  {
   if(red_right==0&&red_left==0&&red_forehead==1)         //没有检测到黑线,直行
   {
                      forward();
   }
   else if(red_right==1&&red_left==0&&red_forehead==1)   //右边检测到黑线,右转
   {
            right_turn();
   }
   else if(red_right==0&&red_left==1&&red_forehead==1)   //左边检测到黑线,左转
   {
             left_turn();
   }
   if(red_forehead==0)         //车头检测到障碍物,避障
   {
             stop();
          delay(5000);
          left_turn();
          delay(5000);
          forward();
          delay(10000);
          right_turn();
          delay(5000);
          forward();
          delay(10000);
          right_turn();
          delay(5000);
          while(1)
          {
          if(red_right==0&&red_left==0)
     {
                      forward();
     }
   if(red_right==1&&red_left==0)
   {
            right_turn();
   }
   if(red_right==0&&red_left==1)
   {
             left_turn();
   }
           }
         



   }


  }
}

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

使用道具 举报

沙发
ID:332444 发表于 2020-6-13 05:52 | 只看该作者
未见测距代码,如何避障执行命令?
回复

使用道具 举报

板凳
ID:764088 发表于 2020-6-16 10:29 | 只看该作者
采用debug 模式,看碰到故障物时,1)是否 程序进入 满足您的相应条件中
2)如已满足,看执行命令函数是否实施; 根据上述来改吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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