玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测
一. 電容輸入 touchRead(pin) 及電容輸入中斷touchAttachInterrupt(pin, TSR , threshold)
ESP32專門提供了電容觸摸傳感器的功能, 共有T0,T2~T9 共 9個(gè)touch傳感器可用.分別對(duì)應(yīng)引腳4、2、15、13、12、14、27、33、32. 無(wú)需設(shè)置PinMode
touchRead(pin)
返回值 0~255. 觸摸強(qiáng)度
注意: 摸得越瓷實(shí),數(shù)值越小
touchAttachInterrupt(pin, TSR , threshold)
參數(shù):
- TSR :中斷回調(diào)函數(shù), 不能帶參數(shù), 不能有返回值。
- threshold:閾值, 達(dá)到該閾值會(huì)觸發(fā)此中斷
二. 霍爾傳感器
ESP32自帶霍爾傳感器 , 當(dāng)有磁場(chǎng)靠近時(shí),會(huì)顯示正負(fù)值
hallRead()三. 外部中斷
1. 開啟外部中斷 attachInterrupt(pin,function,mode);
參數(shù):
- pin: 外部中斷引腳
- function : 外部中斷回調(diào)函數(shù)
- mode : 5種外部中斷模式, 見(jiàn)下表:
| RISING | 上升沿觸發(fā) |
| FALLING | 下降沿觸發(fā) |
| CHANGE | 電平變化觸發(fā) |
| ONLOW | 低電平觸發(fā) |
| ONHIGH | 高電平觸發(fā) |
2. 關(guān)閉引腳中斷 detchInterrupt(pin);
無(wú)返回值
四. 時(shí)間統(tǒng)計(jì)函數(shù)
1. 開機(jī)至今的毫秒數(shù) millis
millis() 返回值是unsigned long 類型, 大約50天溢出一次
2. 開機(jī)至今的微秒數(shù) micros
micros() 返回值是unsigned long 類型, 大約70分鐘溢出一次
五. 阻塞延時(shí)
時(shí)間控制函數(shù)
????由于我們接下來(lái)的實(shí)驗(yàn)程序很多都用到延時(shí)函數(shù),那么這里就介紹幾個(gè):
delay() ----- 毫秒級(jí)延時(shí)
delayMicroseconds() ----- 微秒級(jí)延時(shí)
硬件定時(shí)器相關(guān)請(qǐng)見(jiàn)第六篇
六. 引腳脈沖信號(hào)檢測(cè) pulseIn()
pulseIn(pin,state)
pulseIn(pin,state,timeout)
參數(shù):
- pin : 引腳
- state : 脈沖類型, 可選高或者低
- timeout : 超時(shí)時(shí)間, 默認(rèn)1秒鐘. 單位為微秒, 無(wú)符號(hào)長(zhǎng)整型.
返回值: 脈沖寬度, 單位微秒, 數(shù)據(jù)類型為無(wú)符號(hào)長(zhǎng)整型. 如果超時(shí)返回0
例: 使用SR04超聲波測(cè)距
板上接線方式,VCC、trig(控制端)、 echo(接收端)、 out(空腳)、 GND
#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āng)前距離是:%d cm",distance);delay(1000); }總結(jié)
以上是生活随笔為你收集整理的玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 缩略词含义(实习记录)
- 下一篇: 批量新建文件夹/文本文档