2 qq 38944028 qq_38944028 于 2017.09.08 11:09 提问

避障小车不能正确工作

求助!为什么小车感应到超声波模块信号转向几次后就不能再转,怎么都没有反应了呢?

4个回答

qq_38944028
qq_38944028   2017.09.08 11:10

以下是程序

#include#define uint unsigned int #define uchar unsigned charuchar num=10;uint distancez=0,distancey=0,t=0;sbit trigz=P1^2; //左边超声波模块sbit echoz=P1^3;//sbit zled=P1^6;//sbit zled_=P1^7;sbit trigy=P1^1; //右边超声波模块sbit echoy=P1^0;//sbit yled=P1^4;//sbit yled_=P1^5;sbit zq=P0^0 ; //左前sbit zh=P0^1; //左后sbit yq=P0^2; //右前sbit yh=P0^3; //右后void turnleft(){ zq=1;// zq=0; yq=0;}void turnright(){ yq=1;// yq=0; zq=0;}void run(){ zq=0; yq=0;}int initz() //左边离障碍物的距离{ trigz=0; echoz=0; t=0; //清楚计数器 trigz=1; //左边发出超声波 while(num>0)num--; trigz=0; while(!echoz); //发完 TR0=1; while(echoz); //计时,计算距离 ,关闭计数器 TR0=0; distancez=t/1.75 ; return distancez ;}int inity() //右边离障碍物的距离{ trigy=0; echoy=0; t=0; //清楚计数器 trigy=1; //右边发出超声波 while(num>0)num--; trigy=0; while(!echoy); //发完 TR0=1; while(echoy); //计时,计算距离 ,关闭计数器 TR0=0; distancey=t/1.75 ; return distancey ;}void timerinit(){ TH0=(65535-50)/256; TL1=(65535-50)%256; EA=1; ET0=1; } void main(){ while(1) { timerinit(); run(); initz(); inity(); while(distancez<20|distancey<20) { initz(); //障碍物在左边 if(distancez<20) { while(distancez<20) { turnleft(); initz(); } } run(); inity(); //障碍物在右边 if(distancey<20) { while(distancey<20) { turnright(); inity(); } } } run(); }}void Timer0(void) interrupt 1 //distance=t/1.75(cm){ TH0=(65535-50)/256; TL1=(65535-50)%256; t++;}

qq_38944028
qq_38944028   2017.09.08 11:23

#include
#define uint unsigned int
#define uchar unsigned char
uchar num=10;
uint distancez=0,distancey=0,t=0;
sbit trigz=P1^2; //左边超声波模块
sbit echoz=P1^3;
//sbit zled=P1^6;
//sbit zled_=P1^7;

sbit trigy=P1^1; //右边超声波模块
sbit echoy=P1^0;
//sbit yled=P1^4;
//sbit yled_=P1^5;

sbit zq=P0^0 ; //左前
sbit zh=P0^1; //左后
sbit yq=P0^2; //右前
sbit yh=P0^3; //右后

void turnleft()
{
zq=1;
// zq=0;
yq=0;
}
void turnright()
{
yq=1;
// yq=0;
zq=0;
}

void run()
{
zq=0;
yq=0;
}

int initz() //左边离障碍物的距离
{
trigz=0;
echoz=0;
t=0; //清楚计数器
trigz=1; //左边发出超声波
while(num>0)num--;
trigz=0;

while(!echoz);                  //发完

TR0=1;
while(echoz);                  //计时,计算距离  ,关闭计数器
TR0=0;
distancez=t/1.75 ;
return distancez ;

}
int inity() //右边离障碍物的距离
{
trigy=0;
echoy=0;
t=0; //清楚计数器

trigy=1;                     //右边发出超声波
while(num>0)num--;
trigy=0;

while(!echoy);                  //发完

TR0=1;
while(echoy);                  //计时,计算距离    ,关闭计数器
TR0=0;
distancey=t/1.75 ;
return distancey ;

}

void timerinit()
{
TH0=(65535-50)/256;
TL1=(65535-50)%256;

EA=1;
ET0=1;  

}

void main()
{

while(1)
{
    timerinit();
    run();
    initz();
    inity();
    while(distancez<20|distancey<20)
    {
                initz();                   //障碍物在左边
                if(distancez<20)
                {   
                    while(distancez<20)
                    {
                        turnleft();
                        initz();
                    }   
                }
               run();

                inity();                   //障碍物在右边
                if(distancey<20)
                {   
                    while(distancey<20)
                    {
                        turnright();
                        inity();

                    }   
                }                   
    }
    run();  
}

}

void Timer0(void) interrupt 1 //distance=t/1.75(cm)
{
TH0=(65535-50)/256;
TL1=(65535-50)%256;
t++;
}

qq_38944028
qq_38944028   2017.09.08 11:23

#include
#define uint unsigned int
#define uchar unsigned char
uchar num=10;
uint distancez=0,distancey=0,t=0;
sbit trigz=P1^2; //左边超声波模块
sbit echoz=P1^3;
//sbit zled=P1^6;
//sbit zled_=P1^7;

sbit trigy=P1^1; //右边超声波模块
sbit echoy=P1^0;
//sbit yled=P1^4;
//sbit yled_=P1^5;

sbit zq=P0^0 ; //左前
sbit zh=P0^1; //左后
sbit yq=P0^2; //右前
sbit yh=P0^3; //右后

void turnleft()
{
zq=1;
// zq=0;
yq=0;
}
void turnright()
{
yq=1;
// yq=0;
zq=0;
}

void run()
{
zq=0;
yq=0;
}

int initz() //左边离障碍物的距离
{
trigz=0;
echoz=0;
t=0; //清楚计数器
trigz=1; //左边发出超声波
while(num>0)num--;
trigz=0;

while(!echoz);                  //发完

TR0=1;
while(echoz);                  //计时,计算距离  ,关闭计数器
TR0=0;
distancez=t/1.75 ;
return distancez ;

}
int inity() //右边离障碍物的距离
{
trigy=0;
echoy=0;
t=0; //清楚计数器

trigy=1;                     //右边发出超声波
while(num>0)num--;
trigy=0;

while(!echoy);                  //发完

TR0=1;
while(echoy);                  //计时,计算距离    ,关闭计数器
TR0=0;
distancey=t/1.75 ;
return distancey ;

}

void timerinit()
{
TH0=(65535-50)/256;
TL1=(65535-50)%256;

EA=1;
ET0=1;  

}

void main()
{

while(1)
{
    timerinit();
    run();
    initz();
    inity();
    while(distancez<20|distancey<20)
    {
                initz();                   //障碍物在左边
                if(distancez<20)
                {   
                    while(distancez<20)
                    {
                        turnleft();
                        initz();
                    }   
                }
               run();

                inity();                   //障碍物在右边
                if(distancey<20)
                {   
                    while(distancey<20)
                    {
                        turnright();
                        inity();

                    }   
                }                   
    }
    run();  
}

}

void Timer0(void) interrupt 1 //distance=t/1.75(cm)
{
TH0=(65535-50)/256;
TL1=(65535-50)%256;
t++;
}

qq_38204686
qq_38204686   2017.09.08 12:35

while(num>0)num--;
num全局变量 减完以后 需要重新赋值么

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
51智能寻迹避障小车(舵机超神波避障).
51智能寻迹避障小车原理图,使用51单片机 ST188红外管。舵机和超声波、L298驱动模块等详情下载查看。
树莓派避障小车(python)
本文章是通过控制树莓派GPIO端口间接控制L298N控件,进一步控制小车的马达和自动避开障碍的功能
智能超声波避障小车C程序
超声波壁障,光电对管测速1602显示程序,如有改进请指教
Arduino综合实例之一_避障小车
1.      说明: 此实例实现了通过蓝牙连接小车和手机,在手机端用软件控制小车前进,后退,左/右转向,控制行驶速度。并能让小车自动行驶,躲避障碍。 我买的是最便宜的黄色四驱小车,加了一个电机驱动模块(用于控制小车),一个蓝牙模块(用于与手机连接),一个距离传感器(测试前方是否有障碍物),一个舵机(在遇到障碍时,控制距离传感器转动,判断左/右哪边空间更大)。 2.      硬件: (加
MATLAB虚拟现实避障小车(结合神经网络)
用MATLAB虚拟现实做的避障小车,程序中包含神经网络的算法。刚开始小车会碰到障碍,随着训练次数增多将会避开障碍物。
基于STM32的智能寻迹避障小车
以意法半导体公司生产的STM32为核心控制器,在MDK4.70软件开发平台下设计开发的智能小车。文中介绍了整个设计的需求分析、方案选择、硬件部分、软件部分、传感器的选择与布局、PCB的绘制、电路板的安装、以及整车的测试与评估。 本次设计最终采用STM32为主控制器,此款芯片功能强大,足以满足整个设计的需求,选用最常用高灵敏度的红外光电传感器ST188完成循迹功能,采用MG995辉盛舵机和HC-SR04超声波模块配合完成避障功能,利用红外光电传感器和超声波模块完成边循迹边避障功能。整个计总共绘制五块PCB板,分别是最小系统,主控板,驱动板,循迹板,隔离板,部分发厂打烊,部分自己作板。电路美观大方,工作稳定可靠,程序经过多次测试和改进,能够较健壮的运行。最终能够很好地实现上述功能。
智能循迹避障小车源程序(C51)
包含小车避障、循迹、金属监测、放音子程序,51单片机C语言源程序,今年大赛用的,现在拿出来,呵呵,希望有用!
红外避障小车程序代码
这是一个红外避障小车的程序代码,是用c语言编的,希望对喜欢动手,又喜欢单片机和机器人的朋友们有一定的帮助。
51避障小车程序
基于51单片机的巡逻车程序,通过3路超声波实现避障,同时烟雾报警,1602显示。
FPGA实现温度测量,自动避障,红外遥控小车
本文件为课程设计,内含FPGA代码,能实现智能小车的避障、红外遥控、温度测量、PWM调速的功能