[笔记]Arduino平台使用US100超声波测距模块的串口模式测距实验

上次学习了使用电平方式利用US-100超声波测距模块来测距,现在再学习一种使用串口方式测距的方法。

注意 Trig连接数字Pin1,Echo连接数字Pin0,这两个Pin是Arduino的串口输出/输入口。

根据文档“US-100超声波测距模块在Arduino平台上的使用说明”的说法,“在串口模式下,通过Trig/TX 管脚输入0X55(波特率9600),US-100 便会通过Echo/RX管脚输出两字节的距离值,第一个字节是距离的高8 位(HDate),第二个字节为距离的低8 位(LData),单位为毫米。即距离值为 (HData*256 +LData)mm。”

/* ----------------------------------------
* 超声波测距模块US-100串口方式测距
* 选择串口方式需要插上模块背面的跳线
* US-100的探头面向自己时,从左到右Pin脚依次为:
* VCC / Trig(Tx) / Echo(Rx) / GND / GND
* 两个GND只需要一个接地即可
* Trig 接1脚,Echo接0脚
* -----------------------------------------
*/

void setup(){
// 将Arduino 的RX 与TX(Digital IO 0 和1)分别于US-100 的Echo/Rx 和Trig/Tx相连
// 确保连接前已经插上跳线,使US-100 处于串口模式
Serial.begin(9600); // 设置波特率为 9600bps.
}

void loop(){
unsigned int lenHigh = 0; // 高位
unsigned int lenLow = 0; // 低位
unsigned int dist_mm = 0; // 距离

Serial.flush(); // 清空串口接收缓冲区
Serial.write(0x55); // 发送0x55,触发US-100 开始测距
delay(500); // 延时500 毫秒

// 当串口接收缓冲区中数据大于2字节
if(Serial.available() >= 2){
lenHigh = Serial.read(); // 距离的高字节
lenLow = Serial.read(); // 距离的低字节
dist_mm = lenHigh*256 + lenLow; // 计算距离值

// 有效的测距的结果在1mm 到 10m 之间
if((dist_mm > 1) && (dist_mm < 10000))
{
Serial.print("Distance is: ");// 输出结果至串口监视器
Serial.print(dist_mm, DEC);
Serial.println("mm");
}
}

delay(500); // 等待500ms
}

注意下载程序之前,因为复用了串口,所以要先将超声波模块与Arduino板断开,否则下载会失败。

原文地址:https://www.cnblogs.com/journeyonmyway/p/2323115.html