2017-01-23 298 views
0

我在树莓派上的C++应用程序出现问题。这个脚本应该在终止前打印一次以cm为单位的距离。但它也应该检查超声波传感器是否连接,如果不是脚本应该中断。我怎么能这样做?有没有办法为getCM()方法设置超时,或者有任何其他想法来解决这个问题? 这是代码:C++无效呼叫超时

... 

void setup() { 
    wiringPiSetup(); 
    pinMode(TRIG_R, OUTPUT); 
    pinMode(ECHO_R, INPUT); 

    digitalWrite(TRIG_F, LOW); 
    delay(30); 
} 

int getCM() { 

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

    //Wait for echo start 
    while(digitalRead(ECHO_R) == LOW); 

    //Wait for echo end 
    long startTime = micros(); 
    while(digitalRead(ECHO_R) == HIGH); 
    long travelTime = micros() - startTime; 

    int distance = travelTime/58; 

    return distance; 
} 
int main(void) { 

    setup(); 

    printf("Distance: %dcm\n", getCM()); 

    return 0; 
} 

在此先感谢!
Tim

+0

我希望有人会停止调用C++程序“脚本”。 – PaulMcKenzie

回答

0

预先检查超声波传感器,没有任何人可以建议不知道更多关于传感器。如果通信是纯粹的切换,你可能无法告诉没有更多的硬件。

对于第二部分,超时getCM,给digitalRead循环添加一个额外的条件来强制退出。例如:

int timeout = <read timeout goes here>; 
while((digitalRead(ECHO_R) == LOW)&&(--timeout)); 
if (!timeout) 
{ 
    return -1; // Should never be able to read less than blanking distance 
       // from an ultrasonic sensor. -1 is certainly out of range. 
} 

main你可以打印出-1或检查-1,并打印出一个更好的错误消息。为了更清楚起见,第二个循环可能会失败,因此您知道失败的原因是return -2;