Inhaltsverzeichnis:

Programmieren eines Micro: Bit Robot & Joystick: Bit Controller mit MicroPython - Gunook
Programmieren eines Micro: Bit Robot & Joystick: Bit Controller mit MicroPython - Gunook

Video: Programmieren eines Micro: Bit Robot & Joystick: Bit Controller mit MicroPython - Gunook

Video: Programmieren eines Micro: Bit Robot & Joystick: Bit Controller mit MicroPython - Gunook
Video: How to make a Bluetooth remote using a Raspberry Pi Pico W and MicroPython 2024, Dezember
Anonim
Programmieren eines Micro:Bit-Roboters und eines Joystick:Bit-Controllers mit MicroPython
Programmieren eines Micro:Bit-Roboters und eines Joystick:Bit-Controllers mit MicroPython

Für das Robocamp 2019, unser Sommer-Robotik-Camp, löten, programmieren und bauen Jugendliche im Alter von 10 bis 13 Jahren einen BBC micro:bit-basierten „Antweight-Roboter“sowie einen micro:bit als Fernbedienung.

Wenn Sie derzeit bei Robocamp sind, fahren Sie mit Schritt 3 fort, da wir die ersten beiden Schritte als Gruppe durchgeführt haben

Dies ist eine Schritt-für-Schritt-Anleitung, wie Sie einen micro:bit-Roboter mit einem Joystick:Bit-Controller kommunizieren lassen.

Es braucht nicht den schnellsten Weg, um alles zum Laufen zu bringen, sondern probiert Dinge in kleinen Stücken aus, damit Sie den Code unterwegs testen, ihm Ihren eigenen Stempel aufdrücken und verstehen können, warum wir das tun, was wir tun !

Für diese Aktivität verwenden wir unseren eigenen benutzerdefinierten Roboter, der jedoch mit jedem Roboter funktioniert, der einen ähnlichen Motortreiber verwendet, z. B. einen L9110s.

Designdateien für unseren Roboter finden Sie hier:

Diese Anleitung ist für Anfänger geschrieben, aber wenn Sie noch nie ein micro:bit mit MicroPython verwendet haben, empfehlen wir Ihnen, zuerst ein einfacheres Programm auszuprobieren, wie zum Beispiel unser Namensschild Instructable: https://www.instructables.com/id/Felt -Microbit-Name…

Lieferungen

2x BBC micro:bit

Roboter, der mit einem BBC micro:bit arbeitet (siehe Erklärung oben)

Joystick: Bit Controller (wir haben unseren von Cool Components bekommen)

Schritt 1: Roboter-Setup

Sie haben einige Möglichkeiten, MicroPython-Code für Ihr micro:bit zu schreiben:

  • Mu, die Sie hier herunterladen und installieren können:
  • Der Online-Editor, den Sie hier finden:

In dieser Anleitung wird davon ausgegangen, dass Sie Mu verwenden

Öffnen Sie Mu und schließen Sie Ihr micro:bit an Ihren Computer an. Mu sollte erkennen, dass Sie ein micro:bit verwenden und micro:bit 'Mode' auswählen, aber wenn dies nicht der Fall ist, ändern Sie es manuell.

Modus wählen
Modus wählen

Holen Sie sich hier eine Kopie des Robotermotor-Testcodes:

Wenn Sie nicht an Github gewöhnt sind, kann es unintuitiv sein! Zwei einfache Möglichkeiten, diesen Code zu erhalten, sind:

  1. Speichern Sie die Raw-Datei auf Ihrem Computer und laden Sie sie dann in Mu:
  2. Kopieren Sie den gesamten angegebenen Code und fügen Sie ihn in eine neue Datei in Mu ein.
Rohdatei speichern
Rohdatei speichern

Klicken Sie nun in der Symbolleiste von Mu auf die Schaltfläche 'Flash', um Ihren neuen Code an das micro:bit zu senden.

Dies funktioniert nur, wenn das micro:bit eingesteckt ist

Das gelbe Licht auf der Rückseite des micro:bit beginnt zu blinken. Wenn es fertig ist, wurde Ihr Code übertragen.

EINSTELLEN DER MOTORRICHTUNGEN

Dieses Programm schaltet die Motoren in verschiedene Richtungen ein, wenn Sie die 'A'-Taste auf dem micro:bit drücken.

Was Sie wollen, ist:

  • Wenn 'A' angezeigt wird, linker Motor vorwärts
  • Wenn 'B' angezeigt wird, linker Motor rückwärts
  • Wenn 'C' angezeigt wird, rechter Motor vorwärts
  • Wenn 'D' angezeigt wird, rechter Motor rückwärts

Dies wird wahrscheinlich nicht der Fall sein, da es davon abhängt, wie Sie Ihren Roboter verkabelt haben!

Oben im Code finden Sie eine Liste von Variablen, die bestimmen, welcher Pin am micro:bit welche Motorrichtung steuert.

Wenn Sie einen unserer Roboter (Dateien) verwenden, tauschen Sie die Variablennamen aus, damit sich der Roboter in die richtigen Richtungen bewegt:

Pin-Variablen tauschen
Pin-Variablen tauschen

Wenn Sie einen eigenen Roboter verwenden, überprüfen Sie, mit welchen Pins der Motortreiber verbunden ist, bevor Sie den Code bearbeiten.

TESTEN DES ANTRIEBS

Überprüfen Sie nun, wie Ihr Roboter fährt, indem Sie den Testcode in der Hauptschleife durch einen eigenen Code ersetzen.

Sie sagen dem Roboter, dass er fahren soll, indem Sie die Funktion drive() aufrufen. Dies erfordert zwei Argumente - einen Wert für den linken Motor und einen Wert für den rechten Motor zwischen 0 (aus) und 1023 (maximale Geschwindigkeit).

Durch Aufrufen von drive(500, 500) weisen Sie beispielsweise beide Motoren an, sich in Vorwärtsrichtung mit etwa halber Geschwindigkeit einzuschalten.

Probieren Sie einige Optionen aus, um ein Gefühl dafür zu bekommen, wie gerade er fährt und wie gut er sich dreht.

Hinweis: Die Motortests befanden sich sowohl in einer while True-Schleife als auch in einer if-Anweisung - die Motoren würden sich nicht drehen, bis Sie die A-Taste auf dem micro:bit gedrückt haben, und es wird ständig überprüft, ob Sie die A-Taste gedrückt haben.

Hinweis: Die Motoren werden nicht ausgeschaltet, bis Sie es ihnen sagen! Sie werden immer ihre letzte Anweisung ausführen.

OPTIONAL: VERBESSERTES FAHREN IN GERADELINIE

Wenn Ihr Roboter nicht geradeaus fährt, dreht sich möglicherweise einer Ihrer Motoren schneller als der andere.

Nachdem Sie überprüft haben, dass das Rad durch nichts physisch daran gehindert wird, sich frei zu drehen, können Sie den Code in der Antriebsfunktion bearbeiten, um die Geschwindigkeit des schnelleren Motors zu reduzieren.

Scrollen Sie nach oben, um die Definition der Antriebsfunktion zu finden, und sehen Sie sich die beiden oberen Anweisungen an:

def Laufwerk (L, R):

# Unten finden Sie eine Anpassung zur Korrektur der Motordrehzahlabweichung L = int(L*1) R = int(R*1)

Diese beiden Zeilen nehmen derzeit den Wert von L und R an, multiplizieren sie mit 1 und stellen dann sicher, dass sie immer noch ganze Zahlen (int) sind.

Wenn Ihr linker Motor beispielsweise schneller ist, ändern Sie *1 in seiner Zeile in *0.9 und sehen Sie, ob dies die Dinge verbessert.

Sie werden es nicht perfekt machen können, aber Sie können es so lange anpassen, bis es gerader fährt.

EINRICHTEN DES RADIOS

Richten Sie nun das Radio ein, indem Sie die folgenden Zeilen am Anfang Ihres Codes hinzufügen:

Radio importieren

radio.config(Kanal=7, Gruppe=0, Warteschlange=1) radio.on()

Dadurch kann Ihr Roboter Anweisungen von einem anderen micro:bit empfangen, aber im Moment empfängt er Anweisungen von jedem anderen micro:bit.

Dies liegt daran, dass Kanal 7 und Gruppe 0 die Standardkanäle sind.

Ändern Sie diese Nummern, indem Sie einen Kanal zwischen 0-82 und eine Gruppe zwischen 0-255 wählen. Jetzt erhält Ihr micro:bit nur noch Anweisungen von anderen mit denselben Konfigurationsinformationen.

Queue=1 bedeutet, dass das micro:bit nur eine eingehende Nachricht gleichzeitig speichert - dies ergibt eine etwas schnellere Reaktionszeit als der Standardwert von 3.

Jetzt müssen Sie Ihren Hauptschleifencode bearbeiten, um beim Drücken einer Taste Anweisungen auszuführen, auf eine eingehende Funknachricht zu warten und entsprechend zu reagieren.

Probieren Sie den folgenden Code als Test aus (er tut nichts, bis Sie den Joystick in Schritt 2 eingerichtet haben):

während Wahr:

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

Schritt 2: Joystick-Setup

Trennen Sie das micro:bit Ihres Roboters und schließen Sie stattdessen das micro:bit Ihres Joysticks an

Holen Sie sich hier eine Kopie des Joystick-Setup-Codes:

Richten Sie das Funkgerät mit derselben Konfiguration (Kanal- und Gruppennummer) wie für den Roboter ein - so können die beiden miteinander kommunizieren.

Starten Sie am Ende des Programms Ihre Hauptschleife:

während Wahr:

if button_a.was_pressed(): radio.send('vorwärts')

Dieser Code verwendet noch nicht das joystick:bit. Es verwendet Taste A auf dem micro:bit, um eine Nachricht zu senden.

Stellen Sie sicher, dass sowohl Ihr Roboter als auch Ihr Controller micro:bits mit Strom versorgt werden, und drücken Sie dann die Taste, um Ihre Nachricht zu senden.

Wenn die Nachricht erfolgreich empfangen wurde und sich Ihr Roboter bewegt… gut gemacht! Sie sind mit der Einrichtungsanleitung fertig.

TIPPS ZUR FEHLERBEHEBUNG

Wenn Sie eine Fehlermeldung auf Ihrem Controller micro:bit erhalten… debuggen Sie Ihren Controller-Code

Wenn Sie eine Fehlermeldung auf Ihrem Roboter micro:bit erhalten… Ihre Funknachricht wurde erfolgreich gesendet! Aber der Roboter kann es nicht verstehen, also überprüfen Sie, ob die Nachricht, die Sie gesendet haben, und die Nachricht, die Sie dem Roboter gesagt haben, auf Übereinstimmungen zu hören.

Wenn gar nichts passiert

  • Stellen Sie sicher, dass Sie den richtigen Code in jedes micro:bit geflasht haben - es ist leicht, versehentlich den falschen zu flashen!
  • Stellen Sie sicher, dass Ihre Kanal- und Gruppennummern auf jedem micro:bit. übereinstimmen

Schritt 3: Überprüfen der Joystick-Werte

Die nächsten Schritte verwenden alle den Controller-Code

Bevor Sie den Joystick Ihres Controllers verwenden können, müssen Sie wissen, welche Werte Sie erhalten, wenn Sie den Stick drücken.

Ersetzen Sie Ihre Hauptschleife durch den folgenden Code:

während Wahr:

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

Flashen Sie diesen Code in Ihr micro:bit und klicken Sie dann auf die Schaltfläche REPL in der Symbolleiste von Mu. Dadurch wird unten im Editor ein Terminal geöffnet, das Ihnen einen Echtzeit-Link zum micro:bit bietet.

öffne die REPL
öffne die REPL

Dies funktioniert nur, wenn das micro:bit eingesteckt ist

Drücken Sie bei geöffnetem REPL die Reset-Taste auf der Rückseite Ihres micro:bit.

Bild
Bild

Sie sollten sehen, dass einige Werte 'gedruckt' auf Ihrem Bildschirm anzeigen:

Werte im Terminal
Werte im Terminal

Drücken Sie den Stick des Joysticks und sehen Sie, was mit den Zahlen passiert.

Notieren Sie sich die angezeigten Werte, wenn sich der Joystick in Mittelstellung befindet - in meinem Fall (518, 523).

Klicken Sie erneut auf die Schaltfläche REPL in der Symbolleiste von Mu, um sie zu schließen - Sie können keinen neuen Code in das micro:bit flashen, während es geöffnet ist.

Schritt 4: Anpassen der X- und Y-Variablen

Sie möchten die von der Joystick-Funktion angegebenen Werte so ändern, dass:

  • in der Mitte ist es null
  • nach oben ist positiv
  • unten ist negativ.

Dies entspricht den Anweisungen, die der Roboter benötigt – eine positive Zahl, um vorwärts zu fahren, und eine negative Zahl, um rückwärts zu fahren.

Sehen Sie sich die Zahlen an, die Sie im letzten Schritt erhalten haben. Die erste Zahl ist x und die zweite Zahl ist y.

Bearbeiten Sie die bereits im Programm enthaltene joystick_push()-Definition, um Ihre Werte vom Original zu entfernen:

def joystick_push():

x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 Rückgabe x, y

Verwenden Sie Ihre eigenen Nummern, sie können sich von meinen unterscheiden

Flashen Sie Ihren neuen Code, öffnen Sie die REPL, drücken Sie die Reset-Taste des micro:bit und überprüfen Sie Ihre Werte.

Bekommst du (0, 0)?

Schritt 5: Konvertieren von X und Y in Werte für den linken und rechten Motor

Im Moment wird dieser Joystick nicht sehr nützlich sein, um einen Roboter zu fahren. Ganz nach vorne geschoben erhalten Sie einen Wert wie (0, 500).

Wenn Sie dem Roboter diese Zahlen geben, würde er den rechten Motor einschalten, aber nicht den linken, was nicht das ist, was Sie wollen!

Dieses Diagramm zeigt, was mit den x- und y-Werten passiert, wenn Sie den Joystick bewegen, und was der Roboter tun soll, wenn Sie den Joystick bewegen.

Diagramm
Diagramm

Sie müssen etwas Mathematik anwenden, um die x- und y-Werte zu mischen, um etwas Nützlicheres zu erhalten.

n

DIE MATHEMATIK

Beginnen wir damit, den Joystick ganz nach vorne zu drücken.

Ein Beispiel für die Werte, die Sie möglicherweise erhalten, ist:

x = 0

y = 500

Um für den Roboter nützlich zu sein, möchten Sie Werte wie diese erhalten:

links = 500

rechts = 500

Versuchen wir, x und y auf verschiedene Weise zu addieren, um zu sehen, welche Zahlen wir erhalten:

x + y = 0 + 500 = 500

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

Schauen wir uns nun an, was passiert, wenn wir den Joystick ganz nach rechts drücken.

Ein Beispiel für die Werte, die Sie möglicherweise erhalten, ist:

x = 500

y = 0

Damit der Roboter nach rechts abbiegt, soll der linke Motor vorwärts und der rechte Motor rückwärts fahren:

links = 500

rechts = -500

Probieren wir unsere Formel noch einmal aus:

x + y = 500 + 0 = 500

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

Vergleichen Sie die beiden Formelsätze, um herauszufinden, welche Option Ihnen den richtigen linken Wert und welche Option den richtigen rechten Wert liefert.

Versuchen Sie es mit einigen der Werte, die Sie von Ihrem eigenen Joystick erhalten, um sicherzustellen, dass die von Ihnen ausgewählte Formel jederzeit funktioniert.

n

ERWEITERUNG DER JOYSTICK-FUNKTION

Erweitern und bearbeiten Sie die Joystick-Funktion, um zwei neue Variablen für links und rechts zu erstellen und diese Werte anstelle von x und y zurückzugeben:

def joystick_push():

x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 left = right = Return links, rechts

Flashen Sie Ihren neuen Code, öffnen Sie die REPL, drücken Sie die Reset-Taste des micro:bit und überprüfen Sie Ihre Werte.

Erhalten Sie die erwarteten Werte?

Wenn Sie weitere Hilfe benötigen, sehen Sie sich unseren Beispielcode hier an:

Schritt 6: Senden der Werte als Funknachrichten

Jetzt haben Sie einige Werte, die Sie an Ihren Roboter senden können.

Bearbeiten Sie Ihre Hauptschleife, sodass sie die Werte des Joysticks überprüft, aber anstatt die Werte auszudrucken, werden sie zum Senden als Funknachricht bereit gemacht.

während Wahr:

Joystick = joystick_push() Nachricht = str(joystick[0]) + " " + str(joystick[1])

Dadurch wird die Nachricht noch nicht gesendet!

Was passiert in dieser neuen Codezeile?

  • joystick[0] bedeutet die erste Information, die aus der Joystick-Funktion kommt (links)
  • Joystick[1] ist die nächste Information (rechts)
  • str() konvertiert diese beiden Zahlen in ein String-Format (Text statt Zahlen) - dies ist notwendig, um die Informationen über das Funkgerät senden zu können.

Sie werden es gewohnt sein, + als Addition zu sehen - es kann sowohl Zahlen addieren als auch Strings verketten, was bedeutet, dass die beiden Informationsbits zusammengehalten werden.

Beispiel:

150 + 100 = 250

Str(150) + Str(100) = 150100

Die Verkettung hält also Ihre linken und rechten Werte zusammen.

Um eine Trennung zwischen den beiden Informationsbits zu erzwingen (damit der Roboter weiß, dass es sich um zwei Informationsbits handelt), verketten Sie mit " " eine zusätzliche Zeichenfolge dazwischen. Die Sprechzeichen um das Leerzeichen bedeuten, dass es sich bereits um eine Zeichenfolge handelt.

Erweitern Sie abschließend Ihren Code, um diese neu erstellte Nachricht über das Funkgerät zu senden:

radio.senden (Nachricht)

schlafen(10)

Der Schlaf verlangsamt das Versenden von Nachrichten, damit das empfangende micro:bit nicht mit zu vielen Informationen überlastet wird!

Flashen Sie diesen Code in Ihren Controller micro:bit und debuggen Sie alle Fehler, bevor Sie mit dem nächsten Schritt fortfahren

Schritt 7: Empfangen der Nachrichten auf Ihrem Roboter

Gehen Sie von Anfang an zu Ihrem Robotercode zurück - denken Sie daran, Ihren Controller micro:bit zu trennen, damit Sie nicht versehentlich den Robotercode darauf flashen

Scrollen Sie nach unten zu Ihrer Hauptschleife - entfernen Sie den Testcode und fügen Sie stattdessen diesen hinzu:

während Wahr:

Nachricht = radio.receive() print(Nachricht) sleep(100)

Dies setzt eine Variable gleich der eingehenden Nachricht und druckt die Nachricht an die REPL - um zu überprüfen, ob die Nachrichten wie erwartet durchkommen.

Flashen Sie Ihren neuen Code, der mit dem REPL verbunden ist, und drücken Sie dann den Joystick.

Sie sollten so etwas bekommen:

REPL-Werte
REPL-Werte

TIPPS ZUR FEHLERBEHEBUNG

Wenn Sie eine Fehlermeldung auf Ihrem Controller micro:bit erhalten… debuggen Sie Ihren Controller-Code

Wenn Sie eine Fehlermeldung auf Ihrem Roboter micro:bit erhalten… Ihre Funknachricht wurde erfolgreich gesendet! Aber der Roboter kann es nicht verstehen, also überprüfen Sie, ob die Nachricht, die Sie gesendet haben, und die Nachricht, die Sie dem Roboter gesagt haben, auf Übereinstimmungen zu hören.

Wenn gar nichts passiert

  • Stellen Sie sicher, dass Sie den richtigen Code in jedes micro:bit geflasht haben - es ist leicht, versehentlich den falschen zu flashen!
  • Stellen Sie sicher, dass Ihre Kanal- und Gruppennummern auf jedem micro:bit. übereinstimmen

Schritt 8: Verwenden der eingehenden Nachrichten zur Steuerung der Robotermotoren

Sie erhalten jetzt zwei Nummern als Zeichenfolge über das Funkgerät.

Sie müssen diese Nachricht in zwei Strings aufteilen, dann die Strings wieder in Zahlen umwandeln und diese an die Drive-Funktion übergeben. Viel los auf einmal!

Bevor Sie dies tun, müssen Sie überprüfen, ob die empfangene Nachricht das richtige Format hat.

Wenn keine Nachrichten gesendet werden, erhalten Sie stattdessen „Keine“. Wenn Sie versuchen, dies zu teilen, erhalten Sie eine Fehlermeldung.

während Wahr:

message = radio.receive() wenn die Nachricht nicht None ist: message = message.split() drive(int(message[0]), int(message[1]))

Was passiert hier?

  • Der neue Code wird ausgeführt, wenn die Nachricht etwas anderes als 'Keine' ist.
  • message.split() sucht nach einem Leerzeichen in der Nachricht (das wir im letzten Schritt hinzugefügt haben) und verwendet dies, um die Nachricht in zwei Teile zu teilen.
  • int(message[0]), int(message[1]) macht das Gegenteil von dem, was wir im vorherigen Schritt gemacht haben - ruft jede Information einzeln ab und wandelt sie in eine ganze Zahl (eine ganze Zahl) um.
  • int(message[0]) wird als Wert für den linken Motor in der Antriebsfunktion verwendet und int(message[1]) wird als Wert für den rechten Motor verwendet.

Überprüfen Sie, ob es funktioniert - drehen sich die Motoren, wenn Sie den Joystick drücken?

Wenn nicht - Zeit für ein paar Debugging!

Wenn ja, fantastisch! Sie haben einen funktionierenden ferngesteuerten Roboter!

Verbringen Sie einige Zeit damit, mit Ihrem Roboter zu üben, bevor Sie mit dem nächsten Schritt fortfahren. Fährt es so, wie Sie es erwarten?

Die nächsten Schritte zeigen Ihnen, wie Sie die Tasten auf dem Joystick verwenden, um Ihrem Roboter zusätzliche Funktionen hinzuzufügen

Wenn Sie unsere bisherige Version dieses Codes sehen möchten:

  • Roboter:
  • Controller:

Schritt 9: Verwenden der Schaltflächen - Empfangen zusätzlicher Nachrichten

Im Moment versucht Ihr Code, alle Nachrichten aufzuteilen, die nicht None sind. Das heißt, wenn es beispielsweise „Hallo“empfängt, erhalten Sie eine Fehlermeldung.

Damit Ihr micro:bit andere Nachrichten interpretieren kann, muss es zuerst jede erwartete Nachricht überprüfen und dann die Nachricht nur dann aufteilen, wenn es nicht angewiesen wurde, etwas anderes damit zu tun.

Erweitern Sie Ihren Code wie folgt:

wenn die Nachricht nicht None ist:

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

Zunächst wird überprüft, ob die Nachricht „Hallo“empfangen wurde. Wenn dies der Fall ist, wird ein glückliches Bild angezeigt, dann gehe zurück zum Anfang der Schleife und suche nach der nächsten Nachricht.

Wenn die Nachricht nicht "Hallo" lautet, wird als nächstes überprüft, ob die Nachricht "Ente" lautet.

Wenn die Nachricht weder 'Hallo' ODER 'Ente' lautet, wird es das Letzte auf der Liste tun, das die Nachricht aufteilt und die Motoren einschaltet. Es wird nicht versuchen, die Nachricht zu teilen, wenn es "Hallo" oder "Ente" empfangen hat, was bedeutet, dass Sie von keiner dieser beiden Nachrichten eine Fehlermeldung erhalten.

Das doppelte Gleichheitszeichen ist wichtig - es bedeutet 'ist gleich' im Vergleich zu einem einfachen Gleichheitszeichen, das etwas setzt (also Message = 'Hallo' bedeutet, dass wir die Variable auf 'Hallo' setzen, Nachricht == 'Hallo' bedeutet, dass wir fragen, ob die Nachricht gleich "Hallo" ist).

Probieren Sie es jetzt mit nur zwei Optionen aus, um es zu testen - Sie können später so viele andere Nachrichten hinzufügen, wie Sie möchten.

Link zum Arbeitscode:

Schritt 10: Senden zusätzlicher Nachrichten mit den Tasten des Controllers

Trennen Sie das micro:bit Ihres Roboters und schließen Sie stattdessen das micro:bit Ihres Joysticks an

Gehen Sie zurück zu Ihrem Controller-Code, um ihn zu bearbeiten.

Ähnlich wie beim Robotercode möchten wir, dass der Controller prüft, ob Sie versuchen, andere Nachrichten zu senden, bevor die Joystick-Werte gesendet werden.

Oben in der Schleife möchten wir immer noch die aktuellen Werte des Joysticks überprüfen, aber auch überprüfen, ob gerade eine Taste gedrückt wird:

während Wahr:

Joystick = joystick_push() button = button_press()

button_press() gibt einen Wert A, B, C, D, E oder F zurück, je nachdem welche Taste gerade gedrückt wird (wenn nichts gedrückt wird, wird None zurückgegeben).

Jetzt können wir eine if-elif-else-Anweisung machen, wie wir es für den Robotercode getan haben - mit zwei Tasten und dem Senden des Joystick-Werts, wenn keine Taste gedrückt wird.

if-Taste == 'A':

radio.send('hallo') sleep(500) elif button == 'B': radio.send('duck') sleep(500) else: message = str(joystick[0]) + " " + str(joystick [1]) radio.send(Nachricht) sleep(10)

Wenn eine Taste gedrückt wird, senden Sie eine der Nachrichten, auf die der Roboter im vorherigen Schritt achten soll.

Die Nachricht wird gesendet, wenn die Taste gedrückt wird, und Computer sind viel schneller als Menschen! Es kann also sein, dass die Nachricht viele Male gesendet wird, bevor Sie es geschafft haben, den Finger vom Knopf zu nehmen.

Der Schlaf nach dem Senden der Nachricht verlangsamt ihn, damit er den Button nicht so schnell wieder überprüft - probiere ein paar Zahlen hier aus, um die perfekte Zeit für dich zu bekommen - zu langsam und er reagiert auch nicht mehr schnell und Ihr Roboter empfängt so viele Tastenmeldungen, dass er möglicherweise nicht mehr auf den Joystick reagiert!

Funktioniert es?

Wenn Sie Fehlermeldungen erhalten, denken Sie sorgfältig darüber nach, was Sie gerade geändert haben und was passiert.

Wenn Sie beim Drücken einer Taste auf Ihrem Controller eine Fehlermeldung am Roboter erhalten, wissen Sie, dass die Nachricht ankommt, aber sie verwirrt den Roboter. Überprüfen Sie, ob die von Ihnen gesendete Nachricht und die Nachricht, nach der der Roboter suchen soll, identisch sind.

Link zum Arbeitscode:

Schritt 11: Nächste Schritte

Sie haben jetzt das Wissen, das Sie benötigen, um mit den Motoren Ihres Roboters und mit Ihrem Joystick:Bit-Controller zu arbeiten

Nutzen Sie dieses Wissen, um die beiden Programme zu verbessern und zu Ihren eigenen zu machen. Einige Ideen unten!

Sie haben sechs Tasten auf Ihrem Controller! Was sollen sie tun?

  • Wie wäre es, wenn Ihr Roboter eine Tanzroutine programmiert, die er auf Befehl ausführen kann? Schreiben Sie einen Algorithmus von drive()-Befehlen, getrennt durch sleep()-Befehle!
  • Möchten Sie die Bewegungsrichtung des Roboters ändern, damit er problemlos kopfüber fahren kann? Denken Sie an die x- und y-Werte Ihres Joysticks. Was stellen sie dar und wie könnten Sie sie manipulieren?
  • Hat Ihr Roboter (oder könnten Sie hinzufügen!) zusätzliche Funktionen wie LEDs, einen Lautsprecher oder Sensoren?

Ideen zur Verbesserung des Codes

  • Könnten Sie Ihrem Roboter helfen, mit unbekannten Nachrichten fertig zu werden, indem Sie Try/Exception-Code verwenden?
  • Die Mathematik, die verwendet wird, um die linken und rechten Werte des Joysticks zu berechnen, gibt uns nicht den vollen Wertebereich (der Antrieb des Roboters kann eine Zahl bis zu 1023 akzeptieren). Können Sie diesen Code bearbeiten, um eine bessere Reichweite zu erhalten?
  • Es gibt andere Methoden zum Mischen der Joystick-Werte - können Sie sich eine bessere Methode einfallen lassen?

Empfohlen: