测距模块为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[0] )
- unsigned char unit[] = "cm";
- unsigned char messageString[]={
- 0xCA, 0xB5,
- 0xCA, 0xB1,
- 0xBE, 0xE0,
- 0xC0, 0xEB
- }; ///实时距离
- char str[6];
- 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);
- }
复制代码 |