#define MODE 5
#define DEBOUNCE_TIME 200
void IRAM_ATTR modeISR();
volatile int mode = 0;
volatile bool modeChanged = false;
volatile unsigned long prev_press = millis();
//----------------------------------------------------------------------------------------------------------------------
void setup()
{
Serial.begin(57600);
pinMode(8, INPUT_PULLUP);
pinMode(MODE, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(MODE), modeISR, RISING);
}
//----------------------------------------------------------------------------------------------------------------------
void loop()
{
if (digitalRead(8) == LOW)
Serial.print('~');
if (modeChanged) {
modeChanged = false;
Serial.print(mode);
}
delay(100);
}
void IRAM_ATTR modeISR()
{
if (millis() - prev_press < DEBOUNCE_TIME)
return;
prev_press = millis();
mode++;
modeChanged = true;
}