Skocz do zawartości

[Bascom] Program do linefollowera


Wojcik98

Pomocna odpowiedź

Witam!

Czy mógłbym prosić o sprawdzenie tego programu? Jest to mój właściwie pierwszy program i pewnie nadaje się do kosza, mimo to proszę o poprawienie błędów ewentualnie napisać, co jest źle. Od razu mówię, że nie umiem jeszcze dobrze programować, więc jeśli robot wyjedzie za linię, ma cofnąć się. Z góry dziękuję.

'   ___________________________________________
'  | _         _         _         _         _ |   ROZMIESZCZENIE CZUJNIKÓW
'  ||A|       |B|       |C|       |D|       |E||   WIDOK OD GÓRY
'  | -         -         -         -         - |
'  |___________________________________________|
'                      |   |
'                      |   |
$regfile = "m8def.dat"                                      'Atmega8
$crystal = 8000000                                          'taktowanie 8Mhz

Config Portc = Input

Config Portd = Output                                       'PD7 wyjście
Config Portb = Output                                       'PortB-wyjścia

Dim Silnik_l As Byte                                        'silniki zakres 0-255
Dim Silnik_p As Byte                                        'silniki do przodu

A Alias Portc.0                                             'czujnik po samej lewej
B Alias Portc.1                                             'czujnik po lewej
C Alias Portc.2                                             'czujnik środkowy
D Alias Portc.3                                             'czujnik po prawej
E Alias Portc.4                                             'czujnik po samej prawej
Przod_l Alias Portb.0                                       'silniki do przodu
Przod_p Alias Portd.6
Tyl_l Alias Portd.7                                         'silniki do tyłu
Tyl_p Alias Portd.5


Portb.1 = Silnik_l                                          'lewy silnik
Portb.2 = Silnik_p                                          'prawy silnik

Set Portb.2
Reset Portd.7

Do

If A = 1 And B = 1 And C = 0 And D = 1 And E = 1 Then       'jeśli tylko środkowy czujnik będzie na linii
Silnik_l = 255                                              'maks. prędkość lewego silnika
Silnik_p = 255                                              'maks. prędkość prawego silnika
Przod_p = 1
Przod_l = 1
Tyl_p = 0
Tyl_l = 0
End If

If A = 1 And B = 0 And C = 0 And D = 1 And E = 1 Then       'jeśli lewy czujnik będzie wjeżdżał na linię
Silnik_l = 200                                              'lekkie korekty lewy silnik
Silnik_p = 255                                              'maks. prędkość prawy silnik
Przod_p = 1
Przod_l = 1
Tyl_p = 0
Tyl_l = 0
End If

If A = 1 And B = 1 And C = 0 And D = 0 And E = 1 Then       'jeśli prawy czujnik będzie wjeżdżał na linię
Silnik_l = 255                                              'maks. prędkość lewy silnik
Silnik_p = 200                                              'lekkie korekty prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_p = 0
Tyl_l = 0
End If

If A = 1 And B = 0 And C = 1 And D = 1 And E = 1 Then       'jeśli tylko lewy czujnik będzie na linii
Silnik_l = 150                                              'lekki skręt lewysilnik
Silnik_p = 255                                              'maks. prędkość prawy silnik
Przod_p = 1
Przod_l = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 1 And B = 1 And C = 1 And D = 0 And E = 1 Then       'jeśłi tylko prawy czujnik będzie na linii
Silnik_l = 255
Silnik_p = 150
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 0 And B = 0 And C = 1 And D = 1 And E = 1 Then       'jeśli czujnik lewy i po samej lewej będzie na linii
Silnik_l = 100                                              'skręt w lewo lewy silnik
Silnik_p = 255                                              'maks. prędkość prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 1 And B = 1 And C = 1 And D = 0 And E = 0 Then       'jeśłi czujnik prawy i po samej prawej
Silnik_l = 255                                              'maks. prędkość lewy silnik
Silnik_p = 100                                              'zakręt w prawo prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 0 And B = 1 And C = 1 And D = 1 And E = 1 Then       'jeśli tylko czujnik po samej lewej będzie na linii
Silnik_l = 0                                                'ostry zakręt w lewo
Silnik_p = 255                                              'maks, prędkość prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 1 And B = 1 And C = 1 And D = 1 And E = 0 Then       'jeśli czujnik po samej prawej będzie na linii
Silnik_l = 255                                              'maks.prędkość lewy silnik
Silnik_p = 0                                                'ostry zakręt prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 1 And B = 1 And C = 0 And D = 0 And E = 0 Then       'jeśli będzi zakręt 90 stopni w prawo
Silnik_l = 255                                              'maks. prędkość lewy silnik
Silnik_p = 50                                               'średni zakręt w prawo prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 0 And B = 0 And C = 0 And D = 1 And E = 1 Then       'jeśli będzie zakręt 90 stopni w lewo
Silnik_l = 50                                               'średni zakręt w lewo lewy silnik
Silnik_p = 255
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 0 And B = 0 And C = 0 And D = 0 And E = 0 Then       'jeśli będzie skrzyżowanie
Silnik_l = 200                                              'trochę zwolnić lewy silnik
Silnik_l = 200                                              'trochę zwolnić prawy silnik
Przod_l = 1
Przod_p = 1
Tyl_l = 0
Tyl_p = 0
End If

If A = 1 And B = 1 And C = 1 And D = 1 And E = 1 Then
Silnik_l = 1                                                'do tył lewy silnik
Silnik_p = 1                                                'do tył prawy silnik
Przod_l = 0
Przod_p = 0
Tyl_l = 1
Tyl_p = 1
End If

Loop

End

LF.rar

Link do komentarza
Share on other sites

Coś w tym guście. Ewentualnie można zwiększyć preskaler, dla silników polecana jest raczej niższa częstotliwość PWM. Zmień kod i zobacz czy działa poprawnie w robocie.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Bardzo chętnie bym sprawdził w robocie ale nie mam kasy. A brak kasy=>brak części=>brak możliwości robienia robota=>brak robota 😕 . Ale robota chce zrobić na zawody w maju więc się raczej wyrobie.

Link do komentarza
Share on other sites

Ogólnie co do przejrzystości kodu to zamiast tak dużej ilości if'ów i AND'ów lepiej następnym razem bitowe odczyty z czujników połączyć w jeden bajt, a następnie na podstawie tego bajtu sterować odpowiednio robotem przez select...case.

Link do komentarza
Share on other sites

nie umiem jeszcze dobrze programować
$crystal = 8000000                                          'taktowanie 8Mhz 

A fuse bity będziesz potrafił sobie poustawiać ??

Bo jeśli się nie myle defaultowe taktowanie "megi8" to 1Mhz ....

Link do komentarza
Share on other sites

olimek

A dużo zmieni jak dam 1Mhz? Bo ja dałem takie tylko dlatego, że mam już kupiony rezonator 8Mhz, ale jak trzeba to kupię inny. Proszę o szybką odpowiedź bo jadę dzisiaj do elektronicznego to od razu kupię jak coś.

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.