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

atmega16 dip40 - Jak zaprogramować sekwencję LED i reset przyciskami?

sekdam 08 Sie 2012 19:12 1101 0
REKLAMA
  • #1 11188350
    sekdam
    Poziom 10  
    Te porty ustawione są na wyjścia PA0..PA7, PB0..PB7, PC0..PC7, PD0...P4 do każdego z nich podłączony jest 1 LED.

    Porty PD5...PD7 ustawione są na wejścia i do każdego podłączony 1 przycisk.

    Program ma działać następująco. Gdy zostanie włączony 1 przycisk jeden raz zapali się pierwsza sekcja LED-ów, gdy przycisk nr 1 zostanie wcisnięty 2 raz następna sekcja. I tak do momentu wciśnięcia przycisku nr 13 razy. Za 14 razem LED-y powinny zgasnąć.
    Gdy podczas wykoywania instrukcji z przycisku nr1 zostanie wcisnięty przycisk nr 2 lub 3, licznik stanu przycisku nr 1 powinien być zerowany. Gdy ponownie nacisniemy przycisk nr 1 (bo użyto przycisk nr 2 lub nr 3) sekwencja zapaleń LED powinny zaczynać się od zapalenia 1 sekcji, potem 2 itd...

    Gdy zostanie wcisnięty przycisk nr 2 jeden raz LEDy będą wykonywać nieskończoną sekwencje "programu_1" (zapalenie jednych zgaszenie drugich LED-ów z opóźnieniami), gdy wcisnę przycisk nr 2 drugi raz odpali się analogicznie jak "program_1", "program_2" (zapalenie jednych, zgaszenie drugich LED-ów z opóźnieniami, innych niż w przypadku "programu_1"). Przycisk nr_2 będzie można wcisnąć powiedzmy 6 razy ("6_programów"). Za 7 wcisnięciem LED-y powinny zgasnąć.
    Gdy podczas wykoywania instrukcji z przycisku nr2 zostanie wcisnięty przycisk nr 1 lub 3, licznik stanu przycisku nr 2 powinien być zerowany. Gdy ponownie nacisniemy przycisk nr 2 (bo użyto przycisk nr 1 lub nr 3) sekwencja zapaleń LED powinny zaczynać się od zapalenia LED-ów z "programu_1, potem program_2 itd...




    Gdy zostanie wcisnięty przycisk nr 3, LED-y powinny zgasnąć, bez znaczenia czy jest aktywna któraś sekcja z przycisku nr 1 czy nr 2. Bezwarunkowe wyłącznie LED-ów. Gdy zostanie wcisnięty przycisk nr 1 lub nr 2 powinny sie wykonywać instrukcje do poszczególnych przycisków.

    Oto co do tej pory udało mi się stworzyć:

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


    Skorzystałem z gotowej biblioteki:


    PLIK buttons.c


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


    PLIK buttons.h

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


    A tutaj jest problem:

    Instrukcja switch odpowiada, który przycisk został wcisnięty.

    Case0 // został wcisniety przycisk 0 (czyli 1)

    zwiekszamy licznik przycisku o 1 aby poniżej w pierwszej instrukcji if == 1 wykonała się pierwsza procedura (czyli zapalenie 1 sekcji).

    Pierwsza sekcja LED jest uruchomiona. Teraz wciskam przycisk nr 1 , drugi raz.
    Gdzie w programie powinno być zwiększenie licznika przycisku nr 1 o jeden, zeby zapaliła sie druga sekcja? Czy w instrukji 1-go if-a? Chodzi o to żeby program sprawdził czy przycisk nr 1 jest drugi raz lub kolejne razy wcisnięty.

    Ma ktoś jakiś pomysł?
  • REKLAMA
REKLAMA