ESP32 GPIO Interrupts: Skirtumas tarp puslapio versijų

Iš Žinynas.
Jump to navigation Jump to search
(Naujas puslapis: ESP32 provides up to 32 interrupt slots for each core. Each interrupt has a certain priority level and can be classified into two types. Hardware interrupts – These occur in r...)
 
 
7 eilutė: 7 eilutė:
 
All GPIO pins in an ESP32 board can be configured to act as interrupt request inputs.
 
All GPIO pins in an ESP32 board can be configured to act as interrupt request inputs.
  
'''Button example''':
+
'''Button example''' (pin 18):
  
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">

Dabartinė 23:32, 26 lapkričio 2022 versija

ESP32 provides up to 32 interrupt slots for each core. Each interrupt has a certain priority level and can be classified into two types.

Hardware interrupts – These occur in response to an external event. For example, a GPIO interrupt (when a key is pressed) or a touch interrupt (when touch is detected).

In ESP32 we can define an interrupt service routine function that will be called when the GPIO pin changes its logic level.

All GPIO pins in an ESP32 board can be configured to act as interrupt request inputs.

Button example (pin 18):

struct Button {
  const uint8_t PIN;
  uint32_t numberKeyPresses;
  bool pressed;
};


Button button1 = {18, 0, false};

//variables to keep track of the timing of recent interrupts
unsigned long button_time = 0;  
unsigned long last_button_time = 0; 


void IRAM_ATTR isr() {
    button_time = millis();
    if (button_time - last_button_time > 250)
    {
        button1.numberKeyPresses++;
        button1.pressed = true;
        last_button_time = button_time;
    }
}

void setup() {
  Serial.begin(115200);
  pinMode(button1.PIN, INPUT_PULLUP);
  attachInterrupt(button1.PIN, isr, FALLING);
}

void loop() {
   if (button1.pressed) {
        Serial.printf("Button has been pressed %u times\n", button1.numberKeyPresses);
        button1.pressed = false;
    }
}