Proponuję zrobić tak, żeby komenda odebrana z pilota była aktywna przez określony czas. A po tym czasie silniki zostały zatrzymane. Czas na jaki należy podtrzymać komendę, nie może być krótszy od czasu pomiędzy kolejnymi ramkami wysyłanymi z pilota.
Zamieszczam obrazek przedstawiający przebieg transmisji danych w standardzie RC5:

Widzimy, że ramka wysyłana jest co 114 ms. (Nie wiem jak to jest w konkretnych pilotach. Myślę, że jakieś uniwersalne piloty mogą mieć ten czas dłuższy). Aby działało to tak jak napisałem, spróbuj dodać w twoim kodzie, po linii 152 ten fragment:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Spowoduje on to, że po wykonaniu komendy i wyzerowaniu flagi
Ir_key_press_flag program odczeka 200 ms i sprawdzi czy w tym czasie nadleciała kolejna ramka. Jeżeli nie nadleciała, oznacza to, że pościłeś przycisk lub pilot jest poza zasięgiem i należy zatrzymać silniki.
Oczywiście umieszczony delay jest tylko w celach testu. Należało by pomyśleć jak zrealizować oczekiwanie za pomocą timera.