2016-10-12 3 views
0

내 RPI에 PING 센서 (HC-SR04)가 연결되어 있습니다. 센서가 40cm 미만을 볼 때 계산을 시작하고 싶습니다. 센서가 다시 40cm 미만으로보고 시간을 출력하고 다시 카운트를 시작하면 다시 카운팅을 멈춰야합니다. 어떻게해야합니까? 이것은 내 코드입니다RPI의 PING 센서가 40cm 미만이면 카운팅을 시작합니까?

#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

어떤 세분성이 필요합니까? – LPs

+0

너는 초침과 초 등을 의미합니까? 그렇다면 초와 밀리 초가 필요합니다. –

답변

0

코드는 거리를 측정하지 않습니다. 반사 된 신호의 지속 시간 만 측정합니다. 당신이 핑의 시작 사이의 지연 시간을 측정하는 데 필요한 거리 및 에코의 시작을 얻으려면 : 물론

startTime = micros(); 

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

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

, 이것은 단지 해골입니다 : 당신이 배경 소음으로부터 자신을 보호하기 위해 에코 진동을 소거 할 필요가 및 기타 결함.

+0

무슨 뜻인지 모르겠다. 내 코드와 거리가 멀어 지나요? 그것은 거리 측정에 잘 작동합니다. –