PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Auslesen der Wegstrecke



Revenant
05.12.2010, 17:49
Hallo,

das ist mein erster Beitrag in diesem Forum :) Da ich noch keinerlei Elektronik-Kenntnisse habe, habe ich den Tip in einem Einsteiger-Tutorial in eurem Portal beherzigt und mir den Conrad CCRP5 gekauft.

Leider habe ich ein Problem beim Auslesen der Wegstreckensensoren. Ziel ist es den Roboter eine längere Strecke geradeaus fahren zu lassen. Da der Robby jedoch eine leichte Kurve fährt, dachte ich mir ich frage die gefahrene Strecke für den linken und den rechten Motor ab und passe dann deren Geschwindigkeiten an um dem Links- oder Rechtsdrall entgegenzuwirken. Ich kann zwar auf das LBYTE und das HBYTE zugreifen, jedoch scheitere ich daran beide in einem WORD zu speichern.

Ich will letztendlich zwei WORDs miteinander vergleichen (wie gesagt er soll eine relativ große Strecke geradeaus fahren können).

Hier der relevante Code:



'============== CONSTANTS =============
define SPEED_SLOW 50
define SPEED_NORMAL 100
define SPEED_FAST 150
'======================================

'============== VARIABLES =============
define DIST_LEFT WORD
define DIST_RIGHT WORD
'======================================

'============= SYSTEM INIT ============
gosub SUBSYS_PWR_ON ' Subsysteme an
beep 368,10,0:pause 50 ' Programmstart signalisieren
gosub NO_ACS_INT:beep 368,10,0:SYS ACS_HI ' Systemmodus (kein Interrupt)
REV_L=on:REV_R=on:SYS PLM_SLOW ' Sicherheitseinstellungen für Antrieb
'======================================



'================ START OF MAIN ===============
GOSUB CLR_DISTANCE
#Loop

' Pause zwischen den Abfragen der Entfernungssensoren
' ist notwendig, da sonst falsche Werte ausgelesen werden
PAUSE 10 : SYS COMNAV_STATUS
GOSUB GetDistances

IF DIST_LEFT < 170 THEN GOSUB Forward
IF DIST_LEFT > 170 THEN GOSUB StopMotor

GOTO Loop
'==============================================

#GetDistances
GOSUB L_DISTANCE
DIST_LEFT = 0
DIST_LEFT = HBYTE SHL 8
DIST_LEFT = DIST_LEFT + LBYTE

GOSUB R_DISTANCE
DIST_RIGHT = 0
DIST_RIGHT = HBYTE SHL 8
DIST_RIGHT = DIST_RIGHT + LBYTE
RETURN

#SetSpeedSlow
SPEED_L = SPEED_SLOW
SPEED_R = SPEED_SLOW
RETURN

#SetSpeedNormal
SPEED_L = SPEED_NORMAL
SPEED_R = SPEED_NORMAL
RETURN

#StopMotor
GOSUB LED4ON
SPEED_L=0
SPEED_R=0
RETURN

#TurnLeft
'GOSUB LED4ON
'GOSUB LED1OFF
SPEED_R = SPEED_NORMAL + 50
RETURN

#TurnRight
'GOSUB LED1ON
'GOSUB LED4OFF
SPEED_L = SPEED_NORMAL + 50
RETURN

#Forward
IF (NOT ACSL_F) AND (NOT ACSR_F) THEN GOSUB SetSpeedNormal ELSE GOSUB StopMotor
IF (DIST_LEFT > (DIST_RIGHT+3)) THEN GOSUB TurnRight
IF (DIST_RIGHT > (DIST_LEFT+3)) THEN GOSUB TurnLeft
RETURN



'================================================= =================================
'================================================= =================================
'================================================= =================================


Das Problem liegt irgendwie in '#GetDistances'. Wenn man das Programm startet, fährt der Roboter nur ein kleines Stück und bleibt dann stehen.

Im Endeffekt will ich einfach beide Werte, also von LBYTE und HBYTE in einem Word haben um sie vergleichen zu können..
Wenn ich auf das Auslesen der "rechten" Wegstrecke verzichte, also



GOSUB R_DISTANCE
DIST_RIGHT = 0
DIST_RIGHT = HBYTE SHL 8
DIST_RIGHT = DIST_RIGHT + LBYTE


einfach auskommentiere, passiert das nicht. Ich kann mir das Verhalten nicht erklären. Leider kann ich das Verhalten so schlecht debuggen (habe kein Display zur Anzeige von Infos).

Robotik ist super interessant, aber wenn ich mir überlege dass ich schon bei so einfachen Problemen Schwierigkeiten habe... oje!


Gruß
Rev

Kreo
26.12.2010, 21:45
weil du am anfang #loop geschriben has was richtig war aber du has in der mite goto loop geschrieben also has du ne endlos schleife gemacht so das der rest hinter dem goto loop net mehr ausgefürt wird


aja insachen rechtschreibfehler
da bin ich net gut drin

gruß

kreo

Revenant
28.12.2010, 10:45
Das goto loop ist an dieser Stelle schon richtig. Der nachfolgende Code besteht nur aus subroutinen welche durch den Code in der Schleife angesteuert werden.

Kreo
04.01.2011, 10:26
oh sorry ](*,) ](*,) ](*,) ](*,) ](*,)