1. 程式人生 > 實用技巧 >Arduino ESP32

Arduino ESP32

參考:https://blog.csdn.net/finedayforu/article/details/108465009

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));
}

引數:

  • 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 <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);