C++无效调用超时
C++ Void Call Timeout
我在树莓派上的C++应用程序出现问题。此脚本应在终止前打印一次以厘米为单位的距离。但它也应该检查超声波传感器是否连接,如果没有,脚本应该断开。我怎么能那样做?有没有办法为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: %dcmn", getCM());
return 0;
}
提前感谢
Tim
提前检查超声波传感器,如果不了解更多关于传感器的信息,任何人都无法提出太多建议。如果通信纯粹是比特切换,那么如果没有更多的硬件,你可能无法判断。
对于第二部分,超时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;
,这样您就可以知道什么失败了。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 设置 c/c++ 函数调用的超时
- C++无效调用超时
- 在调用stop()之后,将发送qTimer超时信号
- 通过直接连接或排队连接调用插槽的QTimer超时插槽之间的区别
- 在c++中使用libcurl调用curl的默认超时
- 超时后的 CPP 调用函数
- SleepEx 是否保证在超时之前调用所有挂起的完成回调
- 如何缩短Windows RPC调用超时
- 如何强制 Windows 蓝牙连接() 调用超时
- Qt:QFuture/Qt并发超时函数调用
- 超时 fwrite 调用以防止其阻塞
- 如何仅更改某些特定 XML-RPC 调用的超时
- C++:外部应用程序调用超时
- 如何使用超时进行异步调用
- 如何使libcurl c++调用超时和/或知道调用中何时发生超时
- 使用boost::asio::async_read实现超时,而不调用io_service上的run
- 使用c++在多个互斥锁上超时调用WaitForMultipleObjects