Witajcie!
Wielu konstruktorów robotów w ogóle nie pokazuje swojego kodu. Po wielu nieudanych godzinach zastępowania delay'ów timer'ami odpadam. Sam nie dam rady

Aktualnie mam taki program:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wszystko działa, ale... Te delay'e... Gdy robot wykonuje któryś z manewrów - OBROT_PRAWA, OBROT_LEWA lub któryś z programów startowych (które są zapisane w instrukcji switch) nie znajdzie przeciwnika. Jest po prostu ślepy przez te delay'e i wiadomo, jak to się kończy... Przeciwnik podjeżdża i bez problemu może zepchnąć mojego robota, bo ten nie ma się jak bronić.
Pierwsza zmiana - delay'e na timer:No to pomyślałem, że można by zamienić delay'e na odliczanie czasu timer'ami i w trakcie wykonywania funkcji obrot_p, obrot_l, program_lewa, program_prawa sprawdzać czujniki. Z racji tego, że został mi ostatni wolny timer - timer0, to on zajmuje się odliczaniem czasu. Jest ustawiony w tryb CTC i daje przerwanie, co 1ms (bez przełączania wyjścia). Uznałem, że dla mnie dobrą podstawą czasu będzie 20ms (czas, w którym nie zapcham buforów TSOP'ów). Dlatego po zliczeniu zmiennej ilosc_1ms=20, inkrementuję zmienną ilosc_20ms, daję sygnał o wykonaniu pomiaru i zeruję ilosc_1ms. Wszystkie funkcje są oparte o właśnie podstawę czasu 20ms. Gdy któryś z czujników zauważy przeciwnika, to ilosc_20ms jest zwiększana do do takiej ilości, aby wyjść z wszystkich pętli. Oczywiście to nie działa i nie mam pojęcia czemu...
Druga zmiana - "paczkowanie" impulsów dla większego zasięgu czujników:Dotychczas włączałem wszystkie diody IR i modulowałem sygnał na 36kHz. To działa, ale zapycha bufory odbiorników TSOP i zmniejsza się zasięg. Postanowiłem to zmienić i dodałem tzw. "paczkowanie". Teraz wysyłam sygnał testowy (według DS), czyli 30 impulsów (bo tyle wykona się w ciągu 85us). Problem w tym, że tutaj też mam delay'e. Drugi problem, że funkcja czujnik() nie działa jeśli jest ta zmienna stan. Bez zmiennej, czyli z return'em już po samym odczycie stanu pinu działa, ale nie mam pewności czy funkcja wykonuje się do końca - czy dioda zostanie zgaszona.
Powstało coś takiego:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Będę ogromnie wdzięczny za każdą pomoc

Robot wprawdzie przechodzi na emeryturę, ale chciałbym go odstawić na półkę, jako w pełni ukończonego
