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

[ATmega8][C] - Odróżnianie kolejności naciśnięcia przycisków

met.drp 19 Lis 2014 20:09 1122 4
  • #1 14146726
    met.drp
    Poziom 2  
    Witam forumowiczów

    Od jakiegoś czasu zmagam się z pewnym problemem, na który brakuje mi już pomysłu... Ogólnie założenia są proste:
    Dwa klawisze powiedzmy KEY1 i KEY2, oraz dwie możliwe kombinacje w jakiej kolejności możemy je załączyć:

    Najpierw naciskamy KEY1 i nie puszczając go naciskamy KEY2 -> wykonuje się jakaś operacja, aż do czasu zwolnienia KEY1 albo KEY2

    lub,

    Najpierw naciskamy KEY2 i nie puszczając go naciskamy KEY1 -> wykonuje się jakaś inna operacja, również do czasu zwolnienia KEY1 albo KEY2

    Próbowałem stworzyć taki kod w oparciu o bibliotekę "Zaawansowana obsługa klawiatury ARM, AVR, PIC i inne" udostępnionej przez Deucalion i mimo uruchomienia jej dalej ciężko jest mi coś takiego stworzyć.
    Konkretnie potrzebuję pomocy w napisaniu: funkcji która reaguje na naciśnięcie oraz na zwolnienie danego przycisku(+debouncing oczywiście) oraz funkcji, która rozróżni kolejność załączania KEY1 oraz KEY2 :idea:

    Pozdrawiam i liczę na Waszą pomoc.
  • #2 14146771
    michalko12
    Specjalista - Mikrokontrolery
    Nie ma problemu, wstaw kod ze swoich prób, a dostaniesz pomoc w rozwiązaniu problemu.
  • Pomocny post
    #3 14146850
    Imekxus
    Poziom 19  
    Kod: text
    Zaloguj się, aby zobaczyć kod


    jak się brzydzisz instrukcją goto możesz pomyśleć nad zmienną bool pamiętającą wejście do drugiej pętli while, podałem ogólną ideę programu
  • #4 14146865
    met.drp
    Poziom 2  
    keyb.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    keyb.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Efekt działania jest taki, że dioda po zwarciu KEY1, a później KEY2 do masy miga z różną częstotliwością, nieregularnie :|
  • Pomocny post
    #5 14147141
    michalko12
    Specjalista - Mikrokontrolery
    Spróbuj ten kod /nietestowany/

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jeśli chodziło Ci o inny efekt końcowy to lepiej opisz.

    Pamiętaj o tym, że funkcja GetKeys() działa w oparciu o autorepetycje, czyli co jakiś czas zwracana jest wartość wciśniętych klawiszy.


    Tutaj jeszcze druga wersja

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA