logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

INT0 reagowanie na dwukrotne naciśnięcie przycisku

TomXV 13 Lut 2012 19:01 1091 2
REKLAMA
  • #1 10540925
    TomXV
    Poziom 12  
    Posty: 84
    Ocena: 1
    Witam,
    Potrzebuje napisać kod który zaraguje zarówno na pojedyncze naciśnięcie przycisku jak i podwójne w przerwaniu INT0.
    Najprościej ujmując chcę napisać program:
    W przypadku pojedynczego wciśnięcia przycisku ma zaświecić diode 1 a w przypadku podwójnego diodę 2. Nie mogę zrobić zmiennej globalnej liczącej ilość wciśnięć poniewaz program będzie przebywał jakiś czas w funkcji przerwania np. zapal diodę odczekaj 1 sekunde zgaś (wiem, że można to zrobić innaczej ale to jest takie uproszczenie programu).

    Mój pomysł napodkał następujące problemy:
    Obsługa przerwań funckją ISR() blokuje inne przerwania w momencie wykonywania kodu, więc niezareaguje na podwójne naciśnięcie.
    INTERRUPT() pozwala na wywołanie innego przerwania w trakcie obsługi pierwszego. Lecz potem wraca do pierwszego i wykonuje dalszy kod.

    Czy istnieje jakiś prosty sposób by wykonać coś takiego?
  • REKLAMA
  • #2 10541913
    jarek_lnx
    Poziom 43  
    Posty: 22641
    Pomógł: 4183
    Ocena: 6070
    Zatrzymywanie programu w przerwaniu to zły pomysł, i jak sam zauważyłeś takie "uproszczenie" komplikuje całą resztę programu.

    Czy wiesz już jak rozróżniać dwa pojedyncze i jedno podwójne - po czasie pomiędzy nimi - będziesz potrzebował jakiegoś timera.
    I jeśli mają być to dwa niezależne zdarzenia to po pierwszym naciśnięciu musisz zaczekać czy nie pojawi się drugie i dopiero wtedy zaświecić odpowiednią diodę.
    Użycie przerwania od timera, pozwoliło by tu uprościć ten i tak prosty program.
  • #3 10542043
    TomXV
    Poziom 12  
    Posty: 84
    Ocena: 1
    Obsługa tego w przerwaniu wynika z tego, że układ będzie zasilany bateryjnie i będzie pozostawał w uśpieniu do czasu wywołania przerwania INT.

    Aby uniknąć drgań styków mam zamiar zastosować kondensator.

    Mój aktualny pomysł wygląda następująco:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA