novakon作者
13年8个月前IP:未同步
518903
8楼
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变量里面就保存了这个时间。
  Serial.print(microseconds); //Serial.print代表从串口输出文字(这样我们就可以用电脑接收)。先输出微秒值;
  Serial.print("us,"); //再输出单位符号
  float centimeters=microseconds/58.0; //定义一个叫做centimeters的float(浮点数,也就是带有小数部分的数)类型的变量,并让它的值等于计算出的距离,单位是厘米。这里的换算关系很简单,微秒/1000000=秒,厘米/100=米,声速是每秒3xx米,而声音传播的路程是实际距离的两倍……
  Serial.print(centimeters); //从串口输出厘米值
  Serial.print("cm.\\n"); //输出单位符号厘米,最后面的斜杠n代表回车符号
  delay(100);//延迟100毫秒,然后循环。
}
QQ截图20130423173055.jpg
评论
文号 / 518903

万流景仰
名片发私信
学术分 16
总主题 1270 帖总回复 8407 楼拥有证书:学者 机友 笔友
注册于 2008/03/29 15:34:00最后登录 2022/01/09 14:09:34
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

已走,勿送

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的