新手,超声波测距反应滞后
测距模块为HC-SR04,用12864显示。代码摘自网上,运行没有问题,但是要跑一阵子才能稳定下来,反应滞后。人从跟前走过,数据没有变化。本来想如果有人走过,可以点亮LED。而且数据有抖动,170cm左右的距离,不知为什么偶尔会出现2米多的数据。有上下5cm的波动,不知是否正常。代码如下:#include <LCD12864RSPI.h>/*
日期:2013.5.18
IDE 版本:1.0.1
功能:利用SR04超声波传感器进行测距,并用串口显示测出的距离值
*/
// �趨SR04���ӵ�Arduino���
const int TrigPin = 5;
const int EchoPin = 6;
float distance;
#define AR_SIZE( a ) sizeof( a ) / sizeof( a )
unsigned char unit[] = "cm";
unsigned char messageString[]={
0xCA, 0xB5,
0xCA, 0xB1,
0xBE, 0xE0,
0xC0, 0xEB
}; ///实时距离
char str;
unsigned char show0[]={
0xB3, 0xAC,
0xC9, 0xF9,
0xB2, 0xA8,
0xB2, 0xE2,
0xBE, 0xE0
}; //超声波测距
unsigned char msg[]={
0xD3, 0xD0,
0xC8, 0xCB,
0xBE, 0xAD,
0xB9, 0xFD,
0xA3, 0xA1
}; //有人经过!
void setup()
{
// 初始化串口通信及连接SR04的引脚
//Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);
// 屏幕初始化
LCDA.Initialise();
delay(100);
}
void loop()
{
//LCDA.CLEAR();//清屏
//delay(100);
LCDA.DisplayString(0,1,show0,AR_SIZE(show0));//第一行第二格开始,显示文字
//delay(100);
LCDA.DisplayString(1,0,messageString,AR_SIZE(messageString));//第二行第一格开始,显示文字实时距离
//delay(100);
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin, HIGH) / 58.00;
if (distance<300)
{
dtostrf(distance,6,2,str);
LCDA.DisplayString(2,0,(unsigned char *)str,sizeof(str));
LCDA.DisplayString(2,3,unit,sizeof(unit));
delay(50);
}
//Serial.print(distance);
//Serial.print("cm");
//Serial.println();
delay(800);
}
页:
[1]