Witam,
Mam problem z projektem, który muszę wykonać na uczelni, gdyż przyznam szczerze, nie do końca ogarniam temat przerwań w mikroprocesorach, a tym bardziej w Arduino Uno, w które sam się niestety wkopałem...
Do wykonania mam Sterownik diod RGB. Do czasu, gdy nie musiałem używać przerwań, to wszystko było w miarę `okej`. Jednak prowadzący uparł się, bym te przerwania wykorzystał. Powiedział, bym w moim programie do opóźnień pomiędzy zmianami kolorów diod nie używał funkcji
delay(), a zastosował przerwania właśnie. No i nie bardzo potrafię to wykonać. Jeśli byłby ktoś w stanie pomóc, to byłbym niezmiernie wdzięczny
Zamieszczę poniżej poglądowy schemat układu oraz kod programu, który aktualnie posiadam. W programie jest
if() zmieniający wartośc zmiennej `i`, która służy do wybrania podprogramu za pomocą
switch'a.
Dla
case'a 6 wykonywana jest funkcja miganie(), która oparta jest o
delay'e.
W
case'ie 7 próbowałem w funkcji policja() jakoś pozbyć się
delay'a za sprawą funkcji opoznienie().
Jednak poza tym, że nie chce to działać odpowiednio (kolory czerwony i niebieski świecą się cały czas, a przynajmniej tak to wygląda), to w dodatku prowadzący zwrócił uwagę, iż ponownie zamykam się w podprogramie i zajmuję czas procesora.
Nie bardzo wiem w jaki sposób odłączyć ten podprogram od pętli głównej, by nie zajmować czasu procesora (by w teorii można było równolegle wykonywać inne czynności)...
Prosiłbym o pomoc w rozwiązaniu tego problemu.. Każda sugestia wykonania byłaby niezmiernie dla mnie cenna
Schemat: (wejścia diod różnią się od aktualnego położenia, ponieważ tamte wykorzystywane są przez Timer1)
Kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.