Zmodyfikowana wersja softu ze zderzakami – tym razem użyłem przerwań i w przypadku kliknięcia przeszkody – w przerwaniu zmieniam pomocniczą zmienną informującą o konieczności cofnięcia i zmiany kierunku ruchu. Działa nieźle.
Poprzednia wersja softu prowadziła pojazd w danym kierunku z wykorzystaniem funkcji delay(ileś-tam), a dopiero potem sprawdzała przyciski (mikrostyki) – to powodowało, że gdy zderzenie nastąpiło w czasie jazdy, to takie zdarzenie mogło nie być zarejestrowane (nie zawsze się zdarzało, że przycisk pozostawał wciśnięty po zakończenia delay). Tutaj rozwiązałem to za pomocą dwóch przerwań… wiem – za dużo, już w głowie mam lepszy algorytm, bez przerwań, ale to w następnym odcinku.
Dla bardziej dociekliwych:
#define LEFT_BTN 2 #define RIGHT_BTN 3
(w przypadku Arduino UNO przerwania tylko dla pinów 2 i 3), dalej:
pinMode(LEFT_BTN, INPUT_PULLUP); pinMode(RIGHT_BTN, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(LEFT_BTN), turn_right, LOW); attachInterrupt(digitalPinToInterrupt(RIGHT_BTN), turn_left, LOW);
to w setup()ie,
a dwie funkcje turn_left() i turn_right() zmieniają pomocnicze zmienne nakazujące zmianę kierunku ruchu (w funkcji loop).