Witam wszystkich.
Na początek powiem, że nie jestem jeszcze zbyt biegły w programowaniu, dlatego proszę o wyrozumiałość czytając mój kod. Prawdopodobnie dałoby się go napisać znacznie prościej używając innych funkcji i zmiennych, ale ciągle się jeszcze uczę.
Mój problem polega na tym, że kod programu nie działa do końca tak jak trzeba.
Program ma za zadanie odczyt ciągu danych przesłanych poprzez BT z telefonu i w zależności od wartości sterowanie prędkością i kierunkiem 2-ch silników M1 i M2. Te silniki napędzają czołg na gąsienicach. W telefonie mam zainstalowany program "BlueTooth Electronics". Można w nim w bardzo łatwy sposób tworzyć własne programy, które w zależności od użytych elementów wysyłają poprzez bluetooth dane do przejściówki BTM222 dalej przez RS232 do Atmegi. W moim przypadku jest to Atmega32. W moim programie wykorzystuję żyroskop w telefonie do sterowania silnikami.
Przykłądowo mój program wysyła ciąg danych np. "k12.35k". Oznacza to, że telefon test pochylony do tyłu o 12,35 stopnia. litery "k" są znacznikiem początku i końca wysyłanych danych z żyroskopu. Może być też ciąg danych "k-7.32k". Oznacza to, że telefon jest pochylony do przodu o 7,32 stopnia.
Odczyt stopni i sterowanie prędkością silników działa ok. Przy wychyleniu telefonu do tyłu też jest ok. Problem pojawia się gdy pochylam telefon do przodu i ciąg danych jest ze znakiem "-". Wówczas co jakiś czas pojawiają się błędy. Silniki kręcą się do przodu i za chwile do tyłu. Nie potrafię zlokalizować błędu. Próbowałem pisać programy już na różne sposoby, ale efekt jest ten sam.Poniżej kod programu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Oraz funkcja dokonująca zamiany znaków ascii na liczby. Wiem że dałoby się to pewnie zrobić za pomocą funkcji ITOA, ale nie wychodziło mi to, więc napisałem swoją funkcję:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funkcja uart_getc(); z książki Pana Mirka i bufor o rozmiarze 64. Przy buforze w rozmiarze 32 efekt pracy programu jest ten sam. Poniżej jeszcze zrzuty z ekranu telefonu podczas pochylania telefonu. W lewym okienku są dane wysyłane przez mój program na telefon.
s-oznacza stop silników
t-oznacza jazdę do tyłu
p-oznacza jazdę do przodu
W prawym okienku są dane wysyłane przez telefon do atmegi.