-

+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Problem beim Auslesen der Wegstrecke

  1. #1

    Problem beim Auslesen der Wegstrecke

    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:

    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

    Code:
    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    24.12.2010
    Beiträge
    8
    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

  3. #3
    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.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    24.12.2010
    Beiträge
    8
    oh sorry

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •