第1篇:Arduino与ESP32开发板的安装方法
第2篇:ESP32 helloworld第一个程序示范点亮板载LED
第3篇:vscode搭建esp32 arduino开发环境
第4篇:vscode+platformio搭建esp32 arduino开发环境
第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验
第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》
第7篇:ESP32连接按钮点亮LED无源喇叭播放声音
Arduino提供的 pulseInO函数用于检测指定引脚上脉冲信号的宽度
脉冲宽度测量函数3.3.1
pulseIn()
功能:检测指定引脚上的脉冲信号宽度。
例如当要检测高电平脉冲时,pulseIn()函数会等待指定引脚输入的电平变高在变高后开始计时,直到输入电平变低时,计时停止。pulseln()函数会返回此脉冲信号持续的时间,即该脉冲的宽度。
pulseln()函数还可以设定超时时间。如果超过设定时间仍未检测到脉冲,则会退出 pulseIn()函数并返回0。当没有设定超时时间时,pulseIn()会默认1秒钟的超时时间。
语法:
pulseIn(pin,value)
pulseIn(pin,value, timeout)
参数:
pin,需要读取脉冲的引脚。
value,需要读取的脉冲类型,为 HIGH或 LOW。
timeout,超时时间,单位为微秒,数据类型为无符号长整型。
返回值:换行返回脉冲宽度,单位为微秒,数据类型为无符号长整型。如果在指定时间内没有检测到脉冲,则返回 0。
下面将学习利用 pulseIn()函数和超声波传感器来完成测距工作。超声波是频率高于 20000 Hz的声波,它的指向性强,能量消耗缓慢,在介质中传播的距离较远,因而经常用于测量距离。
超声波传感器的型号众多,这里介绍一款常见的超声波传感器
1SR04超声波传感器
SRO4(图3-6)是利用超声波特性检测距离的传感器。其带有两个超声波探头,分别用做发射和接收超声波。其测量范围是 3~450 cm。
2.超声波测距的工作原理
,超声波发射器向某一方向发射超声波,在发射的同时开始计时:
超声波在容气中传播,途中碰到障物则立即返回,超声波接收器收到反射波即第3童1/0口高级应用停止计时。声波在空气中的传播速度为 340 m/s,根据计时器记录的时间1,兼出发射点距障碍物的距离5.即-340 m/X1/2。这就是所谓的时间差测阳
超声波模块引脚SR04超声波模块有4个引脚,
使用Arduino的数字引脚给 SRO4 模块的 Trig引脚至少10的高电平信号,触发SR04 模块的测距功能。
触发信号10 s的高电平图3-8Arduino发送触发信号如图3-9所示,触发测距功能后,模块会自动发送 8个 40 kHz 的超声波脉并自动检测是否有信号返回。这一步由模块内部自动完成发射探头发出超声波发出8个40 kHz的超声波脉冲
超声波模块发出超声波脉冲,若有信号返回,则 Eeho 引脚会输出高电平,高电平持续的就是超声被从发射到返回的时间。此时可以使用 pulseIn 函数获取测距的结果,并计算出距被测物体的实际距离
连接图:
视频效果:
第8篇ESP32连接超声波HC-SR04点亮LED无源喇叭播放声音_哔哩哔哩_bilibili
第8篇ESP32连接超声波HC-SR04点亮LED无源喇叭播放声音
代码示范:
#include <Arduino.h>
//by txwtech
/*
SR04超声波传感器驱动串口显示检测距离
*/
// put function declarations here:
int myFunction(int, int);
const int TrigPin = 16;
const int EchoPin = 17;
const int led_pin = 5;
float distance_2;
void setup() {
// put your setup code here, to run once:
int result = myFunction(2, 3);
Serial.begin(115200);
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);//设置要检测引脚输入的脉冲宽度
pinMode(led_pin,OUTPUT);
Serial.println("Ultrasonic sensor value is:");
}
void loop() {
// put your main code here, to run repeatedly:
//产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
//检测脉冲宽度,并计算出距离
distance_2=pulseIn(EchoPin,HIGH)/58.00;
if(distance_2<10)
{
{
digitalWrite(led_pin,HIGH);
//tone(13,880,500);
//tone(13,988,500);
// tone(13,1109,500);
tone(13,1175,500);
tone(13,1319,500);
tone(13,1480,500);
tone(13,1175,500);
tone(13,1319,500);
delay(2000);
digitalWrite(led_pin,LOW);
}
}
else
{
digitalWrite(led_pin,LOW);
tone(13,0,1);
}
Serial.print(distance_2);
Serial.print("cm");
Serial.println();
delay(1000);
}
// put function definitions here:
int myFunction(int x, int y) {
return x + y;
}