經過搜尋網路上別人的經驗後, 發現這一篇討論串也提到相同的問題, 解決方法就是將 Arduino 原本用來讀取 HC-SR04 的 echo 訊號的腳位先故意設為輸出模式, 並且輸出低電位後一小段時間, 再重新設定回輸入模式, 就可以喚醒 HC-SR04, 或者說是 echo 的功能。
我自己把上述作法寫成以下的程式, 只要 pulseIn() 傳回 0, 我就採取前述對策:
const int echoPin = 11;
const int triggerPin = 12;
unsigned long ping1() {
unsigned long pulse;
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pulse = pulseIn(echoPin, HIGH, 50000);
if(pulse == 0) {
pinMode(echoPin, OUTPUT);
digitalWrite(echoPin, LOW);
delay(100);
pinMode(echoPin, INPUT);
}
return pulse;
}
另外, HC-SR04 似乎對供電非常敏感, 我使用的有些 Arduino UNO 板如果只靠 USB 供電, 即使套用上述作法, 仍然無效, 必須外加電源供電, 才會正常, 也提供給大家參考。
沒有留言:
張貼留言