Hallo,
das ist mein erster Beitrag in diesem ForumDa 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:
Das Problem liegt irgendwie in '#GetDistances'. Wenn man das Programm startet, fährt der Roboter nur ein kleines Stück und bleibt dann stehen.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 '================================================================================== '================================================================================== '==================================================================================
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
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).Code:GOSUB R_DISTANCE DIST_RIGHT = 0 DIST_RIGHT = HBYTE SHL 8 DIST_RIGHT = DIST_RIGHT + LBYTE
Robotik ist super interessant, aber wenn ich mir überlege dass ich schon bei so einfachen Problemen Schwierigkeiten habe... oje!
Gruß
Rev







Zitieren

Lesezeichen