int supersonicread()
//这里我定义了一个函数,叫做supersonicread,顾名思义就是读取超声波传感器数值。
//函数前面的int表示这个函数返回一个整数。
{
digitalWrite(sstrig,HIGH); // 将trig脚电压设为高
digitalWrite(sstrig,LOW); //将trig脚电压设为低,这样就向模块发送了一个信号,让模块发射超声波。
int echotime=pulseIn(ssecho,HIGH); //定义一个叫做echotime(回声时间)的量,并让它等于pulseIn函数的返回值。这里介绍一下pulseIn函数。
pulseIn(abc,HIGH) 代表在abc针脚上,等待一个高电压脉冲(等待电压由低变高,又由高变低)。然后返回一个值,这个值代表两次电压变化经过的时间,单位是微秒(microseconds, us).
pulseIn(abc,LOW)代表等待一个低电压脉冲,其他一样。
所以在程序里面写int echotime=pulseIn(ssecho,HIGH); 就代表我在ssecho脚上,等待电压由低变高(发射了超声波),开始计时,然后等待电压由高变低(收到了超声波),停止计时,然后把经过的时间写到echotime变量里面去。
return echotime; //return 命令 表示把一个数作为这个函数的返回值。我们把echotime,也就是回声时间,作为这个函数返回的数值。
}
然后是程序主干,也就是loop函数。
void loop() {
int microseconds=supersonicread(); //定义一个叫microseconds变量,令它的值等于supersonicread函数的返回值。我们知道supersonicread的返回值,是超声波从发射到回声所经过的时间,单位是微秒。所以现在microseconds变量里面就保存了这个时间。
XXXXXXXXXint(microseconds); //XXXXXXXXXint代表从串口输出文字(这样我们就可以用电脑接收)。先输出微秒值; XXXXXXXXXint("us,"); //再输出单位符号 float centimeters=microseconds/58.0; //定义一个叫做centimeters的float(浮点数,也就是带有小数部分的数)类型的变量,并让它的值等于计算出的距离,单位是厘米。这里的换算关系很简单,微秒/1000000=秒,厘米/100=米,声速是每秒3xx米,而声音传播的路程是实际距离的两倍……
XXXXXXXXXint(centimeters); //从串口输出厘米值 XXXXXXXXXint("cm.\\n"); //输出单位符号厘米,最后面的斜杠n代表回车符号 delay(100);//延迟100毫秒,然后循环。
}