newman Napisano Wrzesień 24, 2010 Udostępnij Napisano Wrzesień 24, 2010 witam,mam złożonego robota na przerobionych serwach bez elektroniki ( l293dne ), do tego moduły radiowe MOBOT-RCR-V2 i MOBOT-RCR-USB-V2. Wszystko ładnie działa, do tej pory sterowanie odbywa się na zasadzie odbioru znaku po RS-232 na procku 8 bitowym ( tu akurat attiny2313 ) i w przerwaniu ustawieniu odpowiedniego trybu jazdy: ISR(USART_RX_vect) { char ReceivedByte; ReceivedByte = UDR; if(ReceivedByte==0x5D) { if(OCR1A<10000)OCR1A+=100; if(OCR1B<10000)OCR1B+=100; } if(ReceivedByte==0x5B) { if(OCR1A>0) OCR1A-=100; if(OCR1B>0) OCR1B-=100;} if(ReceivedByte==0x77) { PORT_STER = 0x21;}// 0010 0001 if(ReceivedByte==0x73) { PORT_STER = 0x42;} // 0100 0010 if(ReceivedByte==0x61) { PORT_STER = 0x41;}// 0100 0001 if(ReceivedByte==0x64) { PORT_STER = 0x22;} // 0010 0010 if(ReceivedByte==0x78) { PORT_STER =0x00;} } czyli po wciśnięciu odpowiedniego klawisza jedzie do przodu/tyłu/obrót w lewo/obrót w prawo - praca ciągła aż do wystąpienia znaku stop i wyzerowania portu sterującego. Tutaj chciałbym zrobić coś na zasadzie wciskam odpowiedni klawisz i jedzie do przodu, puszczam go to przestaje jechać. To są praktycznie cały czas wysyłane znaki po rs'ie, więc myślałem, że najprościej można by było zrobić to tak: if ( znak==do_przodu ) { jedz_do_przodu(); delayms(x) ; stop(); } gdzie x to dobrane praktycznie opóźnienie ( może ten delay powinien być zsynchronizowany z częstotliwością odbioru znaku ? ) nie wiem czy jest to eleganckie rozwiązanie i czy nie można tego zrobić jakoś lepiej ? I druga sprawa jak by tu dodać płynne ruszanie, czyli trzymam klawisz zaczyna się rozpędzać, puszczam to staje. I kolejne pytanie: mam joystick usb, który bardzo łatwo można uruchomić w LabView, gdzie zczytywane są wartości jego położenia X, Y. liczby z zakresu -32 000 do +32 000 z groszami ( 16 bitów ). Można bardzo łatwo otworzyć port szeregowy w LV i przesłać w tym wypadku 4 pakiety danych ( razem 32 bity,po 2 pakiety na oś ). I tutaj też moje pytanie jak to dobrze zrealizować, że np. im bardziej wychylam do przodu tym z większą prędkością zaczyna jechać, potem np. na maksymalny wychyleniu do przodu skręcam w lewo ( pojawia się składowa X ) i zaczyna skręcać. Maksymalne wychylenie w lewo to np. obrót w lewo w okół swojej własnej osi. Może wykonać odpowiednią tabelę z warunkami wartości położeń, i w każdej komórce tej tabeli było by również odpowiednie ustawienie wypełnienia PWM ? Jak tutaj jeszcze zrealizować przesłanie 32 bitów ? wcisnąć to jakoś do jakiegoś bufora, po odebraniu 32 bitów wyzerować ten bufor i zapisywać do niego od nowa ? Z góry dziękuję za odp. i wszelkie podpowiedzi pozdrawiam Link do komentarza Share on other sites More sharing options...
mactro Wrzesień 24, 2010 Udostępnij Wrzesień 24, 2010 Możesz napisać sobie aplikację sterującą na kompa. Kiedy naciskasz klawisz, to wysyła komendę jazdy w odpowiednim kierunku, kiedy go puszczasz wysyła komendę stop. W .net jest gotowy komponent do obsługi portu szeregowego, więc taki program można w godzinkę napisać Dodatkową zaletą takiego rozwiązania jest to, że możesz sobie łatwo rozbudować komendy wysyłane po RSie. Np. wysyłasz komendę "jedź naprzód" a po niej parametr z jaką prędkością. Link do komentarza Share on other sites More sharing options...
newman Wrzesień 24, 2010 Autor tematu Udostępnij Wrzesień 24, 2010 hej,no w labview już mam ogarnięte otwieranie portu szeregowe, także z tym nie ma problemów, kwestia tego jak to dokładnie wysłać i w jaki sposób to zrealizować i zinterpretować na uC. pozdro [ Dodano: 25 Wrz 10 11:11 ] może jak pokażę jadącego robocika, to ktoś chętniej pomoże 🙂 całość jeździ na algorytmie podanym wcześniej if ( znak==do_przodu ) { jedz_do_przodu(); delayms(x) ; stop(); } ale coś zrywa przy ruszaniu, tzn. lekko rusza , chwila stopu i potem już jedzie normalnie, aż do puszczenia klawisza. pozdrawiam Link do komentarza Share on other sites More sharing options...
Chechli Wrzesień 25, 2010 Udostępnij Wrzesień 25, 2010 Ja bym na twoim miejscu zrealizował radę mactra, na uC wszystko działa tak jak wcześniej, tyle, że sygnał stopu jest wysyłany po puszczeniu klawisza, wszystko powino działać i nie wysyłasz niepotrzebnie nadmiaru danych. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »