Witam,
pisze program do obsługi lampki RGB na atmega8 taktowany 16MHz. Lampka sterowana jest z pilota(RC5).
Do obsługi RC5 użyłem gotowej biblioteki znalezionej na jakiejś niemieckiej stronie. Nie mogłem znaleźć źródła więc zamieszczam kod. Chyba tylko w jednym miejscu zmieniłem zmienną na volatile
https://www.dropbox.com/s/al9rkwkoqoi0bsg/rc5.chttps://www.dropbox.com/s/z3a2nfnovcxt0pq/rc5.hDiody podłączone są bezpośrednio pod uC i sterowane przy pomocy programowego PWM. Którego kod wygląda tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Chciałbym napisać program tak żeby mieć menu:
- Ustawanie ręczne kolorów
- wybór jednej z 3 diod
-wybór jednego z kolorów RGB
- zmiana wartości
- Zapamiętane konfiguracje kolorów:
- cyfry 0-9 wybór zapamiętanych
- Funkcje automatycznej zmiany kolorów:
- zdefiniowane zmiany kolorów [0-9]
- Funkcja sleep
- ustawianie czasu wyłaczenia
Jest to wstępna wersja menu. Nie wiem jak najlepiej napisać to w C. Próbowałem z wykorzystaniem instrukcji switch. Pierwszy poziom menu działał płynnie, ale już przy drugim poziomie trzeba było naciskać klawisz kilka razy, żeby został odczytany.
Następnie przerobiłem kod, w którym pierwszy poziom menu został napisany z wykorzystaniem instrukcji switch, a instrukcje danego poziomu wywoływane są z funkcji, ale ta funkcja też składa się z instrukcji switch.
Tak wygląda główna pętla programu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A tak wygląda funkcja ręcznej zmiany koloru:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie wiem czemu program nie działa do końca jak trzeba. Widziałem przepisy na menu z wykorzystaniem struktur, ale to były menu do wyświetlania. Nie bardzo mam pomysł jakbym mógł zaimplementować to u siebie. Może ma ktoś jakiś pomysł, albo jakąś wskazówkę?
Do testowania używam UARTu przez, który wysyłam komunikaty o poprawnie wykonanych instrukcjach.