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

Nie możesz do pojedynczego bity zapisywać całej liczby ośmiobitowej. PWM musisz uruchomić.

Poszukaj w helpie komendy config timer.

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

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ę »
×
×
  • 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.