Spisu treści:

Programowanie robota i joysticka Micro:Bit:Bit Controller za pomocą MicroPythona: 11 kroków
Programowanie robota i joysticka Micro:Bit:Bit Controller za pomocą MicroPythona: 11 kroków

Wideo: Programowanie robota i joysticka Micro:Bit:Bit Controller za pomocą MicroPythona: 11 kroków

Wideo: Programowanie robota i joysticka Micro:Bit:Bit Controller za pomocą MicroPythona: 11 kroków
Wideo: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Listopad
Anonim
Programowanie robota i joysticka Micro:Bit:Bit Controller za pomocą MicroPython
Programowanie robota i joysticka Micro:Bit:Bit Controller za pomocą MicroPython

Na Robocamp 2019, naszym letnim obozie robotyki, młodzi ludzie w wieku 10-13 lat lutują, programują i budują „robot przeciwwagi” oparty na technologii BBC micro:bit, a także programują micro:bit, który będzie używany jako pilot zdalnego sterowania.

Jeśli jesteś obecnie w Robocamp, przejdź do kroku 3, ponieważ pierwsze dwa kroki wykonaliśmy jako grupa

To jest przewodnik krok po kroku, jak uzyskać robota micro:bit komunikującego się z kontrolerem joystick:bit.

Nie wybiera najszybszej drogi, aby wszystko działało, ale próbuje rzeczy w małych fragmentach, dzięki czemu możesz testować kod na bieżąco, umieszczać na nim własne pieczęcie i rozumieć, dlaczego robimy to, co robimy !

Do tej czynności używamy własnego, niestandardowego robota, ale będzie on działać z każdym robotem korzystającym z podobnego sterownika silnika, takiego jak L9110s.

Pliki projektowe dla naszego robota można znaleźć tutaj:

Ten przewodnik jest napisany dla początkujących, ale jeśli nigdy wcześniej nie używałeś micro:bit z MicroPythonem, zalecamy najpierw wypróbowanie prostszego programu, takiego jak nasz identyfikator Instructable: https://www.instructables.com/id/Felt -Microbit-Nam…

Kieszonkowe dzieci

2x BBC micro:bit

Robot współpracujący z BBC micro:bit (patrz wyjaśnienie powyżej)

joystick:bit controller (nasz z Cool Components)

Krok 1: Konfiguracja robota

Masz kilka opcji pisania kodu MicroPython dla swojego micro:bit:

  • Mu, który możesz pobrać i zainstalować tutaj:
  • Edytor online, który znajdziesz tutaj:

Te instrukcje zakładają, że używasz Mu

Otwórz Mu i podłącz micro:bit do komputera. Mu powinien rozpoznać, że używasz micro:bit i wybrać tryb micro:bit, ale jeśli nie, zmień go ręcznie.

wybierz tryb
wybierz tryb

Pobierz kopię kodu testu silnika robota tutaj:

Jeśli nie jesteś przyzwyczajony do Github, może to być nieintuicyjne! Dwa proste sposoby uzyskania tego kodu to:

  1. Zapisz plik Raw na swoim komputerze, a następnie załaduj go do Mu:
  2. Skopiuj i wklej cały podany kod do nowego pliku w Mu.
zapisz nieprzetworzony plik
zapisz nieprzetworzony plik

Teraz kliknij przycisk „Flash” na pasku narzędzi Mu, aby wysłać nowy kod do micro:bit.

To nie zadziała, dopóki micro:bit nie zostanie podłączony

Żółte światło z tyłu micro:bit zacznie migać. Po zakończeniu Twój kod został przesłany.

USTAWIANIE KIERUNKÓW SILNIKA

Ten program włączy silniki w różnych kierunkach po naciśnięciu przycisku „A” na micro:bit.

To, co chcesz, aby się wydarzyło, to:

  • Gdy wyświetla się „A”, lewy silnik do przodu
  • Gdy wyświetla się „B”, lewy silnik do tyłu
  • Gdy wyświetla się „C”, prawy silnik do przodu
  • Gdy wyświetla się „D”, prawy silnik do tyłu

Prawdopodobnie tak się nie stanie, ponieważ zależy to od sposobu podłączenia robota!

W górnej części kodu znajduje się lista zmiennych, które określają, który pin na micro:bit steruje kierunkiem silnika.

Jeśli używasz jednego z naszych robotów (plików), zamień nazwy zmiennych, aby robot poruszał się we właściwych kierunkach:

zamień zmienne pinów
zamień zmienne pinów

Jeśli używasz własnego robota, przed edycją kodu sprawdź, do których styków podłączony jest sterownik silnika.

TESTOWANIE NAPĘDU

Teraz sprawdź, jak jeździ Twój robot, zamieniając kod testowy w głównej pętli na własny kod.

Nakazujesz robotowi jechać, wywołując funkcję drive(). Wymaga to dwóch argumentów - wartości dla lewego silnika i wartości dla prawego silnika, od 0 (wyłączone) do 1023 (maksymalna prędkość).

Wywołując na przykład drive(500, 500), mówisz obu silnikom, aby włączyły się w kierunku do przodu z mniej więcej połową prędkości.

Wypróbuj kilka opcji, aby poczuć, jak prosto jeździ i jak dobrze skręca.

Podpowiedź: testy silników były zarówno w pętli while True, jak i instrukcji if - silniki nie będą się obracać, dopóki nie naciśniesz przycisku A na micro:bit, a to na zawsze sprawdza, czy nacisnąłeś przycisk A.

Wskazówka: silniki nie wyłączą się, dopóki im tego nie powiesz! Zawsze będą wykonywać swoją ostatnią instrukcję.

OPCJONALNIE: POPRAWA JAZDY W LINII PROSTEJ

Jeśli twój robot nie będzie jechał po linii prostej, jeden z twoich silników może obracać się szybciej niż drugi.

Po upewnieniu się, że nic fizycznie nie uniemożliwia swobodnego obracania się koła, można edytować kod w funkcji jazdy, aby zmniejszyć prędkość szybszego silnika.

Przewiń w górę, aby znaleźć definicję funkcji napędu, i spójrz na dwie górne instrukcje:

napęd def (L, R):

# Poniżej znajduje się korekta mająca na celu skorygowanie rozbieżności prędkości silnika L = int(L*1) R = int(R*1)

Te dwie linie obecnie przyjmują wartość L i R, pomnóż je przez 1, a następnie upewnij się, że nadal są liczbami całkowitymi (int).

Na przykład, jeśli twój lewy silnik jest szybszy, zmień * 1 na jego linii na * 0,9 i zobacz, czy to poprawi sytuację.

Nie będziesz w stanie uczynić go idealnym, ale możesz dostosowywać się, dopóki nie będzie jechał prosto.

KONFIGURACJA RADIA

Teraz skonfiguruj radio, dodając następujące wiersze na początku kodu:

importuj radio

radio.config(kanał=7, grupa=0, kolejka=1) radio.on()

Umożliwi to robotowi otrzymywanie instrukcji z innego micro:bit, ale w tej chwili będzie on otrzymywać instrukcje z dowolnego innego micro:bit.

Dzieje się tak, ponieważ kanał 7 i grupa 0 są kanałami domyślnymi.

Zmień te liczby, wybierając kanał z zakresu 0-82 i grupę z zakresu 0-255. Teraz twój micro:bit będzie otrzymywał tylko instrukcje od innych z tymi samymi informacjami konfiguracyjnymi.

queue=1 oznacza, że micro:bit będzie przechowywać tylko jedną wiadomość przychodzącą na raz - daje to nieco szybszy czas odpowiedzi niż domyślny, który wynosi 3.

Teraz musisz edytować kod pętli głównej, aby zamiast uruchamiać instrukcje po naciśnięciu przycisku, poczekać na przychodzącą wiadomość radiową i odpowiednio zareagować.

Wypróbuj poniższy kod jako test (nie zrobi nic, dopóki nie skonfigurujesz joysticka w kroku 2):

podczas gdy prawda:

message = radio.receive() if message == 'forward': drive(500, 500)

Krok 2: Konfiguracja joysticka

Odłącz micro:bit robota i zamiast tego podłącz micro:bit joysticka

Pobierz kopię kodu konfiguracji joysticka tutaj:

Skonfiguruj radio przy użyciu tej samej konfiguracji (numer kanału i grupy), jak w przypadku robota - pozwoli to na wzajemną komunikację.

Na końcu programu uruchom swoją główną pętlę:

podczas gdy prawda:

if button_a.was_pressed(): radio.send('forward')

Ten kod nie używa jeszcze joysticka:bit. Używa przycisku A na micro:bit do wysłania wiadomości.

Upewnij się, że zarówno robot, jak i kontroler micro:bits mają zasilanie, a następnie naciśnij przycisk, aby wysłać wiadomość.

Jeśli wiadomość zostanie odebrana pomyślnie, a robot się poruszy… dobra robota! Zakończyłeś pracę z instrukcjami konfiguracji.

WSKAZÓWKI DOTYCZĄCE ROZWIĄZYWANIA PROBLEMÓW

Jeśli pojawi się komunikat o błędzie na kontrolerze micro:bit… debuguj kod kontrolera

Jeśli otrzymasz komunikat o błędzie na swoim robocie micro:bit… Twoja wiadomość radiowa została wysłana pomyślnie! Ale robot nie może tego zrozumieć, więc sprawdź, czy wiadomość, którą wysłałeś, i wiadomość, którą kazałeś robotowi nasłuchiwać, pasują do siebie.

Jeśli w ogóle nic się nie dzieje

  • Upewnij się, że sflashowałeś poprawny kod do każdego micro:bit - łatwo przypadkowo sflashować niewłaściwy kod!
  • Upewnij się, że numery kanałów i grup pasują do każdego micro:bit

Krok 3: Sprawdzanie wartości joysticka

W kolejnych kilku krokach wykorzystano kod kontrolera

Zanim będziesz mógł używać joysticka na kontrolerze, musisz wiedzieć, jakie wartości otrzymujesz po naciśnięciu drążka.

Zastąp główną pętlę następującym kodem:

podczas gdy prawda:

joystick = joystick_push() print(joystick) sleep(500)

Wgraj ten kod do swojego micro:bit, a następnie kliknij przycisk REPL na pasku narzędzi Mu. Spowoduje to otwarcie terminala na dole edytora, który zapewni łącze w czasie rzeczywistym do micro:bit.

otwórz REPL
otwórz REPL

To nie zadziała, dopóki micro:bit nie zostanie podłączony

Po otwarciu REPL naciśnij przycisk resetowania z tyłu micro:bit.

Obraz
Obraz

Powinieneś zobaczyć niektóre wartości, które przynoszą „wydrukowane” na ekranie:

wartości w terminalu
wartości w terminalu

Naciśnij drążek joysticka i zobacz, co stanie się z liczbami.

Zanotuj wartości podane, gdy joystick znajduje się w pozycji środkowej - w moim przypadku (518, 523).

Kliknij ponownie przycisk REPL na pasku narzędzi Mu, aby go zamknąć - nie będziesz w stanie przesłać nowego kodu do micro:bit, gdy jest otwarty.

Krok 4: Dostosowywanie zmiennych X i Y

Chcesz zmienić wartości podane przez funkcję joysticka, aby:

  • w centrum zero
  • w górę jest pozytywne
  • dół jest ujemny.

Odpowiada to instrukcjom, których potrzebuje robot - liczba dodatnia, aby jechać do przodu, i liczba ujemna, aby jechać do tyłu.

Spójrz na liczby, które otrzymałeś w ostatnim kroku. Pierwsza liczba to x, a druga to y.

Edytuj definicję joystick_push(), która jest już w programie, aby odjąć wartości od oryginału:

def joystick_push():

x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 zwraca x, y

Użyj własnych numerów, mogą się różnić od moich

Flash nowy kod, otwórz REPL, naciśnij przycisk resetowania micro:bit i sprawdź swoje wartości.

Czy dostajesz (0, 0)?

Krok 5: Konwersja X i Y na wartości dla lewego i prawego silnika

W tej chwili ten joystick nie będzie zbyt przydatny do prowadzenia robota. Przesunięty do przodu do końca, otrzymasz wartość taką jak (0, 500).

Gdybyś dał te liczby robotowi, włączyłby prawy silnik, ale nie lewy, co nie jest tym, czego chcesz!

Ten diagram pokazuje, co dzieje się z wartościami x i y, gdy poruszasz joystickiem i co chcemy, aby robot robił, gdy poruszasz joystickiem.

diagram
diagram

Musisz użyć matematyki, aby zmieszać wartości x i y, aby uzyskać coś bardziej przydatnego.

n

MATEMATYKA

Zacznijmy od pchnięcia joysticka do końca.

Przykładem wartości, które możesz uzyskać, jest:

x = 0

y = 500

Aby być użytecznym dla robota, chcesz uzyskać takie wartości:

lewo = 500

prawo = 500

Spróbujmy dodać x i y na różne sposoby, aby zobaczyć, jakie liczby otrzymamy:

x + y = 0 + 500 = 500

x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500

Zobaczmy teraz, co się stanie, jeśli przesuniemy joystick do końca w prawo.

Przykładem wartości, które możesz uzyskać, jest:

x = 500

y = 0

Aby robot skręcił w prawo, chcesz, aby lewy silnik jechał do przodu, a prawy do tyłu:

lewo = 500

prawo = -500

Wypróbujmy ponownie naszą formułę:

x + y = 500 + 0 = 500

x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500

Porównaj dwa zestawy formuł, aby dowiedzieć się, która opcja da ci poprawną lewą wartość, a która da ci poprawną właściwą wartość.

Wypróbuj go z niektórymi wartościami uzyskanymi z własnego joysticka, aby upewnić się, że wybrana formuła działa przez cały czas.

n

ROZSZERZENIE FUNKCJI JOYSTICK

Rozwiń i edytuj funkcję joysticka, aby utworzyć dwie nowe zmienne dla lewej i prawej strony oraz zwrócić te wartości zamiast x i y:

def joystick_push():

x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 left = right = return w lewo, w prawo

Flash nowy kod, otwórz REPL, naciśnij przycisk resetowania micro:bit i sprawdź swoje wartości.

Czy otrzymujesz wartości, których oczekujesz?

Jeśli potrzebujesz dodatkowej pomocy, sprawdź nasz przykładowy kod tutaj:

Krok 6: Wysyłanie wartości jako wiadomości radiowych

Teraz masz kilka wartości gotowych do wysłania do twojego robota.

Edytuj główną pętlę, aby sprawdzała wartości joysticka, ale potem zamiast je drukować, przygotowuje je do wysłania jako wiadomość radiową.

podczas gdy prawda:

joystick = joystick_push() wiadomość = str(joystick[0]) + " " + str(joystick[1])

To nie spowoduje jeszcze wysłania wiadomości!

Co się dzieje w tej nowej linii kodu?

  • joystick[0] oznacza pierwszy bit informacji wychodzący z funkcji joysticka (po lewej)
  • joystick[1] to kolejna informacja (po prawej)
  • str() konwertuje obie te liczby na format ciągu (tekst zamiast liczb) - jest to konieczne, aby móc przesyłać informacje drogą radiową.

Przyzwyczaisz się, że znak + oznacza dodawanie - może zarówno dodawać liczby razem, jak i łączyć łańcuchy, co oznacza, że skleja dwa bity informacji razem.

Przykład:

150 + 100 = 250

str(150) + str(100) = 150100

Tak więc konkatenacja sklei twoje lewe i prawe wartości razem.

Aby wymusić separację między dwoma bitami informacji (aby robot wiedział, że są to dwa bity informacji), połącz między nimi dodatkowy ciąg znaków za pomocą „”. Znaki mowy wokół spacji oznaczają, że jest to już ciąg.

Na koniec przedłuż swój kod, aby wysłać tę nowo utworzoną wiadomość przez radio:

radio.send(wiadomość)

sen(10)

Sen spowalnia wysyłanie wiadomości, dzięki czemu odbierający micro:bit nie jest przeładowany zbyt dużą ilością informacji!

Przed przejściem do następnego kroku zapisz ten kod do kontrolera micro:bit i debuguj wszelkie błędy

Krok 7: Odbieranie wiadomości na twoim robocie

Wróć do kodu robota od początku - pamiętaj, aby odłączyć kontroler micro:bit, aby przypadkowo nie wpisać do niego kodu robota

Przewiń w dół do głównej pętli - usuń kod testowy i dodaj to:

podczas gdy prawda:

wiadomość = radio.receive() print(wiadomość) sen(100)

Ustawia to zmienną równą przychodzącemu komunikatowi i drukuje komunikat do REPL - aby sprawdzić, czy komunikaty przychodzą zgodnie z oczekiwaniami.

Flash nowy kod, podłączony do REPL, a następnie naciśnij joystick.

Powinieneś otrzymać coś takiego:

Wartości REPL
Wartości REPL

WSKAZÓWKI DOTYCZĄCE ROZWIĄZYWANIA PROBLEMÓW

Jeśli pojawi się komunikat o błędzie na kontrolerze micro:bit… debuguj kod kontrolera

Jeśli otrzymasz komunikat o błędzie na swoim robocie micro:bit… Twoja wiadomość radiowa została wysłana pomyślnie! Ale robot nie może tego zrozumieć, więc sprawdź, czy wiadomość, którą wysłałeś, i wiadomość, którą kazałeś robotowi nasłuchiwać, pasują do siebie.

Jeśli w ogóle nic się nie dzieje

  • Upewnij się, że sflashowałeś poprawny kod do każdego micro:bit - łatwo przypadkowo sflashować niewłaściwy kod!
  • Upewnij się, że numery kanałów i grup pasują do każdego micro:bit

Krok 8: Używanie przychodzących wiadomości do sterowania silnikami robota

Otrzymujesz teraz dwa numery wysyłane przez radio jako ciąg.

Musisz podzielić tę wiadomość na dwa ciągi, a następnie ponownie przekonwertować ciągi z powrotem na liczby i przekazać to do funkcji napędu. Wiele się dzieje na raz!

Zanim to zrobisz, musisz sprawdzić, czy wiadomość, którą otrzymujesz, ma poprawny format.

Jeśli nie są wysyłane żadne wiadomości, zamiast tego otrzymasz „Brak”. Jeśli spróbujesz to podzielić, otrzymasz komunikat o błędzie.

podczas gdy prawda:

message = radio.receive() jeśli komunikat nie jest Brak: komunikat = komunikat.split() drive(int(message[0]), int(message[1]))

Co tu się dzieje?

  • Nowy kod zostanie uruchomiony, jeśli komunikat będzie inny niż „Brak”.
  • message.split() sprawdza, czy w wiadomości jest spacja (którą dodaliśmy w ostatnim kroku) i używa jej do podzielenia wiadomości na dwie części.
  • int(message[0]), int(message[1]) działa odwrotnie do tego, co zrobiliśmy w poprzednim kroku - pobiera każdą informację indywidualnie i konwertuje ją na liczbę całkowitą (liczbę całkowitą).
  • int(message[0]) jest używana jako wartość dla lewego silnika w funkcji napędu, a int(message[1]) jest używana jako wartość dla prawego silnika.

Sprawdź, czy działa - czy silniki kręcą się po naciśnięciu joysticka?

Jeśli nie - czas na debugowanie!

Jeśli tak, to fantastycznie! Masz działającego robota zdalnego sterowania!

Poświęć trochę czasu na ćwiczenie z robotem, zanim przejdziesz do następnego kroku. Czy jeździ tak, jak tego oczekujesz?

Następne kroki pokażą Ci, jak używać przycisków na joysticku, aby dodać dodatkowe funkcje do robota

Jeśli chcesz zobaczyć naszą dotychczasową wersję tego kodu:

  • Robot:
  • Kontroler:

Krok 9: Korzystanie z przycisków - odbieranie dodatkowych wiadomości

W tej chwili Twój kod będzie próbował podzielić każdą wiadomość, która nie ma wartości Brak. Oznacza to, że jeśli otrzyma na przykład „cześć”, otrzymasz komunikat o błędzie.

Aby umożliwić twojemu micro:bit interpretowanie innych wiadomości, będzie musiał najpierw sprawdzić każdą oczekiwaną wiadomość, a następnie podzielić wiadomość tylko wtedy, gdy nie powiedziano jej, aby zrobiła z nią cokolwiek innego.

Rozwiń swój kod w ten sposób:

jeśli komunikat nie jest Brak:

if message == 'hello': display.show(Image. HAPPY) elif message == 'duck': display.show(Image. DUCK) else: message = message.split() drive(int(message[0]), int(wiadomość[1]))

Najpierw sprawdzi, czy otrzymał wiadomość „hello”. Jeśli tak, wyświetli szczęśliwy obraz, a następnie wróć na początek pętli i sprawdź następną wiadomość.

Jeśli wiadomość nie jest hello, następnie sprawdzi, czy wiadomość jest 'kaczka'.

Jeśli wiadomość nie brzmi „cześć” LUB „kaczka”, zrobi ostatnią rzecz na liście, czyli podzieli wiadomość i włączy silniki. Nie będzie próbował podzielić wiadomości, jeśli otrzymała „cześć” lub „kaczątko”, co oznacza, że nie otrzymasz komunikatu o błędzie z żadnej z tych dwóch wiadomości.

Podwójny znak równości jest ważny - oznacza 'jest równy', w porównaniu do pojedynczego znaku równości, który coś ustawia (więc wiadomość = 'hello' oznacza, że ustawiamy zmienną na 'hello', message == 'hello' oznacza, że pytamy, czy wiadomość jest równa 'hello').

Wypróbuj na razie tylko dwie opcje, aby to przetestować - możesz później dodać dowolną liczbę innych wiadomości.

Link do działającego kodu:

Krok 10: Wysyłanie dodatkowych wiadomości za pomocą przycisków kontrolera

Odłącz micro:bit robota i zamiast tego podłącz micro:bit joysticka

Wróć do kodu kontrolera, aby edytować.

Podobnie jak w przypadku kodu robota, chcemy, aby przed wysłaniem wartości joysticka kontroler sprawdzał, czy próbujesz wysłać jakieś inne komunikaty.

W górnej części pętli nadal chcemy, aby sprawdzał aktualne wartości joysticka, ale chcemy również, aby sprawdzał, czy przycisk jest aktualnie wciskany:

podczas gdy prawda:

joystick = joystick_push() przycisk = button_press()

button_press() zwraca wartość A, B, C, D, E lub F w zależności od tego, który przycisk jest aktualnie wciskany (jeśli nic nie jest naciśnięte, zwraca Brak).

Teraz możemy wykonać instrukcję if-elif-else, tak jak zrobiliśmy to w przypadku kodu robota - używając dwóch przycisków i wysyłając wartość joysticka, jeśli żaden przycisk nie jest naciśnięty.

jeśli przycisk == 'A':

radio.send('hello') sleep(500) elif button == 'B': radio.send('duck') sleep(500) else: message = str(joystick[0]) + " " + str(joystick [1]) radio.wyślij (wiadomość) uśpij (10)

Po naciśnięciu przycisku wyślij jedną z wiadomości, na które kazałeś robotowi zwracać uwagę w poprzednim kroku.

Wiadomość zostanie wysłana po każdym naciśnięciu przycisku, a komputery są znacznie szybsze niż ludzie! Może więc wysłać wiadomość wiele razy, zanim zdołasz zdjąć palec z przycisku.

Uśpienie po wysłaniu wiadomości spowalnia ją, aby nie sprawdzała ponownie przycisku tak szybko - wypróbuj kilka liczb tutaj, aby uzyskać idealną ilość czasu dla siebie - zbyt wolno i nie będzie też reagować szybko, a twój robot otrzyma tak wiele komunikatów o przyciskach, że może przestać reagować na joystick!

Czy to działa?

Jeśli otrzymujesz komunikaty o błędach, zastanów się dokładnie nad tym, co właśnie zmieniłeś i co się dzieje.

Jeśli pojawi się błąd na robocie po naciśnięciu przycisku na kontrolerze - wiesz, że komunikat się rozchodzi, ale jest to mylące dla robota. Sprawdź, czy wiadomość, którą wysłałeś, i wiadomość, którą poleciłeś robotowi, są takie same.

Link do działającego kodu:

Krok 11: Kolejne kroki

Masz teraz wiedzę niezbędną do pracy z silnikami robota i kontrolerem joystick:bit

Wykorzystaj tę wiedzę, aby ulepszyć oba programy i uczynić je własnymi. Kilka pomysłów poniżej!

Masz sześć przycisków na kontrolerze! Co chcesz żeby zrobili?

  • Co powiesz na zaprogramowanie rutyny tanecznej dla twojego robota do wykonania na polecenie? Napisz algorytm poleceń drive() oddzielonych poleceniami sleep()!
  • Czy chcesz zmienić kierunek poruszania się robota, aby mógł łatwo jechać do góry nogami? Pomyśl o wartościach x i y swojego joysticka. Co reprezentują i jak możesz nimi manipulować?
  • Czy Twój robot ma (lub możesz dodać!) dodatkowe funkcje, takie jak diody LED, głośnik lub czujniki?

Pomysły na ulepszenie kodu

  • Czy możesz pomóc robotowi radzić sobie z nieznanymi wiadomościami, używając kodu try/except?
  • Matematyka użyta do obliczenia wartości lewej i prawej z joysticka nie daje nam pełnego zakresu wartości (napęd robota może przyjąć liczbę do 1023). Czy możesz edytować ten kod, aby uzyskać lepszy zasięg?
  • Istnieją inne metody mieszania wartości joysticka - czy możesz wymyślić lepszy sposób na zrobienie tego?

Zalecana: