Skocz do zawartości

[ Bascom] program do uniwersalnego robota-sprawdzenie


bejmoooza

Pomocna odpowiedź

witam

Jestem nowy na tym forum, ale korzystałem z niego wiele razy już wcześniej.

Swoją przygodę z programowaniem zacząłem niedawno ale udało mi się stworzyć dzisiaj program do robocika. Buduję go na uC atmega8. W założeniu ma on spełniać funkcje takich robocików jak: Waldek-swiatłolub, wallie, nie spadający ze stołu i linefollower. wybieranie funkcji dip-swichem.

Załączam moje "dzieło" i prosze o sprawdzenie i ocene

pozdrawiam

robot.zip

Link do komentarza
Share on other sites

Najlepiej sprawdzić program odpalając go na robocie 😉 Wtedy wiadomo co nie działa i można szukać błędów.

Projekt bardzo ambitny, ale rzeczowy, nie typu "robot na gąsienicach na zdalne sterowanie z kamerą i działem", w twoim wszystko jest do zrealizowania. Mam tylko zastrzeżenia co do wyboru uC, ATmega16 pasowałaby chyba lepiej przy tylu opcjach, poza tym mógłbyś później podłączać dodatkowe "moduły", np. chwytak, tak jak ja zamierzam zrobić w swoim "Prototypie" ale nie pozwala mi na to ciągły brak czasu.

Jak daleko posunięte są prace nad robotem?

Link do komentarza
Share on other sites

robot jest już prawie skończony. na razie robię na atmega8 bo taki posiadam, a nie mam funduszy na inne elementy. chodzi mi głównie o sprawdzenie czy nie porobiłem jakiś błędów w programie gdyż jest to mój pierwszy taki długi program, wcześniej pisałem tylko migające diodki. a sterowanie będzie można zawsze zmienić ponieważ będzie jako "płyta główna" z podłączonymi peryferiami

Robota robię z kolegą na konkurs elektroniczny w naszej szkole a pomysł na niego powstał... wczoraj

Link do komentarza
Share on other sites

Pierwsza sprawa, to popraw z

Spk Alias Pb.0

na

Spk Alias Portb.0

(i tak całą resztę, skoro chcesz się do tych aliasów odnosić.

Druga sprawa:

Silnik Lewy Tyl Alias Pb.4

Zmienne nie mogą zawierać spacji, zmień to na

Silnik_Lewy_Tyl Alias Portb.4

Zamiast

If Wons Lewy = 1 And Wons Prawy = 1 Then
Silnik Lewy Przod = 1 And Silnik Prawy Przod = 1
Else Silnik Lewy Przod = 0 And Silnik Prawy Przod = 0
End If

pisz po prostu

If Wons_Lewy = 1 And Wons_Prawy = 1 Then
Silnik_Lewy_Przod = 1
Silnik_Prawy_Przod = 1
Else
Silnik_Lewy_Przod = 0
Silnik_Prawy_Przod = 0
End If

Na przyszłość kompiluj swoje programy i czytaj wyświetlane błędy! Bez tego daleko nie zajedziesz 😉

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

If Wej_nie_spada = 1 Then
Gosub Nie Spadanie
End If

Zmień na Nie_spadanie.

If Wej_linefollower = 1 Then
Gosub Linefollower
End If

Etykieta Linefollower nie istnieje w Twoim programie. Jeśli na razie nie chcesz tego wykorzystywać, to zakomentuj ten warunek.

Gosub Nawrotka I W Lewo      

(120 linia) - to też popraw (Nawrotka_I_W_Lewo).

Po tych zabiegach program się kompiluje, czy działa zgodnie z założeniami...to najlepiej sprawdzić w praktyce.

I na przyszłość spróbuj samemu szukać takich błędów, im więcej czasu na to poświęcisz teraz, w trakcie nauki, tym lepiej Ci się zakorzenią pewne rzeczy i łatwiej będziesz poprawiać błędny kod. Bez tego nie wróżę Ci kariery programisty... 😉

  • Lubię! 1
Link do komentarza
Share on other sites

Pierwsza zasada kier kodera - nazwa zmiennej to zawsze jeden ciąg znaków, z reguły powinien się zaczynać literą, może zawierać _, chociaż popularne są też takieNazwyZmiennych.

Link do komentarza
Share on other sites

wgrałem program do robota ale coś jest nie tak 😥 . początek działa dobrze, ale jak wejdzie do jakiegoś podprogramu to zachowuje się tak jakby zapętlił się w podprogramie "obrot". A z niego korzysta każdy z głównych podprogramów. nie wiem co żle robię. postaram się wrzucić skan schematu, bo może tam mam coś źle podłączone

Link do komentarza
Share on other sites

tak mam funkcję return


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'program do uni-bota by bejmoooza & Łuczi
'napęd na dwóch silnikach- jeden na prawe koło i jeden na lewe (jak w czołgu :D)
'kolejne funkcje robota wybierane dip-swichem
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

$regfile = "m8def.dat"                                      'zadeklarowanie użytego procesora
$crystal = 1000000                                          'zadeklarowanie szybkości wewnętrznego kwarcu

Config Portb = Output                                       'port b jako wyjścia
       Portb = &B00000000                                  'cały port b jako 0
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Portd = Input                                        'cały port d jako wejścia
       Portd = &B00000000                                  'na całym d 0


              Spk Alias Portb.0                            'wyjscie na głośniczek lub piezo
Silnik_prawy_przod Alias Portb.1                            'mostek h prawego silnika- do przodu
 Silnik_prawy_tyl Alias Portb.2                            ' to samo tylo do tyłu
Silnik_lewy_przod Alias Portb.3                            'mostek h lewego silnika- do przodu
  Silnik_lewy_tyl Alias Portb.4                            ' to samo tylko do tyłu
              Led Alias Portb.5                            'aktywacja oswietlenia led
        Wons_lewy Alias Portd.0                            'lewy czułek do światła lub odbicia
       Wons_prawy Alias Portd.1                            'prawy czułek do światła lub odbicia
    Krawendz_lewa Alias Portd.2                            'wejście z lewego czujnika krawedzi
   Krawendz_prawa Alias Portd.3                            'wejście z prawego czujnika krawędzi
       Linia_lewy Alias Portd.5                            'wejście z lewego czujnuka lini
     Linia_srodek Alias Portd.6                            'wejscie z środkowego czujnika lini
      Linia_prawy Alias Portd.7                            'wejście z prawego czujnika lini
   Wej_swiatlolub Alias Portc.0                            'wejście aktywujace światłoluba
       Wej_wallie Alias Portc.1                            'wejscie aktywujace walliego
    Wej_nie_spada Alias Portc.2                            'wejście aktywujące nie spadającego ze stołu
 Wej_linefollower Alias Portc.3                            'wejscie aktywujące LineFollowera


Led = 1                                                     'pierwsze mrugnięcie światłami
Waitms 750
Led = 0                                                     'komiec mrugnięcia
Waitms 500                                                  'czeka pół sekundy
Led = 1                                                     'drógie mrugnięcie
Waitms 750
Led = 0                                                     'koniec mrugnięcia
Sound Spk , 100 , 450                                       'sygnał "trabienia"-trzeba jeszcze dobrać f
Waitms 600                                                  'przerwa
Sound Spk , 200 , 490                                       'i znowu "trąbienie"


If Wej_swiatlolub = 1 Then
Gosub Waldek
End If

If Wej_wallie = 1 Then
Gosub Wallie
End If

If Wej_nie_spada = 1 Then
Gosub Nie_spadanie
End If

'If Wej_linefollower = 1 Then
'Gosub Linefollower
'End If

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram waldka-swiatłoluba
'jako wąsy będą foto tranzystort podpięte pomiedzy + zasilania i noge procka
' (element zamienny z wąsami z drutów)
Waldek:
  Do
If Wons_lewy = 1 And Wons_prawy = 1 Then
Silnik_lewy_przod = 1
Silnik_prawy_przod = 1
Else
Silnik_lewy_przod = 0
Silnik_prawy_przod = 0
End If

If Wons_lewy = 1 And Wons_prawy = 0 Then
Silnik_lewy_tyl = 1
Silnik_prawy_przod = 1
Else
Silnik_lewy_przod = 0
Silnik_prawy_tyl = 0
End If

If Wons_prawy = 1 And Wons_lewy = 0 Then
Silnik_prawy_tyl = 1
Silnik_lewy_przod = 1
Else
Silnik_prawy_tyl = 0
Silnik_lewy_przod = 0
End If

If Wons_lewy = 0 And Wons_prawy = 0 Then
Gosub Obrot
End If
  Loop

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram walliego
'jako wąsy będą u-switche z kawałkami drutów (element zamienny z fototranzystorami)
Wallie:
  Do
If Wons_lewy = 1 And Wons_prawy = 1 Then
Silnik_lewy_przod = 1
Silnik_prawy_przod = 1
Elseif Wons_lewy = 1 And Wons_prawy = 0 Then
Gosub Nawrotka_i_w_prawo
Elseif Wons_lewy = 0 And Wons_prawy = 1 Then
Gosub Nawrotka_i_w_lewo
Elseif Wons_lewy = 0 And Wons_prawy = 0 Then
Gosub Obrot
End If
  Loop

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram do nie spadania ze stołu
'2 czujniki odbiciowe IR bedą umieszczone w przednich rogach robota
Nie_spadanie:
  Do
If Krawendz_lewa = 1 And Krawendz_prawa = 1 Then
Silnik_lewy_przod = 1
Silnik_prawy_przod = 1
Elseif Krawendz_lewa = 0 And Krawendz_prawa = 1 Then
Gosub Nawrotka_i_w_prawo
Elseif Krawendz_lewa = 1 And Krawendz_prawa = 0 Then
Gosub Nawrotka_i_w_lewo
Elseif Krawendz_lewa = 0 And Krawendz_prawa = 0 Then
Gosub Obrot
End If
  Loop

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram do linefollowera -dopisze jutro

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram do zawrucenia przy dojechaniu prosto do ściany lub krawędzi stołu
Obrot:
Silnik_prawy_przod = 0
Silnik_lewy_przod = 0
Silnik_lewy_tyl = 1
Silnik_prawy_tyl = 1
Waitms 500
Silnik_lewy_tyl = 0
Silnik_lewy_przod = 1
Waitms 600
Silnik_prawy_tyl = 0
Silnik_prawy_przod = 1
Waitms 200
Silnik_prawy_przod = 0
Silnik_lewy_przod = 0
Return

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram do krótkiego cofniecia i lekkiego obrotu w prawo przy wyjechaniu lewym rogiem
'poza krawedź stołu lub dotknięcia lewym wąsem do ściany
Nawrotka_i_w_prawo:
Silnik_prawy_przod = 0
Silnik_lewy_przod = 0
Silnik_lewy_tyl = 1
Silnik_prawy_tyl = 1
Waitms 500
Silnik_lewy_tyl = 0
Silnik_lewy_przod = 1
Waitms 600
Silnik_lewy_przod = 0
Silnik_prawy_tyl = 0
Return

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'podprogram do krótkiego cofniecia i lekkiego obrotu w lewo przy wyjechaniu prawym rogiem
'poza krawedź stołu lub dotknięcia prawym wąsem do ściany
Nawrotka_i_w_lewo:
Silnik_prawy_przod = 0
Silnik_lewy_przod = 0
Silnik_lewy_tyl = 1
Silnik_prawy_tyl = 1
Waitms 500
Silnik_prawy_tyl = 0
Silnik_prawy_przod = 1
Waitms 600
Silnik_prawy_przod = 0
Silnik_lewy_tyl = 0
Return

dodaję też schemat, może tam coś jest nie tak

https://www.forbot.pl/forum/upload_img/obrazki/IMG_4ba92f6a05c55728.gif

błagam o szybką pomoc bo mam czas do czwartku do 9 rano tylko 🤯

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.