//2021년10월29일:Wemos LOLIN32 Lite 보드 실험
#include <WiFi.h>
#include <driver/adc.h> // for adc_power_off()
// 터치입력핀(8개)과 출력핀번호(8개)를 저장한 배열들
// gpio22핀은 내부적으로 LED에 연결되어 LOW 값에 켜진다.(역동작)
// gpio22핀을 출력핀으로 사용하는 데에는 문제가 없다.
byte inTouch[8] ={T0, T2, T3, T4, T5, T6, T7, T8};
byte outPin[8] = {22, 19, 23, 18, 17, 16, 26, 25};
// 한 번만 샘플링하면 1~2%의 확률로 0에 가까운 값이 읽히는 것 같다.
// 따라서 여러번 샘플링하여 평균값으로 판단하는 것이 안정적이다.
// SAMPLES가 20이면 loop()함수 한 번 실행 시간이 76ms 정도이다.
// 30이면 113ms 정도이다.
#define SAMPLES 20
// touchRead() 평균값이 아래 문턱값 이하이면 터치된 걸로 판단
#define THRESHOLD 20
void setup() {
// 소모전력을 줄이기 위해서 WiFi와 bt는 끈다.
// ADC도 사용하지 않으므로 꺼야 한다.
adc_power_off();
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
btStop();
// 출력핀들을 OUTPUT으로 설정한다.
for(byte k=0;k<8;k++){
pinMode(outPin[k], OUTPUT);
}
//아래의 (1),(2),(3)은 소요시간을 확인하기 위한 코드
//Serial.begin(115200); delay(100);//(1)
}
void loop() {
//int tm = millis();//(2)
for(byte k=0;k<8;k++) {
int totalRead = 0;
for(byte n=0; n<SAMPLES; n++) {
totalRead += touchRead(inTouch[k]);
}
int averageRead = totalRead/SAMPLES;
digitalWrite(outPin[k], averageRead<THRESHOLD);
}
//Serial.println(millis()-tm);//(3)소요 시간 표시
}
'하드웨어 > ESP32' 카테고리의 다른 글
teensy4.1+audio board with ESP32 touch sensing (0) | 2021.11.12 |
---|---|
Lolin32+ OLED display(I2c) example (0) | 2021.11.12 |
ESP32보드를 아두이노IDE로 코딩하기 (0) | 2021.01.28 |