PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pro-Bot128 Linienverfolgung?



pro-bot128
15.04.2011, 18:54
Hallo Leute!
Ich hab mal wieder ne Frage zum Probot.
Ich habe mir mal so einen Skript gebastelt, der nicht funktioniert. Der sieht so aus:


Sub main()
PRO_BOT128_INIT()
LINE_LED_ON()
DRIVE_INIT()
Do While True
If READ_LINE_LEFT() >200 Then
MOTOR_DIR(1,0)
MOTOR_POWER(160,160)
End If
If READ_LINE_RIGHT() >200 Then
MOTOR_DIR(0,1)
MOTOR_POWER(160,160)
End If
If READ_LINE_LEFT() And READ_LINE_RIGHT() >200 Then
DRIVE_FORWARD()
End If
End While
End Sub

Das sollte eine Linienverfolgung werden. Die LED unten geht an, aber der Roboter scheint von der ca.3cm dicken, gedruckten Linie nichts mitzubekommen. Dementsprechend fährt der Bot auch nicht:(.
Hat jemand einen funktionierenden Skript für mich?
Danke

bnitram
16.04.2011, 13:21
Hi pro-bot128
Zuerst würde ich mal deine verwendeten Werte überprüfen, ob sie überhaupt stimmen können.
Hier der Code dafür:


Sub main()
PRO_BOT128_INIT()
LINE_LED_ON()

Do While True
Msg_WriteWord(READ_LINE_LEFT())
Msg_WriteText("Left")
Msg_WriteChar(10)
Msg_WriteChar(13)

Msg_WriteWord(READ_LINE_RIGHT())
Msg_WriteText("RIGHT")
Msg_WriteChar(10)
Msg_WriteChar(13)

AbsDelay(10)
End While
End Sub
Wenn dann mit den richtigen Werten immer noch nichts passiert meldest du dich nochmal.

Mfg
bnitram

PS:
Verwende besser auch Else if...

BMS
16.04.2011, 14:12
Bei der dritten If-Abfrage fehlt etwas, aus

If READ_LINE_LEFT() And READ_LINE_RIGHT() >200
lieber das hier machen:

If READ_LINE_LEFT()>200 And READ_LINE_RIGHT() >200 Then

Und überlege auch, was der Roboter macht, wenn beide READ_LINE einen Wert unter 200 ergeben - dann ist nämlich keine einzige if-Bedingung erfüllt, d.h. der letzte Bewegungszustand wird beibehalten. Soll das so sein?

Falls beide READ_LINE Werte über 200 sein sollten, sind ja alle drei if-Bedingungen erfüllt, also wird der Controller nacheinander alle Befehle die darin enthalten sind, abarbeiten, in dem Fall also
MOTOR_DIR(1,0)
MOTOR_POWER(160,160)
MOTOR_DIR(0,1)
MOTOR_POWER(160,160)
DRIVE_FORWARD()
Damit werden die Motoren sehr oft umgeschaltet, könnte zu unerwünschten Fahrmanövern führen (oder der Roboter wird sehr langsam).
Das solltest du - wie bnitram schon geschrieben hat - mit if, else if, ..., else in den Griff bekommen (oder Verschachtelung von if).

Grüße, Bernhard