Ich dachte ihr seid hier die Robby-Freaks?! Da müsstet ihr doch eigentlich so'ne Frage beantworten können, oder?
Könnt ihr mir wenigstens ein anderes Forum nennen, wo ich fragen kann?
MfG
Hallo,
ich hab ein Programm geschrieben, wo Robby erst vorwärts fährt, und sich dann nach links dreht. Aber wenn ich es rauflade, fährt er nur die Geradeaus-Strecke, und bleibt dann stehen. Wisst ihr, wo der Fehler ist?
Ich hab den meisten Code einfach vom Beispiel "Wegstreckenzähler" genommen.Code:'------ I/O PORTS --------- '-------------------------- '- INTERFACE LCD/EXTPORT -- define sdio port[1] define sclio port[3] define strobe port[4] '-- INTERFACE COM/NAV ----- define DATALINE port[1] define CLOCKLINE port[2] '-------------------------- '------ SENSORS --------- '-------------------------- define LIGHT_L ad[7] define LIGHT_R ad[6] define SYS_VOLTS ad[3] define CHRG_CURRENT ad[2] define SYS_CURRENT ad[1] define MIC ad[4] define TOUCH ad[5] '--------------------------- '------ DRIVE ------------- '--------------------------- define SPEED_L da[1] define SPEED_R da[2] define REV_L port[6] define REV_R port[5] '-------------------------- '---- SYSTEM MEMORY ------- '-------------------------- '--- INTERFACE BUFFER ---- define LBYTE byte[1] define HBYTE byte[2] define SUBCMD byte[3] '---- OPERATION DATA ------ define EXTPORT byte[4] define LED1_F bit[29] define LED2_F bit[30] define LED3_F bit[31] define LED4_F bit[32] define SYSTEM_STATUS byte[5] define ACSL_F bit[33] define ACSR_F bit[34] define IR_F bit[35] '-------------------------- '---- USER MEMORY ------- '-------------------------- define GP byte[6] define MAXLIGHT byte[7] define GP1 byte[8] '--- SYSTEMROUTINEN ----------- define PLM_SLOW &H01C4 define SYSTEM &H01C9 define COMNAV &H0154 '- ERWEITERTE SYSTEM ROUTINEN - define REVR &H0101 'ANTRIEB RECHTS RÜCKWÄRTS define REVL &H0106 'ANTRIEB LINKS RÜCKWÄRTS define FWDR &H010B 'ANTRIEG RECHTS VORWÄRTS define FWDL &H0110 'ANTRIEB LINKS VORWÄRTS define ROTR &H0115 'RECHTS DREHEN define ROTL &H0119 'LINKS DREHEN define REV &H011D 'RÜCKWÄRTS define FWD &H0121 'VORWÄRTS define COMNAV_STATUS &H0125 'UPDATED ALLE FLAGS IM STATUS-REGISTER define ACS_LO &H01E1 'ACS POWER LO define ACS_HI &H01E9 ' define ACS_MAX &H01F1 ' define SEND_TLM &H014A 'SENDET TELEMETRIE (CH=HBYTE,DATEN=LBYTE) define SEND_SPEEDR &H0134 'SENDET TLM KANAL 8,PLM RECHTS define SEND_SPEEDL &H013A 'SENDET TLM KANAL 7,PLM LINKS define SEND_SYSSTAT &H0144 'SENDET TLM KANAL 0,SYSTEM STATUS '(FLAGS für ACS,FWD/REV, ACS_LO/HI/MAX) '---------- INIT--------------- gosub SUBSYS_PWR_ON beep 368,10,0:pause 50 gosub NO_ACS_INT:beep 368,10,0:SYS ACS_MAX '------------ ANTRIEB ------------------------- REV_L=on:REV_R=on:SYS PLM_SLOW '-------------------------------------------- '--- WEGSTRECKENZÄHLER --- '-------------------------------------------- gosub CLR_DISTANCE:gosub LEDSOFF:gosub move_fwd #NO_TASK pause 5:SYS COMNAV_STATUS gosub L_DISTANCE if LBYTE=5 then gosub LED1ON if LBYTE=20 then gosub LED2ON if LBYTE=45 then gosub LED3ON if LBYTE=60 then goto links goto NO_TASK '-------------------------------------------- #links gosub CLR_DISTANCE:gosub LEDSOFF:gosub MOVELINKS #NO_TASK2 pause 5:SYS COMNAV_STATUS gosub L_DISTANCE if LBYTE=2 then gosub LED1ON if LBYTE=10 then gosub LED2ON if LBYTE=20 then gosub LED3ON if LBYTE=30 then gosub MOVERECHTS:goto stop goto NO_TASK2 '------------------------------------------- #MOVELINKS SYS FWDR:SYS FWDL:SPEED_L=70:SPEED_R=155:return #stop gosub LED4ON:SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:end #move_fwd SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:return '--------------------------------------------- 'IIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIII #LED1ON LED1_F=on:goto EXTPORT_WRITE #LED1OFF LED1_F=off :goto EXTPORT_WRITE #LED2ON LED2_F=on:goto EXTPORT_WRITE #LED2OFF LED2_F=off:goto EXTPORT_WRITE #LED3ON LED3_F=on:goto EXTPORT_WRITE #LED3OFF LED3_F=off:goto EXTPORT_WRITE #LED4ON LED4_F=on:goto EXTPORT_WRITE #LED4OFF LED4_F=off:goto EXTPORT_WRITE #LEDSOFF EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE #EXTPORT_WRITE SYS SYSTEM:pulse STROBE:RETURN 'IIIIII SYSTEMROUTINEN IIIIIIIII #NO_ACS_INT SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB HBYTE=00:SUBCMD=2:sys COMNAV:return #SUBSYS_PWR_ON sdio=on:sclio=on:strobe=off:EXTPORT=(EXTPORT and &HFE)or 8 sys SYSTEM:return #SUBSYS_PWR_OFF EXTPORT=(EXTPORT and &HF7)or 1:sys SYSTEM deact sdio:deact sclio:return #CLR_DISTANCE SUBCMD=3:sys COMNAV:return #L_DISTANCE SUBCMD=6:sys COMNAV:return
MfG
VISIT PAGE: www.terabyte.us.ms
Ich dachte ihr seid hier die Robby-Freaks?! Da müsstet ihr doch eigentlich so'ne Frage beantworten können, oder?
Könnt ihr mir wenigstens ein anderes Forum nennen, wo ich fragen kann?
MfG
VISIT PAGE: www.terabyte.us.ms
ich halte es für unhöflich eine halbe meile quellcode zu posten, der dazu noch größtenteils unkommentiert ist. nicht darauf hinzuweisen an welcher stelle der fehler auftritt und keine angaben zu machen was du bisher probiert hast um den fehler zu finden.
du kannst doch nicht ernsthaft erwarten, dass sich jemand mit deinen problemen rumschlägt ohne dass du ihm auch nur die geringste hilfestellung gibst.
ich werde mir unter diesen umständen jedenfalls nicht die mühe machen zu gucken was du da fabriziert hast. du bekommst hier hilfe aber keine komplettlösung, ein wenig musst du schon selber tun. das wird in anderen foren auch nicht anders gehandhabt.
einen tip bekommst du: benutz einen debugger
zudem hättest du, da es sich offensichtlich um ein softwareproblem handelt, im c-control forum wahrscheinlich mehr antworten bekommen.
Mit freundlichen Grüßen
Zaphod
There is no place like 127.0.0.1
da sag ich nur: probieren geht über studieren.
Wenn du deinen Quellcode kennst, kannst du auch das was du willst programmieren, bzw. das programmieren was dein Roboter machen soll.
Da stimme ich dir im Prinzip völlig zu. ABER was Terabyte hier gepostet hat ist ein Programm für Robby CRP.ich halte es für unhöflich eine halbe meile quellcode zu posten, der dazu noch größtenteils unkommentiert ist. nicht darauf hinzuweisen an welcher stelle der fehler auftritt und keine angaben zu machen was du bisher probiert hast um den fehler zu finden.
Der grösste Teil des Codes sind die Standardroutinen die in jedem Demo-Programm von Robby CRP enthalten sind.
Jemanden der sich mit Robby CRP auskennt - das ist vermutlich die Zielgruppe der Frage - wird die paar Zeilen die Terabyte da selber geschrieben, bzw. geändert hat sicherlich auch ohne Kommentierung sofort herausfinden.
Leider gehöre ich nicht zu denen die sich besonders gut damit auskennen und sehe nicht wo der Fehler ist.
Ich habe aber mal den Teil extrahiert in dem der Fehler meiner Meinung nach versteckt sein muss.
Code:'---------- INIT--------------- gosub SUBSYS_PWR_ON beep 368,10,0:pause 50 gosub NO_ACS_INT:beep 368,10,0:SYS ACS_MAX '------------ ANTRIEB ------------------------- REV_L=on:REV_R=on:SYS PLM_SLOW '-------------------------------------------- '--- WEGSTRECKENZÄHLER --- '-------------------------------------------- gosub CLR_DISTANCE:gosub LEDSOFF:gosub move_fwd #NO_TASK pause 5:SYS COMNAV_STATUS gosub L_DISTANCE if LBYTE=5 then gosub LED1ON if LBYTE=20 then gosub LED2ON if LBYTE=45 then gosub LED3ON if LBYTE=60 then goto links goto NO_TASK '-------------------------------------------- #links gosub CLR_DISTANCE:gosub LEDSOFF:gosub MOVELINKS #NO_TASK2 pause 5:SYS COMNAV_STATUS gosub L_DISTANCE if LBYTE=2 then gosub LED1ON if LBYTE=10 then gosub LED2ON if LBYTE=20 then gosub LED3ON if LBYTE=30 then gosub MOVERECHTS:goto stop goto NO_TASK2 '------------------------------------------- #MOVELINKS SYS FWDR:SYS FWDL:SPEED_L=70:SPEED_R=155:return #stop gosub LED4ON:SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:end #move_fwd SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:return '---------------------------------------------
Also ich entschuldige mich hier für meinen kleinen Ausraster.
Wie schon gesagt, hab ich den meisten Code aus dem mitgeleifertem Beispielcode "Wegstreckenzähler" übernommen, deshalb ist er auch kaum kommentiert.
Der Teil, den ich geändert hab, ist der:
normalerweise würde der code anstattCode:if LBYTE=60 then goto links '-------------------------------------------- #links gosub CLR_DISTANCE:gosub LEDSOFF:gosub MOVELINKS #NO_TASK2 pause 5:SYS COMNAV_STATUS gosub L_DISTANCE if LBYTE=2 then gosub LED1ON if LBYTE=10 then gosub LED2ON if LBYTE=20 then gosub LED3ON if LBYTE=30 then goto stop goto NO_TASK2 '------------------------------------------- #MOVELINKS SYS FWDR:SYS FWDL:SPEED_L=70:SPEED_R=155:return
so lautenCode:if LBYTE=60 then goto links
Ich hab nur die oben gezeigten Änderungen vorgenommen. Braucht ihr noch Hinweise?Code:if LBYTE=60 then goto stop
MfG
VISIT PAGE: www.terabyte.us.ms
kkkkk
willst du das unbedingt mit dem wegstreckenzähler machen? machs doch einfach so, dass der Roboter n paar sekunden geradeaus fahren und dann ne kurve machen soll.
MfG Jonas
Hallo TeraByte,
(wenn's noch Aktuell ist....)
GrussCode:01 if LBYTE=60 then goto links '<--------hier soll's NICHT stehen 02 03 '-------------------------------------------- 04 #links 05 gosub CLR_DISTANCE:gosub LEDSOFF:gosub MOVELINKS 06 #NO_TASK2 07 pause 5:SYS COMNAV_STATUS 08 gosub L_DISTANCE '<----------------------hier bekommt LBYTE sein wert 09 if LBYTE=2 then gosub LED1ON 10 if LBYTE=10 then gosub LED2ON 11 if LBYTE=20 then gosub LED3ON 12 if LBYTE=30 then goto stop '<-------------Motor stopt bei 30 13 | 14 if LBYTE=25 then goto links '<------------ hier SOLL's stehen, (oder irgendwo zwischen Zeile 08 und 16) 15 'und kleiner als 30 (Motor stop) sein 16 goto NO_TASK2 18 '------------------------------------------- 19 #MOVELINKS 20 SYS FWDR:SYS FWDL:SPEED_L=70:SPEED_R=155:return
Henk
Lesezeichen