BlackSkill Napisano Grudzień 5, 2014 Udostępnij Napisano Grudzień 5, 2014 Cześć. Nie jest to mój kod tylko jednej osoby z forum. Większość w nim rozumiem. Problemy mam z kątami prostymi. Lf wykręci na nich tylko z wyłączoną tą linijką. Macie jakiś pomysł co poprawić ? /* zgubienie trasy*/ if(LS<prog && L<prog && S<prog && P<prog && PS<prog ) { lewy(0,100); prawy(0,100); } 1. Do czego jest ICR1 w konfiguracji pwm. ? Na necie nikt tego nie konfiguruje. 2. Z innej beczki. Lepiej żeby czujniki były 10 cm od kół czy 5cm. KOd : http://pokazkod.pl/b732cb581db56fd6e313a83468febc5c0777134198a6262375 Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Grudzień 5, 2014 Udostępnij Grudzień 5, 2014 Patrząc tylko na ten fragment kodu. Robot nie "widząc" linii żadnym czujnikiem porusza się w jednym kierunku przy stałej prędkości. Jeśli natrafi na kąt prosty, to z całą pewnością nie obróci się w miejscu, tylko przejedzie odrobinę dalej (z powodu bezwładności) i.... nie będzie widział linii żadnym czujnikiem. Co wtedy zrobi, jeśli będziesz miał taki kod w programie? Ano, pojedzie prosto. Możesz pokombinować tak: jeśli widzisz linię na którymś ze skrajnych czujników, to Twój robot będzie zakręcał w odpowiednim kierunku do momentu, kiedy nie zobaczy linii którymś z czujników "środkowych". Proste i skuteczne. Co do odległości czujników od kół to są tu lepsi spece od LF, więc oddaję im głos 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 5, 2014 Udostępnij Grudzień 5, 2014 Ogólnie, co do odległości nie ma złotej reguły. W szybkich, płynnie jeżdżących robotach zdecydowanie należy stawiać na duże odległości. Jednak w pierwszych, niekoniecznie szybkich robotach nie warto przesadzać z tym parametrem. Ustaw tyle ile wychodzi z budowy robota, pod warunkiem, że jest to wartość zbliżona do rozstawu kół - to powinna być optymalna odległość. W programie musisz zapamiętywać, który czujnik widział poprzednio linie. Gdy pojazd zjedzie z trasy na podstawie zapamiętanej wartości będziesz wiedział, w którą stronę należy jechać, aby wrócić do linii. Cytuj Link do komentarza Share on other sites More sharing options...
BlackSkill Grudzień 5, 2014 Autor tematu Udostępnij Grudzień 5, 2014 Siedziałem nad tym dwie godziny. Korzystałem z tego , lecz nic nie dałem rady napisać https://forbot.pl/blog/artykuly/podstawy/algorytm-linefollowera-c-poczatkujacych-id2722 Wiem że muszę zapisać odczyty z czujników do tablicy znaków. Próbowałem to zrobić lecz wyskakują mi błędy. Nie wiem też jak później zapisać te dane do odczytu. Treket mógłbyś dopisać to do programu ? Dla ciebie to pewnie 5 min roboty. Jutro chciałem startować w Robotic area więc kąty proste by się przydały. Z góry dzięki ! 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
Treker (Damian Szymański) Grudzień 5, 2014 Udostępnij Grudzień 5, 2014 Pokaż, to co pisałeś. Zobaczymy, gdzie masz błędy 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
BlackSkill Grudzień 5, 2014 Autor tematu Udostępnij Grudzień 5, 2014 Chwileczke bo pousuwałem tamto z kodu. int tab_czujnikow[5] = {0,1,2,3,4}; void czytaj_adc() { for(int i=0; i<4; i++) { ADMUX &= 0b11100000; ADMUX |= tab_czujnikow[i]; ADCSRA |= _BV(ADSC); while(ADCSRA & _BV(ADSC)) {}; if(ADCH > 150) // odczyt 8 starszych bitów i progowanie; próg = 150 czujniki[i] = 1; else czujniki[i] = 0; } } I wywalało mi tu błąd. Wiec dodwałem zmienna int czujniki(5) nic to nie dawało. Próbowałem też w ten sposób: int czytaj_ADC(int save, int tab) { ADMUX = save; ADMUX|=(_BV(ADLAR) | _BV(REFS0)) ; ADCSRA|=_BV(ADSC); while(!((ADCSRA&_BV(ADIF))>>ADIF)); return ADCH; } I tu chciałem to zrobić w ten sposób że save(0) = tab(1) I później jakoś to wczytać w programie i na podstawie tego. Naprawdę nie umie pisać w c może troszke bascomie. C jedynie mniej wiecej rozumie (umiem sie połapać co na jakiej zasadzie działa 😋). Muszę sie dopiero nauczyć. A za kod do kątów prostych byłbym bardzo wdzięczny i zobowiązany do nauki języka c 😉 I fajnie by było gdyby na robotic area chociaż trase przejechał 😃 Ps. Bedziesz na RA ? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 6, 2014 Udostępnij Grudzień 6, 2014 I wywalało mi tu błąd. W Jaki błąd? Gdzie masz deklaracje tablicy czujniki[]? 1 Cytuj Link do komentarza Share on other sites More sharing options...
BlackSkill Grudzień 6, 2014 Autor tematu Udostępnij Grudzień 6, 2014 Error 1 'czujniki' undeclared (first use in this function) 67 3 GccApplication1 Message 2 each undeclared identifier is reported only once for each function it appears in [ Dodano: 06-12-2014, 04:56 ] A deklaracje tablicy czujniki dawałem nad int tablica_czujniki [ Dodano: 06-12-2014, 04:56 ] A deklaracje tablicy czujniki dawałem nad int tab_czujników [ Dodano: 06-12-2014, 07:04 ] A dobra rozumie xd int czujniki[5]; int tab_czujnikow[5] = {0,1,2,3,4}; void czytaj_adc() { for(int i=0; i<4; i++) { ADMUX &= 0b11100000; ADMUX |= tab_czujnikow[i]; ADCSRA |= _BV(ADSC); while(ADCSRA & _BV(ADSC)) {}; if(ADCH > 180) // odczyt 8 starszych bitów i progowanie; próg = 150 czujniki[i] = 1; else czujniki[i] = 0; } } Teraz da sie skompilować Czyli odczytane stany będa teraz w zmiennej czujniki() . Tylko jak przerwać zapisywanie/odczyt danych gdy lf bedzie na białej lini. [ Dodano: 06-12-2014, 07:24 ] http://pokazkod.pl/f53cdabb78932834de3b2c1eab39d18a0f96d9e07d61480300 Napisałem tam niby odczyt. Możesz to poprawić tak zeby działało ? Ja musze juz jechac i nie mam kiedy już tego poprawiać. Wyskakuja tam takie bledy jak Error 3 lvalue required as left operand of assignment 163 15 Error 1 unknown type name 'stop' 162 4 Warning 2 implicit declaration of function 'czujnik' [-Wimplicit-function-declaration] 163 4 Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Grudzień 6, 2014 Udostępnij Grudzień 6, 2014 Jeśli działało ci bez tego warunku, który dałeś w pierwszym poście, to wystarczyło napisać coś takiego: if(LS>prog && L<prog && S<prog && P<prog && PS<prog) { // zakrecanie w lewo while(L<prog && S<prog && P<prog && PS<prog) { //odczytywanie czujnikow w petli } } To jest dla przypadku że lewy skrajny czujnik widzi linię. Zostanie ustawione zakręcanie w lewo i program wpadnie w pętlę. W tej pętli powinieneś sprawdzać stan czujników i zapisywać je do tych swoich zmiennych L,S,P,PS. Jeśli jakiś innych czujnik zobaczy linię, to nie zostanie spełniony warunek pętli while i program z niej wyjdzie, następnie wyjdzie z if'a. Powinieneś wtedy analogicznie rozpatrzyć przypadki dla prawego skrajnego czujnika, oraz, jeśli chcesz to robić na if'ach, to wypadałoby również rozpatrzyć dla: 11100 11000 00011 00111 (0-czujnik nie widzi linii, 1- czujnik widzi linię) Acha, i wywal ten warunek na 00000 w piz....daleko. On tylko przeszkadza. Wydaje mi się że nie do końca umiesz napisać te rzeczy sam, więc szukasz rozwiązań po innych programach, trochę błądząc po omacku i komplikując sobie życie. Czy mam rację? Cytuj Link do komentarza Share on other sites More sharing options...
BlackSkill Grudzień 6, 2014 Autor tematu Udostępnij Grudzień 6, 2014 Napisaliśmy program z kumplai na RA w miedzyczasie. Zajeliśmy 13 miejsce na 22 chyba xd Może coś wiecej byśmy wyciśli ale baterie niestety padły a li-pola pożyczyliśmy dopiero na sam koniec, lecz ujawniły sie zimne luty na goldpinach od czujników i nie było czasu poprawic. Cytuj Link do komentarza Share on other sites More sharing options...
aixI Grudzień 6, 2014 Udostępnij Grudzień 6, 2014 BlackSkill jak udało się Tobie napisać ten działający kod to pochwal się nim - pewnie przyda się innym, początkującym. Ogólnie taką fajną zasadę na zgubienie linii przez lf'a masz tutaj opisaną. Wystarczy się dobrze zagłębić i "rozkminić" co nieco 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
BlackSkill Grudzień 6, 2014 Autor tematu Udostępnij Grudzień 6, 2014 Udostępnię później. Bo jest na lapku nie u mnie. Dodam lfa na forum 😉 A co do miejsca to inaczej troche xd Na ekranie na ra bylo inaczej na stronie jest inaczej. Coś namieszanie 😋 Ale jak na pierwsze zawody nie było źle 😉 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!