RPI上的PING传感器,小于40cm时开始计数?

时间:2016-10-12 12:09:00

标签: c timer count raspberry-pi ping

我有一个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;
}

1 个答案:

答案 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;

当然,这只是一个骷髅:你需要消除回声以防止背景噪音和其他故障。