本帖最后由 lxf 于 2020-8-17 13:36 编辑
目标
1、超声波传感器的使用 2、实现当物体接近超声波时,蜂鸣器发出警报,否则蜂鸣器不发出警报
实验材料
Arduino UNO开发板 HC-SR04超声波传感器模块 蜂鸣器模块(频率可控) 配套USB数据线 配套杜邦线若干 Arduino IDE软件
内容
接线图
接线方式
Arduino UNO <------> HC-SR04超声波传感器模块 5V <------> VCC GND <------> GND 7 <------> Trig 3 <------> Echo Arduino UNO <------> 蜂鸣器模块 5V <------> VCC GND <------> GND 6 <------> IO
流程图
程序实现代码
- float checkdistance_7_3() { //定义一个浮点型函数checkdistance_7_3()
- digitalWrite(7, LOW); //低高低电平发一个短时间脉冲去Trigpin
- delayMicroseconds(2);
- digitalWrite(7, HIGH);
- delayMicroseconds(10);
- digitalWrite(7, LOW);
- float distance = pulseIn(3, HIGH) / 58.00; //将回波时间换算成distance
- delay(10);
- return distance; //向调用函数返回distance
- }
- void setup(){
- pinMode(7, OUTPUT); //定义7号数字管脚类型为输出
- pinMode(3, INPUT); // 定义3号数字管脚类型为输入
- pinMode(6, OUTPUT); //定义6号数字管脚类型为输出
- }
- void loop(){
- if (checkdistance_7_3() < 30) { //如果超声波传感检测到物体的距离小于30
- tone(6,131); //那么蜂鸣器6号管脚响起C调do的低音
- } else {
- noTone(6); //否则,蜂鸣器6号管脚不响
- }
- }
复制代码
float 浮点型
float,浮点型数据,就是有小数点的数字,浮点数经常被用来模拟连续值,因为他们比整数具有更大的精确度,浮点数的取值范围在3.4028235 E+38 ~ -3.4028235 E+38,浮点型数据可存储4个字节的数据。float只有6-7位有效数字,这指的是总位数,而不是小数点右边的数字,在Arduino Uno中,double型与float型的大小相同,这一点是和其它平台不同的。浮点数字在有些情况下是不准确的,在数据大小比较时,可能会产生奇怪的结果,例如 6.0 / 3.0 可能不等于 2.0。假如Arduino所运行的程序需要很快速度执行,这时应尽量避免使用浮点型数据运算而采用整数运算,因为浮点运算速度远远慢于整数运算。进行浮点数值运算时,应在数值末尾加上小数点,否则Arduino将以int类型进行运算处理。
示例:
- Int x;
- Int y;
- flaot z;
- float s = 1.117;
- x = 1;
- y = x / 2; //运算结果y为0
- //因为整数不能容纳小数
- z = (float)x / 2.0; //运算结果z为0.5
- // 浮点数运算时必须使用小数点,即使用2.0而不是2。
复制代码
语法
float var = val; var——float型变量名称 val——分配给该变量的值
delayMicroseconds()
delayMicroseconds()与 delay()函数都可用于暂停程序运行,不同的是,delayMicroseconds()的参数单位是微秒(1毫秒=1000微秒)。
语法
delayMicroseconds(us)
参数
us: 暂停时间,该时间单位是微秒(unsigned long型数据)
返回值
无
pulseIn()
读引脚的脉冲信号, 被读取的脉冲信号可以是 HIGH 或 LOW,例如我们要检测HIGH脉冲信号, Arduino将在引脚变为高电平时开始计时, 当引脚变为低电平时停止记时,并返回脉冲持续时长(时间单位:微秒)。如果在超时时间内没有读到脉冲信号的话, 将返回0。 根据经验发现,pulseIn()函数在检测脉冲间隔过短的信号时会产生错误。Arduino可检测的脉冲间隔时间范围是10微秒到3分钟。请留意假如调用pulseIn()函数时读取信号的引脚上已经为高电平,此时Arduino将等待该引脚变为低电平以后再开始检测脉冲信号。另外只有Arduino的中断是开启时,才能使用pulseIn()。
语法
pulseIn(pin, value)
pulseIn(pin, value, timeout)
参数
pin 引脚编号
value 脉冲状态
timeout 超时时间(单位:微秒)
如果Arduino在超时时间(timeout)内没有读到脉冲信号的话, 该函数将返回0,超时时间参数是可选参数,其默认值为1秒。
返回值
脉冲持续时长。
如果在超时时间内没有读到脉冲信号, 将返回0。
return
终止一个函数,并向调用此函数的函数返回一个值
语法
return; return value; // 有无返回值value都可以
参数
value: 任何类型的变量或常量
示例:
- int checkSensor(){
- if (analogRead(0) > 400) {
- return 1; //向调用函数返回数值1
- else{
- return 0; //向调用函数返回数值0
- }
- }
复制代码 |