
请大神帮我看一下这个超声波避障小车的程序,是什么地方有问题。我刚刚学习单片机,并不是很懂。
小车仅仅只有一个超声波模块、单片机最小系统、电机驱动模块,功能也非常简单:距离障碍物30cm时自动往左转。程序如下:#include<reg51.h>#include<i...
小车仅仅只有一个超声波模块、单片机最小系统、电机驱动模块,功能也非常简单:距离障碍物30cm时自动往左转。
程序如下:
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int time=0;
unsigned int timer=0; //延时基准变量
unsigned long S=0;
sbit a1=P1^3;//对电机控制端口的声明
sbit a2=P1^2;
sbit b1=P1^1;
sbit b2=P1^0;
sbit ECHO=P1^4; //超声波接口定义
sbit TRIG=P1^5; //超声波接口定义
void delay(unsigned int k) //延时函数
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
void StartModule() //启动测距信号
{
TRIG=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG=0;
}
void Conut(void) //计算距离
{
while(!ECHO); //当RX为零时等待
TR0=1; //开启计数
while(ECHO); //当RX为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0; //读取脉宽长度
TH0=0;
TL0=0;
S=time*0.17;
}
void qian()//前进(这个测试过没问题的,由于字数有限,没有写了)
void zuo()//左转(同上)
void main()
{
while(1)
{
if(timer>=100) //100MS检测启动检测一次
{
timer=0;
StartModule(); //启动检测
Conut(); //计算距离
if(S>30) //距离障碍30cm
qian();//前进
else
zuo();//左转
}
}
}
主要是超声波模块的工作程序有问题 展开
程序如下:
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int time=0;
unsigned int timer=0; //延时基准变量
unsigned long S=0;
sbit a1=P1^3;//对电机控制端口的声明
sbit a2=P1^2;
sbit b1=P1^1;
sbit b2=P1^0;
sbit ECHO=P1^4; //超声波接口定义
sbit TRIG=P1^5; //超声波接口定义
void delay(unsigned int k) //延时函数
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
void StartModule() //启动测距信号
{
TRIG=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG=0;
}
void Conut(void) //计算距离
{
while(!ECHO); //当RX为零时等待
TR0=1; //开启计数
while(ECHO); //当RX为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0; //读取脉宽长度
TH0=0;
TL0=0;
S=time*0.17;
}
void qian()//前进(这个测试过没问题的,由于字数有限,没有写了)
void zuo()//左转(同上)
void main()
{
while(1)
{
if(timer>=100) //100MS检测启动检测一次
{
timer=0;
StartModule(); //启动检测
Conut(); //计算距离
if(S>30) //距离障碍30cm
qian();//前进
else
zuo();//左转
}
}
}
主要是超声波模块的工作程序有问题 展开
展开全部
这个不好看,你先检查超声波模块把距离测算出来没有,可以通过串口单独把超声波模块的数据提出来看看
追问
那么程序呢?蓝牙模块测距和计算的程序有没有问题呢?
追答
q 说吧3324 0017 8
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询