Szuszy Napisano Październik 7, 2010 Udostępnij Napisano Październik 7, 2010 Nie mogę rozgryść co zrobić gdy robot wypadnie z toru podczas pokonywania kątu prostego 🙁 . Chodzi tu o program. Co zrobić żeby LF wykonał poprzednią czynność "gdy straci linie" podczas zakrętu ❓ Cytuj Link do komentarza Share on other sites More sharing options...
Nawyk Październik 7, 2010 Udostępnij Październik 7, 2010 Z każdym odczytem możesz przypisywać jednej zmiennej wartość gdy linia jest po prawej (np. 1) lub lewej (0) stronie - dzięki temu będziesz wiedział, w którą stronę robot musi się obracać (z której strony widział linię ostatni raz). Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 7, 2010 Udostępnij Październik 7, 2010 Przy każdym przejściu pętli, gdy robot jest nad torem zapisuj sobie aktualny stan czujników, gdy nagle stracisz z czujników linie, sięgasz do zmiennej, w której masz ostatnią poprawną pozycję robota nad linią. Na tej podstawie decydujesz o sposobie powrotu na trasę. Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Październik 7, 2010 Udostępnij Październik 7, 2010 Ja robiłem tak jak Nawyk, zmienna bit i zapisywanie 0,1. Cytuj 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
Szuszy Październik 8, 2010 Autor tematu Udostępnij Październik 8, 2010 Tyle to ja wiem 😉 tylko mam problem jak napisać do tego program 🙁 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 8, 2010 Udostępnij Październik 8, 2010 Co w tym trudnego 😉? Przecież to jeden if z elsem. Jak sterujesz robotem (if, case, PID), powiedz jak wygląda Twój kod to coś doradzimy? Cytuj Link do komentarza Share on other sites More sharing options...
Szuszy Październik 8, 2010 Autor tematu Udostępnij Październik 8, 2010 Oto jest program: $regfile = "2313def.dat" $crystal = 4000000 '$noramclear Config Portb = Output Config Portd = Input Portb = &B00000000 Portd = &B00000000 Motor_lp Alias Portb.0 Motor_lt Alias Portb.1 Motor_pp Alias Portb.3 Motor_pt Alias Portb.2 Sensor_p Alias Pind.2 Sensor_s Alias Pind.5 Sensor_l Alias Pind.4 Do If Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 1 Then 'go along Gosub Go Elseif Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then 'turn left Gosub Lewt Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'turn left Gosub Lewt Elseif Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 0 Then 'turn right Gosub Righ Elseif Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'turn right Gosub Righ End If Loop Go: Motor_lt = 1 Motor_pt = 1 Return Lewt: Motor_lt = 0 Motor_pt = 1 Return Righ: Motor_lt = 1 Motor_pt = 0 Return Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Październik 8, 2010 Udostępnij Październik 8, 2010 Dim zmienna as bit Do If Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 1 Then 'go along Gosub Go Elseif Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then 'turn left Zmienna = 0 Gosub Lewt Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'turn left Gosub Lewt Elseif Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 0 Then 'turn right Zmienna = 1 Gosub Righ Elseif Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'turn right Gosub Righ End If Loop Wtedy wiesz z której strony czujnik widział jako ostatni linię potem możesz dodać: Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 0 Then 'turn right If Zmeinna = 1 then Gosub Righ Else Gosub lewt End if 1 Cytuj Link do komentarza Share on other sites More sharing options...
Szuszy Październik 9, 2010 Autor tematu Udostępnij Październik 9, 2010 Czyli program ma wyglądać tak: ❓ $regfile = "2313def.dat" $crystal = 4000000 '$noramclear Config Portb = Output Config Portd = Input Portb = &B00000000 Portd = &B00000000 Motor_lp Alias Portb.0 Motor_lt Alias Portb.1 Motor_pp Alias Portb.3 Motor_pt Alias Portb.2 Sensor_p Alias Pind.2 Sensor_s Alias Pind.5 Sensor_l Alias Pind.4 Do If Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 1 Then 'go along Gosub Go Elseif Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then 'turn left Zmienna = 0 Gosub Lewt Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'turn left Gosub Lewt Elseif Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 0 Then 'turn right Zmienna = 1 Gosub Righ Elseif Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'turn right Gosub Righ Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 0 Then If Zmeinna = 1 Then Gosub Righ Else Gosub Lewt End If Loop Go: Motor_lt = 1 Motor_pt = 1 Return Lewt: Motor_lt = 0 Motor_pt = 1 Return Righ: Motor_lt = 1 Motor_pt = 0 Return Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 9, 2010 Udostępnij Październik 9, 2010 Do tej części: Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'turn left Gosub Lewt Dodaj: Zmienna = 0 Do tej: Elseif Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'turn right Gosub Righ Dodaj: Zmienna = 1 Lepiej byłoby przepisać ten kod na cesach, a jak to mają być początki to te if też jeszcze ujdą 😉 Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Październik 9, 2010 Udostępnij Październik 9, 2010 Racja Treker, , sorry, zagapiłem się że tu o kąt prosty chodzi. Cytuj Link do komentarza Share on other sites More sharing options...
Szuszy Październik 9, 2010 Autor tematu Udostępnij Październik 9, 2010 Dzięki 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Armir Październik 13, 2010 Udostępnij Październik 13, 2010 Muszę zrobić powracanie na trasę. Program jest na casach. Jak mam case else odczytuję tą zmienną położenia i tu moje pytanie jak teraz wyjść do któregoś z wcześniejszych casów. Do okoła to można zrobić w case else następnego case ale pewnie macie lepszy pomysł. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 13, 2010 Udostępnij Październik 13, 2010 Trochę namieszałeś, więc odpowiem tak, jak zrozumiałem pytanie 😉 Powinieneś mieć case dla flagi czujników 00000000 (brak linii pod robotem) i w nim mieć If'a który zależnie od poprzedniego poprawnego odczytu kierowałby robotem w prawo lub w lewo -> do czasu odnalezienia linii. Nie umieszczaj tego w case else, bo możesz mieć ciekawe przygody z robotem - pomyśl jak podczas jazdy wyglądają odczyty 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Armir Październik 14, 2010 Udostępnij Październik 14, 2010 Robot ma 8 czujników i na każdy mam inne instrukcję. Myślisz że dać tylko najmocniejsze skręty w prawo lub lewo. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!