在Mixly(米思齐)在传感器中→当返回超声波传感器测得的距离模块拖入编辑区时,其右代码区自动生成的代码是Arduino如下图所示:

图1:Mixly界面图
这些代码是什么意思?让我们一一解释。如有不清楚,请在评论区留言。
///测距函数
float checkdistance_2_3() {
// 产生一个10us触发高脉冲TrigPin
digitalWrite(2, LOW);//向2号数字口写入低电平
delayMicroseconds(2)//延迟2微秒
digitalWrite(2, HIGH);///向2号数字口写高电平
delayMicroseconds(10)
digitalWrite(2, LOW);///向2号数字口写低电平
// 检测脉冲宽度,计算距离
float distance = pulseIn(3, HIGH) / 58.00;//通过pulseIn为什么要将超声波从发射到接收的时间除以58?请看文章的结尾。
delay(10);
return distance;
}
///程序初始化部分只执行一次
void setup(){
pinMode(2, OUTPUT);//设置2号数字IO口为输出状态,连接超声波传感器Trig
pinMode(3, INPUT);//设置3号数字IO口为输入状态,连接超声传感器Echo
}
//程序循环执行部分
void loop(){
checkdistance_2_(3)checkdistance(测距)函数
}
以上是单独获取超声波传感器值的代码。如果要显示在串口监视器中,需要改进,可以再次使用串口→打印(自动换行)模块被拖出,并与返回超声波传感器测得的距离相结合,如下图所示:
图2:添加串口打印自动换行模块后
与图1相比,右侧的代码区域由20行变为21行。具体变化是图2增加了第15行,原图1第18行:checkdistance_2_3(); 变成图2第19行: Serial.println(checkdistance_2_3()); 完整代码如下:
float checkdistance_2_3() {
digitalWrite(2, LOW);
delayMicroseconds(2);
digitalWrite(2, HIGH);
delayMicroseconds(10);
digitalWrite(2, LOW);
float distance = (3, HIGH) / 58.00;
delay(10);
return distance;
}
void setup(){
pinMode(2, OUTPUT);
pinMode(3, INPUT);
Serial.begin(9600);
}
void loop(){
Serial.println(checkdistance_2_3());
}
在上述完整代码中,最重要的函数是pulseIn函数是程序中最重要的部分。
pulseIn函数实际上是一个简单的函数默认单位为函数us。也就是说pulseIn超声波从发射到接收的时间被测量。除数58也很容易理解,声音干燥,摄氏 空气中20度的传播速度约为343米/秒,合34300厘米/秒。或者,让我们做一个单位转换,34300除以1万厘米/微秒。即为:0.0343厘米/微秒,换个角度,1/(0.0343 厘米/微秒即:29.15 微秒/厘米。这意味着每291次.5微秒表示10CM的距离
实际上超声波传感器,程序里的distance其实是时间开始获得的us。所以换成距离cm,除以58。当然,除以58.也许更准确。所以我们可以使用它 pulseIn(EchoPin, HIGH) / 58.00获取测得的距离。
此外,超声波传感器除外GND、VCC这两个引脚(管脚)和Trig和Echo请注意传感器与主板(或扩展板)实际连接的引脚(管脚)与程序中设置的引脚(管脚)一致,如图3、图4所示。
图3:模块中的Trig、Echo与实际引脚(管脚)对应
图4:红框中的数字应与实际引脚(管脚)对应
本节到此结束。如有不清楚的地方,请给我留言。如需更多相关课程,请点击按钮关注我,我(初始化工作室),谢谢你的支持。