玩转 ESP32 + Arduino 4.电容按键 霍尔传感器 外部中断 延时 脉冲检测

一. 电容输入 touchRead(pin) 及电容输入中断touchAttachInterrupt(pin, TSR , threshold)

ESP32专门提供了电容触摸传感器的功能, 共有T0,T2~T9 共 9个touch传感器可用.分别对应引脚4、2、15、13、12、14、27、33、32. 无需设置PinMode

touchRead(pin)
返回值 0~255. 触摸强度
注意: 摸得越瓷实,数值越小
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
   Serial.printf("touch:%d\n",touchRead(4));
}

touchAttachInterrupt(pin, TSR , threshold)
参数:
TSR :中断回调函数, 不能带参数, 不能有返回值。
threshold:阈值, 达到该阈值会触发此中断
void TSR()
{
  Serial.printf("我被按下了!\r\n");
}
 
void setup()
{
  Serial.begin(9600);
  touchAttachInterrupt(4, TSR , 20);
}
 
void loop()
{
  
}

二. 霍尔传感器

ESP32自带霍尔传感器 , 当有磁场靠近时,会显示正负值
hallRead()


三. 外部中断

1. 开启外部中断 attachInterrupt(pin,function,mode);
参数:
pin: 外部中断引脚
function : 外部中断回调函数
mode : 5种外部中断模式, 见下表:
中断触发模式 说明
RISING 上升沿触发
FALLING 下降沿触发
CHANGE 电平变化触发
ONLOW 低电平触发
ONHIGH 高电平触发
void func1()
{
  Serial.printf("按键中断触发");
  }
void setup()
{
  Serial.begin(9600);
  attachInterrupt(0,func1,FALLING);
}
 
void loop()
{
  
}

2. 关闭引脚中断 detchInterrupt(pin);
无返回值

四. 时间统计函数

1. 开机至今的毫秒数 millis
millis() 返回值是unsigned long 类型, 大约50天溢出一次

2. 开机至今的微秒数 micros
micros() 返回值是unsigned long 类型, 大约70分钟溢出一次

五. 阻塞延时

时间控制函数
由于我们接下来的实验程序很多都用到延时函数,那么这里就介绍几个:

delay() ----- 毫秒级延时
delayMicroseconds() ----- 微秒级延时

硬件定时器相关请见第六篇

六. 引脚脉冲信号检测 pulseIn()

pulseIn(pin,state)
pulseIn(pin,state,timeout)
参数:
pin : 引脚
state : 脉冲类型, 可选高或者低
timeout : 超时时间, 默认1秒钟. 单位为微秒, 无符号长整型.
返回值: 脉冲宽度, 单位微秒, 数据类型为无符号长整型. 如果超时返回0

例: 使用SR04超声波测距
玩转 ESP32 + Arduino 4.电容按键 霍尔传感器 外部中断 延时 脉冲检测

板上接线方式,VCC、trig(控制端)、 echo(接收端)、 out(空脚)、 GND
玩转 ESP32 + Arduino 4.电容按键 霍尔传感器 外部中断 延时 脉冲检测

#include <Arduino.h>
int distance = 0;
void setup()
{
  Serial.begin(115200);
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
}
 
void loop()
{
  digitalWrite(4, HIGH);
  delayMicroseconds(20);
  digitalWrite(4, LOW);
  distance = pulseIn(18,HIGH)/58;
  Serial.printf("当前距离是:%d cm",distance);
  delay(1000);
}

————————————————
链接:https://blog.csdn.net/finedayforu/article/details/108465009
- 本文内容来自网络,如有侵权,请联系本站处理。

2023-08   阅读(244)   评论(0)
 标签: ESP32 Arduino 传感器

涨知识
递归

递归简单点来说,就是一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

评论:
相关文章
基于STEAM教育和设计思维的初中化学跨学科实践活动——基于血氧指标控制的简易供氧器设计与制作

这篇文章展示了如何将化学与工程、信息技术、现代制造技术紧密结合,以“血氧指标控制的简易供氧器”为载体,组织一次真实的跨学科项目。设计中突出“从需求出发”“闭环控制”“可视化反馈”,不仅呼应了新课标中“跨学科实践”的要求,更贴近生活实际需求,尤其适用于对科技应用、健康关怀有兴趣的学生群体,可作为项目式学习或社团活动的优质课例。


【ESP32 C++教程】Unit7-2:OLED显示屏

本节主要讲解OLED显示屏的使用和Display类及派生类的介绍及使用。


【ESP32 C++教程】Unit7-1:四位7段式数码管

本节主要讲解用TM1650来驱动四位7段式数码管模块的显示使用。


【ESP32 C++教程】Unit6-4:资源互斥访问

本节主要讲解FreeRTOS任务间如何使用互斥对象来实现资源互斥访问。


ESP32 Guru Meditation Error报错定位分析

在ESP32的开发,经常会有系统崩溃一直重启的情况,那么如何快速定位出现异常的代码呢?


【ESP32 C++教程】Unit6-3 FreeRTOS任务间通信

本节主要讲解FreeRTOS任务间如何使用消息队列、事件组和二进制信号量进行通信。


【ESP32 C++教程】Unit6-2 FreeRTOS多任务

本节主要讲解Task类,FreeRTOS多任务的使用。


【ESP32 C++教程】Unit6-1 定时器

本节主要讲解Timer类,FreeRTOS定时器的使用。


【ESP32 C++教程】Unit5-2 执行器件之舵机

本节主要讲解舵机驱动类和用按键控制舵机。


【ESP32 C++教程】Unit5-1 执行器件之继电器

本节主要讲解执行器件类型和用按键控制继电器。