-
Notifications
You must be signed in to change notification settings - Fork 3
Robotling API (MMBasic)
Die Robotling2-Funktionsbibliothek (library) erwartet die folgende Pin-Belegung:
' M1 = Pin 14 (GP10) -> Servo motor 1 (PWM5A)
' M2 = Pin 27 (GP21) -> Servo motor 2 (PWM2B)
' M3 = Pin 4 (GP2) -> Servo motor 3 (PWM1A)
' LED = Pin 15 (GP11) -> Onboard LED
Falls ein Time-Of_Flight Distanzsensor von Pololu angeschlossen ist:
' A0 = Pin 32 (GP26) -> left distance sensor out
' A1 = Pin 32 (GP27) -> centre distance sensor out
' D0 = Pin 5 (GP3) -> right distance sensor out
Die Belegung der Erweiterungsleiste (servo port):
Const R.TX = 6 ' GP4 / COM2
Const R.RX = 7 ' GP5
Const R.SDA = 1 ' GP0 / I2C
Const R.SCL = 2 ' GP1
Const R.A0 = 31 ' GP26 / ADC0
Const R.A1 = 32 ' GP27 / ADC1
Const R.A2 = 34 ' GP28 / ADC2
Const R.D0 = 5 ' GP3
Const R.D1 = 29 ' GP22
-
R.DISPLAYGibt die Art des erkannten Displays an (sieheR.GetDisplayType())
-
R.LibVersion
liefert die Version der Bibliothek als Gleitkommazahl -
R.Name$
liefert derzeitRobotling2 -
R.Servos_On
1=Default, Servos sind an; 0=Servos bleiben aus -
R.Verbose
1=Default, es werden Zustandsnachrichten ausgegeben; 0=Keine Nachrichten -
R.Debug
0=Default, 1=Detailierte Fehlermeldung werden ausgegeben -
R.D_Cliffin cm
20=Default, alles jenseits dieses Abstands ist eine Klippe -
R.D_Objectin cm
5=Default, alles näher als dieser Abstand ist ein Hindernis
Bewegung
-
R.Move mode, vel
Lässt den Roboter abhängig vonmodezu loslaufen.modekann die WerteSTOP,FORWARD,TURN_LEFT,TURN_RIGHToderBACKWARDannehmen.velgibt die Geschwindigkeit in Prozent an. -
R.Stop
Hält den Roboter an. -
R.isMoving() As integer
Liefert 1 zurück, wenn eine Bewegung im Gange ist, ansonsten 0. -
R.MoveServos dt_ms, a1_deg, a2_deg, a3_deg
Bewegt die Servomotoren innerhalb vondt_msMillisekunden zu den Winkelna1_deg,a2_degunda3_deg. Der Befehl stößt die Bewegung an und kehrt sofort zurück; die Bewegung selbst wird von einer Interrupt-Routine am laufen gehalten. -
_Angle2Duty(i, a_deg) As float
Berechnet für Servomotorianhand eines Winkels (in °) den "duty cycle" (in %).
Power
-
R.Shutdown
Fährt den Roboter herunter -
R.Power state
Schaltet die Servos und ggf. ein Display an (1) oder aus (0)
LEDs
-
R.SetLED state
Schaltet die LED auf dem Robotling2-Board an (1) oder aus (0). -
R.SetRGBLED rgb, mode
Setzt die RGB-LED auf dem Breakout des PicoDisplays auf die Farbergb.modekann weggelassen werden (=nur Farbe setzen),START_BEAT(Pulsieren starten) oderSTOP_BEAT(Pulsieren anhalten) sein.
Sensoren
-
R.CreateSensor i, pin, type, nAv, mode
Initialisiert den Sensorides Typstypeam Pinpin.typekannSHARP_IR_15oderPOLOLU_TOF_50seinnAvist die Anzahl der Messungen, die gemittelt werden ("sliding average")modekann beim TypPOLOLU_TOF_50den WertUSE_PULSIN(=benutzePulsin) annehmen. -
R.Dist_cm(i)
Liefert die gemessene Distanz (in cm) für Sensorizurück.
Display
-
R.GetDisplayType()Versucht das angeschlossene Display zu erkennen:
0= kein Display erkannt
1= Pimoroni 240x135 pico display pack (1)
2= Pimoroni 240x240 1.3" display -
R.Splash t_ms
Zeigt den Splash-Screen mit Versionsinformationen fürt_msMillisekunden an. -
R.CreateGUI
Erzeugt eine GUI auf dem Display, falls eines angeschlossen ist. -
R.UpdateGUI t_on_s
Aktualisiert die GUI auf dem Display. Wennt_on_s> 0 wird die GUI auch aktualisiert, wenn sich der Roboter sich im Ruhezustand befindet. -
R.OnKey key, cb$
Hängt die Routine mit dem Namencb$an den Schalterkeyauf dem Display-Breakout.keykannR.KEY_A,R.KEY_B,R.KEY_XoderR.KEY_Ysein.
Nur fürR.DISPLAY = 1
Status und Kontrolle
-
R.Spin tout_ms, untilMoveDone
Wartet fürtout_msMillisekunden; wennuntilMoveDone = END_OF_MOVEkehrt die Funktion bereits zurück, wenn die laufende Bewegung abgeschlossen ist.
Diese Routine muss stattPauseaufgerufen werden, daR.Spinverschiedene Prozesse am Laufen hält, wie z.B. das Auslesen der Sensoren, das Pulsieren der RGB-LED und das Updaten der GUI auf dem Display. -
R.Log type, msg$
Gibt die Nachrichtmsg$vom Typtype(NONE,INFOoderERR) im Terminal aus. -
R.Mode()
Liefert den aktuellen Status (mode) des Roboters zurück.
R.State$(R.Mode())liefert den Status als String.
Die Pins der Servomotoren werden entsprechend der Belegung auf der Platine im Programm über Konstanten festgelegt:
Const R.M1 = 14 ' Servo motor 1 (PWM5A)
Const R.M2 = 27 ' Servo motor 2 (PWM2B)
Const R.M3 = 4 ' Servo motor 3 (PWM1A)
Man sollte daher meinen, dass man einfach die Pins ändern, um die Servos über andere Pins zu betreiben. Leider macht dies MMBasic nicht einfach, denn obwohl die Zuordnung von Pin und PWM-Kanal (z.B. Pin 14 -> PWM5A) eigentlich beim Pico festgelegt ist - jeder Pin kann nur einen bestimmten Kanal steuern - verlangt SetPin explizit die Kanalnummer (z.B. SetPin 14, PWM5A). Als Kanalnummer wird hier keine Variable akzeptiert. Bei der Ansteuerung des PWM-Kanals durch PWM (z.B. PWM 5, SERV_FREQ_HZ, p0) kann der Kanal zwar eine Variable sein, aber der Befehl steuert ein PWM-Kanalpaar, d.h. die Angabe PWM5A landet als Kanalpaarnummer (5) und Argumentposition (=Kanal A oder B) in der Parameterliste. D.h. man kann aus der Pin-Nummer zwar auf den Kanal schließen, aber der Code, der ein flexibles Wechseln der Pins ermöglicht, ist umständlich.
Der Einfachheit halber stehen daher am Ende des Programms (bzw. in der library-Version am Ende von rbl_lib.bas) zwei Subroutinen, die immer benutzt werden, wenn die Servos bewegt werden sollen. Möchte man also die Servo-Pins anpassen, muss man nur hier den Code ändern, damit die richtigen PWM-Kanäle angesteuert werden:
Sub _SetPin_M123
SetPin R.M1, PWM5A
SetPin R.M2, PWM2B
SetPin R.M3, PWM1A
End Sub
Sub _PWM_M123 p0, p1, p2, off
' Set PWM for all walk servos or switch off (`off` == 1)
If off Then
PWM 5, OFF
PWM 2, OFF
PWM 1, OFF
Else
PWM 5, SERV_FREQ_HZ, p0
PWM 2, SERV_FREQ_HZ,,p1
PWM 1, SERV_FREQ_HZ, p2
EndIf
End Sub
- Werkzeuge und Material (DE | EN)
- Aufbau
2.1 Mechanik (DE | EN)
2.2 Aufbau und Hinweise (DE | EN)
2.3 Elektronik und Platine (DE | EN) - Sensoren (DE | EN)
- Demo (DE | EN)
- Erweiterungen & Modifikationen
5.1 Alternatives Display (DE | EN)
5.2 CO2-Wächter (DE | EN) - Galerie (DE | EN)
- Software - MMBasic
7.1 MMBasic zum Laufen bringen (DE | EN)
7.2 Kommentare zum Programm (DE | EN)
7.3 Robotling API (DE | EN)
7.4 Building PicoMite MMBasic (DE | EN) - Software - MicroPython
8.1 Running MicroPython (DE | EN)
8.2 Building MicroPython (DE | EN)