Witam.
Piszę aplikację w języku C służącą do komunikacji mikrokontrolera AVR XMEGA32A4 poprzez interfejs UART/USART. Docelowo interfejs ten ma być połączony z modułem Bluetooth i służyć do komunikacji z telefonem. Aplikacja na telefonie sterowałaby mikrokontrolerem i urządzeniami peryferyjnymi podpiętymi pod niego poprzez wysyłanie odpowiednich komend. Do napisania aplikacji skorzystałem z pomocy książki Tomasza Francuza "AVR. Praktyczne projekty" i wykorzystałem opisany tam kod, odpowiednio dostosowując go do swojego mikrokontrolera. Wykorzystany tam jest bufor nadawczy i odbiorczy danych.
Rozwiązanie to działa świetnie przy maksymalnie 2 komendach, które należy wykryć (np. AT+LEDON, AT+LEDOFF) oraz komendy default-owej (Nieznane polecenie).
Niestety problem pojawia się w przypadku, gdy chcę wykrywać więcej niż 2 komendy, czyli w przypadku gdy dopisuję kolejne warunki w instrukcji switch. W tym przypadku komendy nie są wykrywane, w odpowiedzi na wysłane komendy zawsze otrzymuję odpowiedź default-ową, czyli "Nieznane polecenie". Przypuszczam, że błąd mogą powodować funkcje TranslateCommand oraz GetToken, które służą do porównania otrzymanej komendy z tablicą komend oraz określają numer indeksu. Spędziłem sporo czasu na wykrycie tego błędu, niestety nie dałem rady, stąd bardzo proszę o pomoc.
Piszę aplikację w języku C służącą do komunikacji mikrokontrolera AVR XMEGA32A4 poprzez interfejs UART/USART. Docelowo interfejs ten ma być połączony z modułem Bluetooth i służyć do komunikacji z telefonem. Aplikacja na telefonie sterowałaby mikrokontrolerem i urządzeniami peryferyjnymi podpiętymi pod niego poprzez wysyłanie odpowiednich komend. Do napisania aplikacji skorzystałem z pomocy książki Tomasza Francuza "AVR. Praktyczne projekty" i wykorzystałem opisany tam kod, odpowiednio dostosowując go do swojego mikrokontrolera. Wykorzystany tam jest bufor nadawczy i odbiorczy danych.
Rozwiązanie to działa świetnie przy maksymalnie 2 komendach, które należy wykryć (np. AT+LEDON, AT+LEDOFF) oraz komendy default-owej (Nieznane polecenie).
Niestety problem pojawia się w przypadku, gdy chcę wykrywać więcej niż 2 komendy, czyli w przypadku gdy dopisuję kolejne warunki w instrukcji switch. W tym przypadku komendy nie są wykrywane, w odpowiedzi na wysłane komendy zawsze otrzymuję odpowiedź default-ową, czyli "Nieznane polecenie". Przypuszczam, że błąd mogą powodować funkcje TranslateCommand oraz GetToken, które służą do porównania otrzymanej komendy z tablicą komend oraz określają numer indeksu. Spędziłem sporo czasu na wykrycie tego błędu, niestety nie dałem rady, stąd bardzo proszę o pomoc.
Kod: C / C++