首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RPI上的PING传感器,小于40厘米时开始计数?

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

Stack Overflow用户
提问于 2016-10-12 20:09:00
回答 1查看 49关注 0票数 0

我有一个PING传感器(HC-SR04)连接到我的RPI上。我想让它在传感器检测到小于40厘米时开始计数。当传感器再次检测到小于40厘米时,应再次停止计数,打印出时间并重新开始计数。我该怎么做呢?这是我的代码:

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-10-13 01:06:10

代码没有测量距离。它只测量反射信号的持续时间。要获得距离,您需要测量ping开始和回应开始之间的延迟:

代码语言:javascript
复制
    startTime = micros();

    digitalWrite(TRIG, HIGH);
    delayMicroseconds(20);
    digitalWrite(TRIG, LOW);

    //Wait for echo start
    while(digitalRead(ECHO) == LOW);
    long travelTime = micros() - startTime;

当然,这只是一个框架:您需要去除回声,以保护自己免受背景噪声和其他故障的影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39998247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档