OK. Wątek na razie przetrwał
, więc spróbujmy może tak.
Zakładając, że Twój pierwszy kod obsługi przerwania z odbieraniem pojedynczych znaków wysłanych przez funkcję
uart.write()działał prawidłowo, można przyjąć, że żaden znak nie jest dołączany na końcu.
Aidan napisał(a):
Przedstawione porównywanie stringów to tylko sposób żeby jakaś zmiana była widoczna po wprowadzeniu danych do robota. To co tak naprawdę chcę zrobić to przesłać string np. w postaci: "-600,-600". String byłby odbierany przez uart w robocie, następnie poprzez kod w języku C dzielony na 2 substringi, które z kolei byłyby konwertowane do postaci int. Mając zmienne całkowite mógłbym je wstawić jako parametry funkcji odpowiedzialnej za poruszanie się robota np. motor_set_speed(substring1, substring2). Także to całe porównywanie nie jest konieczne, natomiast kluczem do całej sprawy jest odebranie jakoś stringa w wyżej wymienionej postaci, oczywiście o ile jest to możliwe.
Zmodyfikowałem nieco Twoje założenia:
- funkcja motor_set_speed() przyjmuje argumenty typu int16_t, zresztą tak chyba miałeś wcześniej, nie wiem dlaczego poźniej piszesz motor_set_speed(substring1, substring2)
- format komend to ciąg znaków:
- znak '-' [opcjonalnie]
- jedna lub więcej (do czterech) cyfr
- przecinek
- znak '-' [opcjonalnie]
- jedna lub więcej (do czterech) cyfr
- znak końca transmisji '\n' obligatoryjnie
Stworzyłem następującą procedurę obsługi przerwania:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie mam oczywiście możliwości przetestowania, więc wypróbować musisz osobiście, ale myślę, że powinno zadziałać, jeśli pierwszy kod działał (i nadal działa) prawidłowo.
Sposób reakcji na sytuacje awaryjne, kiedy format odebranego ciągu nie jest zgodny z założeniem, należy ewentualnie zmienić/dopracować w zależności od potrzeb.
Docelowo napisałbym to inaczej. Głównie chodzi mi o wyniesienie interpretacji odebranego ciągu znaków do pętli głównej. Dla testów jednak taki kod powinien być wystarczająco dobry, o ile nie masz w programie oprócz niego obsługi jeszcze kilku przerwań, ewentualnie jakichś fragmentów kodu krytycznych czasowo.