volatile uint8_t isrFlag = 0;
static constexpr byte BTN_PIN = 32; // Подтянутый через внешний R к 3,3 В (При нажатии замыкается на землю)
void IRAM_ATTR btnISR(){
isrFlag = 1;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(BTN_PIN, INPUT);
attachInterrupt(BTN_PIN, btnISR, FALLING);
}
void loop() {
static uint16_t btnCnt = 0;
static char mode = 'i'; // 'i' 'o' 'a' Вход Выход Аналог
// Пееключение режимов 'i' 'o' 'a' Вход Выход Аналог
if(Serial.available()){
byte ser = Serial.read();
if(ser == 'i'){
pinMode(BTN_PIN, INPUT);
mode = 'i';
Serial.print("Mode = "); Serial.println(mode);
}
if(ser == 'o'){
pinMode(BTN_PIN, OUTPUT);
mode = 'o';
Serial.print("Mode = "); Serial.println(mode);
}
if(ser == 'a'){
mode = 'a';
Serial.print("Mode = "); Serial.println(mode);
}
}
// Проверка, что работает analogRead
if (mode == 'a'){
int a = analogRead(BTN_PIN);
Serial.print("A = "); Serial.println(a);
}
// Проверка, что работает кнопка digitalRead
if (mode == 'i' && digitalRead(BTN_PIN) == LOW)
Serial.println(btnCnt++);
// Проверка, что работает прерывание
if(isrFlag != 0){
isrFlag = 0;
Serial.println("ISR");
}
delay(500);
}