US-100超声波传感器测距结果恒为零的问题排查与解决
US-100超声波传感器测距结果恒为零问题排查
问题背景
使用US-100超声波传感器时出现测距结果始终为零的问题,已提前确认传感器引脚接线正确。
测试过程
IO触发测距模式测试
最初采用IO触发测距模式测试,运行以下代码未得到有效结果:
const int pingPin = 5; // Trigger Pin of Ultrasonic Sensor const int echoPin = 6; // Echo Pin of Ultrasonic Sensor long duration; void setup() { pinMode(pingPin, OUTPUT); pinMode(echoPin, INPUT); digitalWrite(pingPin, LOW); Serial.begin(9600); } void loop() { digitalWrite(pingPin, HIGH); delayMicroseconds(10); digitalWrite(pingPin, LOW); duration = pulseIn(echoPin, HIGH); Serial.print(duration / 29 / 2); Serial.println(" cm"); delay(300); }
首次串口模式测试
引入SoftwareSerial.h库尝试用串口模式驱动传感器,依然没有正常输出,一度怀疑传感器硬件损坏。
解决方案
将串口通信引脚更换为12、13号引脚重新测试,成功得到正常测距数据,可用测试代码如下:
#include <SoftwareSerial.h> const int pin_TX = 12; const int pin_RX = 13; SoftwareSerial mySerial(pin_RX, pin_TX); unsigned int HighByte = 0; unsigned int LowByte = 0; unsigned int Len = 0; void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { mySerial.flush(); mySerial.write(0X55); // trig US-100 begin to measure the distance delay(500); if (mySerial.available() >= 2) // check receive 2 bytes correctly { HighByte = mySerial.read(); LowByte = mySerial.read(); Len = HighByte * 256 + LowByte; // Calculate the distance if ((Len > 1) && (Len < 10000)) { Serial.print("Distance: "); Serial.print(Len, DEC); Serial.println("mm"); } } delay(1000); }
内容的提问来源于stack exchange,提问作者nob
相关产品推荐
相关产品推荐

