我有一个PING传感器(HC-SR04)连接到我的RPI。我希望它在传感器看到小于40厘米时开始计数。当传感器再次看到小于40厘米时,它应该再次停止计数,打印出时间并再次开始计数。 我怎样才能做到这一点? 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define TRUE 1
#define TRIG 5
#define ECHO 6
void setup() {
wiringPiSetup();
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
//TRIG pin must start LOW
digitalWrite(TRIG, LOW);
delay(30);
}
int getCM() {
//Send trig pulse
digitalWrite(TRIG, HIGH);
delayMicroseconds(20);
digitalWrite(TRIG, LOW);
//Wait for echo start
while(digitalRead(ECHO) == LOW);
//Wait for echo end
long startTime = micros();
while(digitalRead(ECHO) == HIGH);
long travelTime = micros() - startTime;
//Get distance in cm
int distance = travelTime / 58;
return distance;
}
int i;
int main(void) {
setup();
while (1)
{
printf("Distance: %dcm\n", getCM());
delay(250);
}
return 0;
}
答案 0 :(得分:0)
代码不能测量距离。它仅测量反射信号的持续时间。要获得距离,您需要测量ping的开始和回显的开始之间的延迟:
startTime = micros();
digitalWrite(TRIG, HIGH);
delayMicroseconds(20);
digitalWrite(TRIG, LOW);
//Wait for echo start
while(digitalRead(ECHO) == LOW);
long travelTime = micros() - startTime;
当然,这只是一个骷髅:你需要消除回声以防止背景噪音和其他故障。