Skocz do zawartości

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 to post
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).

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.