我在Raspberry Pi上遇到了我的C ++应用程序的问题。此脚本应在终止前以cm为单位打印一段距离。但它也应该检查超声波传感器是否连接,如果不是,脚本应该断开。我怎么能这样做?有没有办法为getCM()方法设置超时或有任何其他想法来解决这个问题? 这是代码:
...
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;
}
提前致谢!
添
答案 0 :(得分: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;
失败,因此您知道失败了。