我有一个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;
}发布于 2016-10-13 01:06:10
代码没有测量距离。它只测量反射信号的持续时间。要获得距离,您需要测量ping开始和回应开始之间的延迟:
startTime = micros();
digitalWrite(TRIG, HIGH);
delayMicroseconds(20);
digitalWrite(TRIG, LOW);
//Wait for echo start
while(digitalRead(ECHO) == LOW);
long travelTime = micros() - startTime;当然,这只是一个框架:您需要去除回声,以保护自己免受背景噪声和其他故障的影响。
https://stackoverflow.com/questions/39998247
复制相似问题