Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 kwi 2024, o 14:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 19 gru 2013, o 11:38 
Offline
Nowy

Dołączył(a): 13 maja 2013
Posty: 18
Pomógł: 0

Witam.

Program na Androidzie (sterowanie pojazdem) wysyła co kilkadziesiąt milisekund ciąg znaków w postaci <0 ><0><dana><dana>. Bez znaków CR czy LF. <0> to wg ASCII "NUL", dana to "unsigned int". Dwa zera na początku są w każdej transmisji, po niej następują dwa bajty, które mają być wykorzystane w funkcji sterującej silnikami. Mogą to być również zera (<0>) - informacja, że silniki mają prędkość zero - stop. Ma to pracować na UART, który powinien też przyjmować inne komendy. Próbuję przerobić obsługę przerwania "ISR( USART_RXC_vect )" z biblioteki Mirka, ale mi nie wychodzi. Kombinuję ze "sztuczkami" w rodzaju:

jeśli przychodzi bajt ==0 (if (!data) {zwiększ jakiś licznik}, . Jeśli ten licznik ==2 (przyszły dwa zera), zapisz dwa następne bajty do jakiegoś bufora, potem "posprzątaj po sobie" np. wyzeruj liczniki.

W idealnych warunkach - jeśli ręcznie wysyłam z terminala dokładnie takie sekwencje - to nawet działa. Ale w warunkach prawdziwych już nie jest tak różowo. Ciągle coś się komplikuje..

Czy mogę prosić o podpowiedź, jak się za to zabrać? Nie musi to być kod, będę też wdzięczny za naprowadzenie na algorytmy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 11:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

Osobiście używam biblioteki kolegi Antystatycznego topic3461.html Z własnego doświadczenia powiem tak, że lepiej czymś kończyć transmisję i sprawdzać czy się skończyła. Można pokusić się w Twoim przypadku o pominięcie tego, ponieważ masz stałą długość danych. A co jeśli zapragniesz komend AT? Lipa. Luknę do biblioteki naszego mentora i może coś podpowiem.

Może zamieść swój kod, będzie łatwiej.



Ostatnio edytowano 19 gru 2013, o 12:01 przez icer_cmg, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 11:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Nie wiem czy dobrze kolegę rozumiem, ale odsyłam do zapoznania się ze standardową ramką dla rs232 na przykład albo ramką rc5 ....

Dla rs 232 coś w ten deseń było:0
bit startu (zawsze low), bity danych, bit parzystości, bit stopu(zawse high) i chyba w tym kierunku trzeba się zastanowić, tzn ramka musi mieć określony początek ( co u Ciebie chyba jest <0><0> ..... ) i przydałby się koniec nadawania, wg mnie analiza takiej ramki byłaby prostsza i bardziej niezawodna

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 12:06 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

Ja mogę podpowiedzieć, że w Greenbooku - zostało ostatecznie opisane i do końca wyjaśnione wszystko odnośnie na prawdę przyjemnej komunikacji za pomocą ASCII ... łącznie właśnie z parsowaniem danych (czyli jak je obrabiać) ... a nawet obsługa i implementacja własnych komend AT. Myślę, że warto się zapoznać z takim podejściem - i nie chodzi o sam kod, bo w książce sporo opisuję jeśli chodzi o metodologię i podejście do samego zagadnienia.

http://atnel.pl/jezyk-c-pasja-programowania.html

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 12:21 

Pomógł: 0

Sam parsowałem dane w/g Green Booka, No i z dużą pomocą forumowych wymiataczy ;).

Poszukaj moich tematów o uarcie, może ci coś się przyda.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 12:54 
Offline
Nowy

Dołączył(a): 13 maja 2013
Posty: 18
Pomógł: 0

Dokładnie tak - przerobiłem obydwa "boki" niebieski i zielony. Używam UART głównie z komendami AT. Niestety nie cały świat tak robi. Uczę się C. Jako swojego "ATB" buduję robota, którego programowanie to dla mnie zajęcia praktyczne. Na razie steruje nim pilotem RC5 oraz poprzez UART i komendy AT. I jeszcze on sam się steruje czujnikami. Jeśli np. wysyłam znak "R5" program wywołuje funkcję, która realizuje skręt w prawo z prędkością 5. Chcę sterować nim również ze smartfona. Znalazłem kilka gotowych aplikacji na androida. Podglądałem, co one wysyłają. Niestety żadna (z tych które próbowałem) nie stosuje wysyłania tekstów do sterowania, żadna nie wysyła LF ani CR. Zastanawia mnie to. Przecież po drugiej stronie muszą to jakoś parsować. Oczywiście mogę popróbować programowania Androida (pewnie to zrobię), mogę zlecić komuś napisanie aplikacji na smartfona tak, żebym ja był zadowolony. Ale wydaje mi się, że po to uczę się tego C, żeby rozwiązywać również takie problemy.

To co podglądałem na tym forum zazwyczaj trzymało się konwencji - jakiś początek transmisji i jakiś koniec. Chyba to już potrafiłbym zrobić, wyzwaniem jest dla mnie powyższa sytuacja.



Ostatnio edytowano 19 gru 2013, o 14:27 przez min, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 13:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

Tutaj masz fajny kurs na Androida,
http://www.forbot.pl/forum/topics20/kur ... vt9135.htm

po zapoznaniu się z tym kursem spokojnie napiszesz prostą aplikację do sterowania przez Bluetooth.

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 13:32 

Pomógł: 0

Dane w sumie parsuje się prosto, narzędziami do obróbki tablic charów ;).

Mnie bardzo pomagała ta stronka http://cpp0x.pl/dokumentacja/standard-C ... nakow-C/11



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 14:19 
Offline
Nowy

Dołączył(a): 13 maja 2013
Posty: 18
Pomógł: 0

Czy w przerwaniu byłaby dopuszczalna taka operacja?

tworzę bufor cykliczny na 4 bajty
w każdym przerwaniu dana ląduje w tym buforze
w każdym przerwaniu jedną z funkcji parsujących (np "strcspn") sprawdzam, czy na początku są dwa zera - jeśli tak, to podejmuję akcję...



?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 14:31 

Pomógł: 0

No w/g mnie absolutnie, żadnego parsowania w przerywaniu, ot stosujesz system eventów, czyli ja jadę na bibliotekach Mirkowych z obsługą eventów. Następnie obrabiam bufor jak mi się podoba i robię potem z danymi co chce. A cały czas w tle mam odbieranie danych.



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO