Skocz do zawartości

Obsługa przerwań na ESP32 z Arduino IDE


krzyusztofp

Pomocna odpowiedź

Witam serdecznie,
potrzebuję  małej pomocy przy przerwaniach programując ESP32 przy pomocy Arduino IDE. Chciał bym liczyć ilość wciśnięć przycisku za pomocą przerwań. Po wciśnięciu przycisku wyświetla się napis że przycisk został wciśnięty. Jednak po puszczeniu przycisku ponownie wyświetlany jest komunikat o wciśnięciu przycisku. Fizycznie przycisk został wciśnięty 7 razy a wyświetla się że był wciśnięty 14 razy. Może ktoś ma pomysł jak rozwiązać wskazany problem?

#define DEBOUNCE_TIME 250
volatile uint32_t DebounceTimer = 0;

#define PIN_BUTTON 12
uint32_t button_count = 0;

void IRAM_ATTR buttonpressed() {
  if ( millis() - DEBOUNCE_TIME  >= DebounceTimer ) {
    DebounceTimer = millis();
    button_count += 1;
    Serial.printf("Przycisk wciśnięty %u razy.\n", button_count);
  } 
}

void setup() {
  Serial.begin(115200);
  pinMode(PIN_BUTTON, INPUT_PULLUP);
  attachInterrupt(PIN_BUTTON, buttonpressed, FALLING);
}

void loop() {
}

 

Przechwytywanie.PNG

Link do komentarza
Share on other sites

@krzyusztofp Używanie w przerwaniu funkcji jak print na AVR nie jest poprawne, a z ESP pewnie też. W przerwaniu powinna być możliwie krótka funkcja. Typ zbocza jest ok.

A zobacz co się stanie jak wyrzucisz debouncer programowy, dasz sprzętowy (prosty filtr RC) i przerzucisz print do głównej pętli (w przerwaniu zostanie sama inkrementacja).

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.