Wüstenfuchs
09.03.2005, 12:12
Bitte um kommentare von jedem...
Kann man das Programm für den Robby so lassen.. was fehlt was ist überflüssig, was kann mna schöner besser schreiben?
Wir sind soweit gekommen... und es läuft doch nun bitte eure verbesserungs vorschläge.
'--------------------------
'------ 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 TIM byte[6]
define PGM byte[7]
'--- 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)
'-----------------------------------------
'Declaration------------------------------
'-----------------------------------------
define GESCHW_L byte
define GESCHW_R byte
define GeschRev byte
define GeschFwd byte
'################################################# ################################################## #############
'Initialisation-------------------------------
gosub SUBSYS_PWR_ON
beep 368,10,20
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
'gosub NO_ACS_INT:beep 368,10,0
'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:SYS PLM_SLOW
'--------------------------------------------
'Endlosschleife-loop-------------------------
'--------------------------------------------
#loop
GeschFwd=100
SYS COMNAV_STATUS
pause 10
' SYS ACS_HI ';ACS HI POWER (SEHBEREICH ca. 60cm)
' SYS ACS_LO ';ACS LO POWER (SEHBEREICH ca. 30cm)
SYS ACS_MAX ';ACS MAX POWER(SEHBEREICH ca. 100cm)
SYS FWDR:SPEED_R=GeschFwd
SYS FWDL:SPEED_L=GeschFwd
'LEDs
if ACSL_F=on then gosub LED1ON else gosub LED1OFF
if ACSR_F=on then gosub LED4ON else gosub LED4OFF
'Sensoren
SYS COMNAV_STATUS
pause 10
if (ACSR_F=off and ACSL_F=off) then goto loop
if (ACSL_F=on and ACSR_F=on) then goto move_back
if (ACSL_F=on and ACSR_F=off) then goto move_left
if (ACSR_F=on and ACSL_F=off) then goto move_right
beep 368,10,20
'-------- AUSWEICHEN NACH RECHTS -------------
#move_right
SYS FWDR:SPEED_R=0
SYS FWDL:SPEED_L=250
pause 50
goto loop
beep 368,10,20
'-------- AUSWEICHEN NACH LINKS --------------
#move_left
SYS FWDR:SPEED_R=250
SYS FWDL:SPEED_L=0
pause 50
goto loop
beep 368,10,20
'---------- Beide LED on = RÜCKWÄRTS ----
#move_back
GeschRev=100
SYS REVR:SPEED_R=GeschRev
SYS REVL:SPEED_L=GeschRev
pause 50
goto moveBackRight
beep 368,10,20
'--------------------
#moveBackRight
SYS REVR:SPEED_R=0
SYS REVL:SPEED_L=250
pause 50
SYS COMNAV_STATUS
pause 10
if (ACSL_F=on and ACSR_F=on) then goto moveBackLeft else goto loop
beep 368,10,20
'--------------------
#moveBackLeft
SYS REVR:SPEED_R=250
SYS REVL:SPEED_L=0
pause 50
SYS COMNAV_STATUS
pause 10
if (ACSL_F=on and ACSR_F=on) then goto moveBackRight else goto loop
beep 368,10,20
'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 COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#RC5
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
HBYTE=00:SUBCMD=2:sys COMNAV:return
#RC5_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and&HFD
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
HBYTE=00:SUBCMD=2:sys COMNAV:return
'IIIIII SYSTEMROUTINEN SYSTEM IIIIIIIIIIII
#NO_ACS_INT
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ACS_INT_200
SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
HBYTE=50: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
#R_DISTANCE
SUBCMD=7:sys COMNAV:return
es wurde viel mit copy & paste gearbeitet...
also kann es sein dass einiges zuviel definiert wurde...
und warum leuchtet LED2 und 3 ständig?
und wie steuer ich die blauen LED´s an?
Danke schon mal im Vorraus
Kann man das Programm für den Robby so lassen.. was fehlt was ist überflüssig, was kann mna schöner besser schreiben?
Wir sind soweit gekommen... und es läuft doch nun bitte eure verbesserungs vorschläge.
'--------------------------
'------ 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 TIM byte[6]
define PGM byte[7]
'--- 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)
'-----------------------------------------
'Declaration------------------------------
'-----------------------------------------
define GESCHW_L byte
define GESCHW_R byte
define GeschRev byte
define GeschFwd byte
'################################################# ################################################## #############
'Initialisation-------------------------------
gosub SUBSYS_PWR_ON
beep 368,10,20
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
'gosub NO_ACS_INT:beep 368,10,0
'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:SYS PLM_SLOW
'--------------------------------------------
'Endlosschleife-loop-------------------------
'--------------------------------------------
#loop
GeschFwd=100
SYS COMNAV_STATUS
pause 10
' SYS ACS_HI ';ACS HI POWER (SEHBEREICH ca. 60cm)
' SYS ACS_LO ';ACS LO POWER (SEHBEREICH ca. 30cm)
SYS ACS_MAX ';ACS MAX POWER(SEHBEREICH ca. 100cm)
SYS FWDR:SPEED_R=GeschFwd
SYS FWDL:SPEED_L=GeschFwd
'LEDs
if ACSL_F=on then gosub LED1ON else gosub LED1OFF
if ACSR_F=on then gosub LED4ON else gosub LED4OFF
'Sensoren
SYS COMNAV_STATUS
pause 10
if (ACSR_F=off and ACSL_F=off) then goto loop
if (ACSL_F=on and ACSR_F=on) then goto move_back
if (ACSL_F=on and ACSR_F=off) then goto move_left
if (ACSR_F=on and ACSL_F=off) then goto move_right
beep 368,10,20
'-------- AUSWEICHEN NACH RECHTS -------------
#move_right
SYS FWDR:SPEED_R=0
SYS FWDL:SPEED_L=250
pause 50
goto loop
beep 368,10,20
'-------- AUSWEICHEN NACH LINKS --------------
#move_left
SYS FWDR:SPEED_R=250
SYS FWDL:SPEED_L=0
pause 50
goto loop
beep 368,10,20
'---------- Beide LED on = RÜCKWÄRTS ----
#move_back
GeschRev=100
SYS REVR:SPEED_R=GeschRev
SYS REVL:SPEED_L=GeschRev
pause 50
goto moveBackRight
beep 368,10,20
'--------------------
#moveBackRight
SYS REVR:SPEED_R=0
SYS REVL:SPEED_L=250
pause 50
SYS COMNAV_STATUS
pause 10
if (ACSL_F=on and ACSR_F=on) then goto moveBackLeft else goto loop
beep 368,10,20
'--------------------
#moveBackLeft
SYS REVR:SPEED_R=250
SYS REVL:SPEED_L=0
pause 50
SYS COMNAV_STATUS
pause 10
if (ACSL_F=on and ACSR_F=on) then goto moveBackRight else goto loop
beep 368,10,20
'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 COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#RC5
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
HBYTE=00:SUBCMD=2:sys COMNAV:return
#RC5_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and&HFD
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
HBYTE=00:SUBCMD=2:sys COMNAV:return
'IIIIII SYSTEMROUTINEN SYSTEM IIIIIIIIIIII
#NO_ACS_INT
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ACS_INT_200
SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
HBYTE=50: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
#R_DISTANCE
SUBCMD=7:sys COMNAV:return
es wurde viel mit copy & paste gearbeitet...
also kann es sein dass einiges zuviel definiert wurde...
und warum leuchtet LED2 und 3 ständig?
und wie steuer ich die blauen LED´s an?
Danke schon mal im Vorraus