esp32外部中断_玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测...
一. 電容輸入 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超聲波測距
板上接線方式,VCC、trig(控制端)、 echo(接收端)、 out(空腳)、 GND
#include
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);
}
總結
以上是生活随笔為你收集整理的esp32外部中断_玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: execv shell_shell的ex
- 下一篇: easyui框架前后端交互_easyui