Hallo,
wie kann ich einstellen, dass der Robby eine bestimmte Entfernung zurück legt und dann stehen bleibt?
Ich denke mal, dass das mit dem Wegstreckenzähler möglich ist(oder??).
Aber wie?
Ich danke euch schonmal im Vorraus für Antworten.
Gruß dj
Druckbare Version
Hallo,
wie kann ich einstellen, dass der Robby eine bestimmte Entfernung zurück legt und dann stehen bleibt?
Ich denke mal, dass das mit dem Wegstreckenzähler möglich ist(oder??).
Aber wie?
Ich danke euch schonmal im Vorraus für Antworten.
Gruß dj
Schau mal auf der CD bei den Beispielprogrammen nach. Da ist irgendwo ein Programm zum Thema Wegstrecke in cm messen. Ich weiß nur nicht genau wo.
jon
Hallo,Jon
Ich hab auf der CD nachgeschaut aber nix gefunden.
Meinst du eine .pdf oder eine .bas Datei?
Kannst du vielleicht selbst nachschauen und dann das Verzeichnis posten?
Gruß dj
Es ist eine .bas-Datei. Der Pfad: /install/Einführung_CCRP5/6_Einführung_Wegstreckenzähler.bas
Das ist ja alles schön und gut aber wie kann ich Robby sagen, dass er z.B.
1m weitfahren soll?
Das beispielprog. hab ich mir schon durchgelesen aber da steht nix drin wie ich andere Werte einstellen kann.
Gruß dj
Ich werde mal schauen, dass ich dir noch heute Abend einen Code zu schreibe oder spätestens morgen früh.
jon
Ganz einfach, du schaust nach, wieviel cm der Robby von einem Messpunkt zum anderen Messpunkt zurück legt. Wenn du dir das Zahnrad anschauen tust, welche als Messung genommen werden, wirst du sehen , das es 2 Löcher hat.
Diese Übersetzung kannst du dann umrechnen bis zum Kettenantriebsrad. So einfach ist da.
Fazit: du baust die Platine ab, und schaust, wie oft die löcher am Nehmer vorbeigehen und misst die zurückgelegte Strecke.
Geht einfacher!!
Mein Code:
Im Treiber, den du normalerweise Lädst, ist schon ein Teil zum Umrechnen der Zählungen der Hardware in cm. Das heißt, dass du nur noch die cm abfragen musst.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
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
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 'Mit CLR_DISTANCE setzt du die Strecke auf 0cm zurück.
#NO_TASK
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE 'Liest die Variable mit der Strecke von links aus
gosub R_Distance 'Liest die Variable mit der Strecke von rechts aus
if LBYTE=25 then gosub stop 'LBYTE ist der linke Wegstreckenzähler
'if RBYTE=25 then gosub stop 'RBYTE ist der rechte Wegstreckenzähler
'Mit den Zahlen hinter L- und RBYTE= gibst du die Strecke in cm an, die er zurück legen soll.
goto NO_TASK
'--------------------------------------------
#stop
gosub LED4ON:SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,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 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
'---------COM/NAV GERÄTEREIBER -------------
Ich habe im Programm mal alles zur Wegstreckenmessung erklärt, in der Hoffnung, dass du es dann verstehst.
Wenn du trotzdem noch fragen hast:
Frag ruhig!!
jon
hi, Jon
danke für das Prog. ich hab jetzt noch 2 Fragen:
1.Muss ich den Treiber "p5driv.s19"immer laden, dass das Prog. funktioniert?
2.Was hast du noch alles an das Beispieprogramm"6_EINFÜHRUNG_WEGSTRECKENZÄHLER.bas "(ich denk mal, dass du davon ausgegangen bist) drangehängt?
Ich probier's jetzt mal aus.
Gruß dj
Hallo,Jon
Dein Prog. läuft einwandfrei. =D>
Eine Frage hätte ich aber noch:
Wie kann ich Robby sagen, dass er nur einen Meter weit fahren soll, aber nur wenn der Schallsensor auf max. ist?
Ich hab das jetzt schon ein paar mal ausprobiert aber irgendwie ist Robby immer endlos weitergefahren.
Gruß dj
Du musst den Treiber nicht immer laden. Das Programm wird auch so funktionieren, es sei denn, du erweiterst die Basis mit der Erweiterung. Dann müsstest du den andere Treiber laden (Nicht den, einen anderen).Zitat:
Zitat von dj
1. ich habe bei #stop ein beep reingesetzt:Zitat:
Zitat von dj
#stop gosub LED4ON:SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,0:end
2. Ich habe die weiteren drei Entfernungsstufen aus dem Programm von Conrad rausgenommen.
3. Ich habe alles für dir rechte Seite reingehängt. Wird allerdings in diesem Programm nicht genutzt (auskommentiert).
Wenn ich das jetzt richtig sehe habe ich nicht mehr verändert.
jon
Und was ist damit?
Zitat:
Zitat von dj
Der Code mit Schallsensor:
Ich habe es jetzt so gemacht, dass er losfährt, wenn der Schallsensor auf fast maximum ist.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
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
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
if MIC > 230 then gosub move_fwd 'Fragt das Microfon ab. Wenn der Wert über 230 liegt dann geht er zu move_fwd. Und von dort zur Wegstreckenabfrage.
#NO_TASK
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE 'Liest die Variable mit der Strecke von links aus
'gosub R_Distance 'Liest die Variable mit der Strecke von rechts aus
if LBYTE=100 then gosub stop 'LBYTE ist der linke Wegstreckenzähler
'if RBYTE=25 then gosub stop 'RBYTE ist der rechte Wegstreckenzähler
'Mit den Zahlen hinter L- und RBYTE= gibst du die Strecke in cm an, die er zurück legen soll.
goto NO_TASK
'--------------------------------------------
#stop
gosub LED4ON:SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,0:end
#move_fwd
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:gosub NO_TASK
'---------------------------------------------
'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
(Da ich nicht mehr genau weiß, was der höchst mögliche Wert ist und meine Akkus leer sind konnte ich es jetzt nicht ausprobieren. Eventuell musst du mit dem Wert hinter "if MIC > " spielen.)
Wenn aber die Lautstärke beim Fahren sinkt, was sehr unwarscheinlich ist, da der Robby sehr laut ist, fährt er trotzdem weiter, bis er einen Meter hinter sich hat.
jon
Kann es sein, dass du irgendwas vergessen hast beim abfragen des Micros?
Ich hab den Wer hinter MIC > 230 bis auf 0 runtergesetzt aber Robby hat nix gemacht.
Gruß dj
Ich habe deine Fragen erst heute morgen gelesen und musste dann noch den Code schreiben :-) (im Code schreiben bin ich nicht so schnell) ](*,)Zitat:
Zitat von dj
jon
Ich hab mir das jetzt nochmal angeschaut im Schallbeispielprog. war noch: "define LBYTE","define HBYTE", "define SUBCMD"
dann war da noch was mit GP und SAMPLE und HSAMPLE
schau dir das mal noch mal an.
Gruß dj
hi,Jon
muss mich oben verbessernLBYTE,HBYTE und SUBCMD sind doch auch in deinem Prog. drin.
Aber irgendwie funktioniert das mit dem Micro nicht.
Ich hab selbst nochmal ein Prog. geschreiben das das selbe ergebnis wie deins ergibt .Aber es auch nicht funktioniert.Ich hab geschrieben:if MIC > 10 then gosub move_fwd
Es hat aber geklappt wenn ich statt > < geschrieben hab.
Ich hab auch noch n'Prog mit nur if MIC>1 then gosub LED1ON ausprobiert.Das hat funktioniert aber das komische war, dass es auch noch bei if MIC>1000000 geklappt hat.
Gruß dj
Ich glaube, dass ich mein Programm doch mal mit normalen Batterien ausprobieren muss. Das kann aber etwas dauern, da es gleich bei uns Mittagessen gibt.
jon
uiii.....ein sehr kurzer Code um die Wegstrecke zu messen.
Funktioniert aber.
Eigentlich ist unser Problem nämlich auch den Wegstreckenzähler mit dem Schallsensor zu verbinden. :-k
Gruß dj
Ich habe nochmal meinen Code bearbeitet und ausprobiert.
Beim Ausprobieren habe ich dann auch festgestellt, dass meine Sensoren zur Wegstreckenmessung kaputt sind.
Aber nach dem, was ich mir über LCD anzeigen lassen konnte sollte es so gehen:
Mir ist auch noch aufgefallen, dass es nicht RBYTE heißt, sondern HBYTE!!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]
define SAMPLE byte[9]
define HSAMPLE byte[10]
'--- 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
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
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
#LOOP
for GP=1 to 100
SAMPLE=MIC
if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
next
if HSAMPLE < 10 then gosub LED4ON else gosub LED4OFF
if HSAMPLE >= 10 then gosub Strecke
HSAMPLE=0:goto loop
'----------------------------------------------------------------
#Strecke
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE
if LBYTE= 25 then gosub stop
goto Strecke
'--------------------------------------------
#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,0:end
#move_fwd
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:gosub Strecke
'---------------------------------------------
'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
Meine ich zumindest :-#
Probiere es bitte mal aus!!
jon
hallo, Jon
ich glaube auch, dass es HBYTE heißt.
ich hab dein Prog. ausprobiert aber s'hat nicht funktioniert.ich überprüf nachher mal noch mein Micro ob da alles in ordnung ist.
Nur so, dass du dir schon mal gedanken machen kannst:
Es hat gepiept, dann is die grüne LED am kleinen Prozessor angegangen und hat geblinkt, dann is LED4 angegangen.
Gefahren is er nicht.
Gruß dj
Richtig.Zitat:
Zitat von dj
Auch richtig.Zitat:
Zitat von dj
Ebenfalls richtig.Zitat:
Zitat von dj
Spiele mal wieder mit dem Wert hinter "HSAMPLE"
Wenn der Geräuschepegel ausreicht, geht die LED4 aus und er startet die Motoren.
Geht die LED4 nicht aus, dann fragt er den Geräuschepegel wieder ab.
Probiere einfach nochmal etwas aus.
Ich kann mir kaum denken, dass dieser Code jetzt nicht geht.
jon
Sorry, aber es funktioniert immernochnicht.
Hat alles geklappt wie es soll nur is er nich losgefahren.
Ich hab was gesagt LED is ausgegangen aber er ist nicht losgefahren.
Hast du das Prog. schon bei dir ausprobiert?
Gruß dj
Ich habe das Programm bei mir schon ausprobiert, mit dem kleinen Problem, dass er bei mir durch die defekten Sensoren immer weiter geradeaus fährt.
Ich werde es mir aber nochmal genau anschauen.
Probiere mal den Treiber neu zu laden. Vielleicht hilft es.
jon
Ich hatte in der ZeileCode:'--------------------------
'------ 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]
define SAMPLE byte[9]
define HSAMPLE byte[10]
'--- 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
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
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
#LOOP
for GP=1 to 100
SAMPLE=MIC
if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
next
if HSAMPLE < 10 then gosub LED4ON else gosub LED4OFF
if HSAMPLE >= 10 then gosub move_fwd
HSAMPLE=0:goto loop
'----------------------------------------------------------------
#Strecke
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE
if LBYTE= 25 then gosub stop
goto Strecke
'--------------------------------------------
#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,0:end
#move_fwd
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:gosub Strecke
'---------------------------------------------
'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
"if HSAMPLE >= 10 then gosub move_fwd"
erst "then gosub Strecke" stehen. Was dazu führt, dass er die Motoren nicht startet. ](*,) ](*,)
Jetzt sollte es aber funktionieren!!!!!
jon
Klar, dass das nicht funktioniert hat, denn es kommt zum Variablenüberlauf und er fängt wieder von vorne an zu zählen.Zitat:
Ich hab auch noch n'Prog mit nur if MIC>1 then gosub LED1ON ausprobiert.Das hat funktioniert aber das komische war, dass es auch noch bei if MIC>1000000 geklappt hat.
Funktioniert mein Programm jetzt so?????????
Ich habe meinen Bot gerade bei Conrad abgegebe, kann also keine weiteren Tests durchführen :-(
jon
Ich kann es auch erst am Mittwoch testen.
Aber vielleicht kann es ja jemand anderes ausprobieren?
Aber kann es sein, dass er so nicht anhält?
Müsste man nicht noch if LBYTE=25 then gosub stop einfügen?
Gruß dj
Es steht doch da:
"if LBYTE =25 then gosub stop"
Wo ist da dein Problem?
Oder hast du das einfach nur übersehen? (Passiert mir auch manchmal)
jon
Hi Jon,
hab übersehen, dass bei move_fwd am ende gosub Strecke steht.
Ja ich glaub so musstes eigentlich funktionieren.
Ich probiers gleich mal am Mittwoch aus.
Gruß dj
Gehts oder Gehts nicht??????????
jon
sorry hab noch so viel mit schule um die ohren gehabt und bin dann nichtmehr dazu gekommen.
aber am wochen ende kann ich es ganz sicher ausprobieren aber bis dahin müsste dein robby eigenlich wieder da sein.
so wie der code aussieht(wenn ich nichrs übersehen hab)muss es eigentlich funktionieren.
Gruß dj
Ich habe ja jetzt schon meinen zweiten Robby abgegeben (beim ersten war das ACS defekt), da hat es ganze 4 Wochen gedauert, bis ich einen Gutschein bekommen habe. Conrad meinte beim zweiten dann, dass es wieder um die 4 Wochen dauern wird.
Mal schauen.
jon
Hi Jon,
dein prog. funktioniert.
ich hab nur noch ein Problem:
ich hab dein prog. erweitert undzwar um:
eine endlos schleife für das ganze prog.(dass man es mehrmals hintereinander ausführen kann)
und um ACS(dachte das wäre ganz nützlich)
mein problem ist allerdings, wenn ich robby zum 2. mal fahren lasse stopt er nicht mehr!
hier ist mal der code vielleicht kannst du mir ja sagen, was an meinem prog. nicht stimmt:
vielndank schon mal.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]
define SAMPLE byte[9]
define HSAMPLE byte[10]
'--- 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)
#Start
'---------- INIT---------------
gosub SUBSYS_PWR_ON
beep 368,10,0:pause 50
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
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
#LOOP
for GP=1 to 100
SAMPLE=MIC
if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
next
if HSAMPLE < 10 then gosub LED4ON else gosub LED4OFF
if HSAMPLE >= 10 then gosub move_fwd
HSAMPLE=0:goto loop
'----------------------------------------------------------------
#Strecke
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE
if LBYTE= 25 then gosub stop
'--------- LEDs ansteuern --------------------
if ACSL_F=on then gosub LED4ON else gosub LED4OFF
if ACSR_F=on then gosub LED1ON else gosub LED1OFF
'--------- AUSWEICHMANÖVER EINLEITEN ---------
if (ACSL_F and ACSR_F)=on then goto rotate
if ACSL_F=on then goto move_right
if ACSR_F=on then goto move_left
SYS FWDR:SYS FWDL:SPEED_L=255:SPEED_R=255
goto Strecke
'--------------------------------------------
'-------- AUSWEICHEN NACH RECHTS -------------
#move_right
SPEED_R=100:SPEED_L=255:goto Strecke
'-------- AUSWEICHEN NACH LINKS -------------
#move_left
SPEED_L=100:SPEED_R=255:goto Strecke
'---------- ROTIEREN --------------------
#rotate
SPEED_L=150:SPEED_R=150:SYS ROTR:goto Strecke
#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,0:goto Start
#move_fwd
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:gosub Strecke
'---------------------------------------------
'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
Gruß dj
So wirklich weiß ich auch nicht, was da falsch sein könnte.
Ich würde nur mal sagen, dass du die Zeile
"SYS FWDR:SYS FWDL:SPEED_L=255:SPEED_R=255"
bei #Strecke rauslassen köntest. Es sei denn, du willst ihm sagen, dass er bei keinem Gegenstand schneller fahren soll.
jon
Hi,
muss oben an meinem Code noch was veränder so wie er oben steht fährt robby beim 2. mal einfach so wieder los.
hier der code mit Verbesserung, der allerdings noch nicht richtig funktioniert:
bitte schaut ihn euch an!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]
define SAMPLE byte[9]
define HSAMPLE byte[10]
'--- 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)
#Start
'---------- INIT---------------
gosub SUBSYS_PWR_ON
beep 368,10,0:pause 50
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
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
#LOOP
for GP=1 to 100
SAMPLE=MIC
if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
next
if HSAMPLE < 10 then gosub LED4ON else gosub LED4OFF
if HSAMPLE >= 10 then gosub move_fwd
HSAMPLE=0:goto loop
'----------------------------------------------------------------
#Strecke
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE
if LBYTE= 25 then gosub stop
'--------- LEDs ansteuern --------------------
if ACSL_F=on then gosub LED4ON else gosub LED4OFF
if ACSR_F=on then gosub LED1ON else gosub LED1OFF
'--------- AUSWEICHMANÖVER EINLEITEN ---------
if (ACSL_F and ACSR_F)=on then goto rotate
if ACSL_F=on then goto move_right
if ACSR_F=on then goto move_left
goto Strecke
'--------------------------------------------
'-------- AUSWEICHEN NACH RECHTS -------------
#move_right
SPEED_R=100:SPEED_L=255:goto Strecke
'-------- AUSWEICHEN NACH LINKS -------------
#move_left
SPEED_L=100:SPEED_R=255:goto Strecke
'---------- ROTIEREN --------------------
#rotate
SPEED_L=150:SPEED_R=150:SYS ROTR:goto Strecke
#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:beep 368,10,0:LBYTE=0:HSAMPLE=0:goto Start
#move_fwd
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:gosub Strecke
'---------------------------------------------
'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
ich weiß einfach nicht, was da falsch ist.
Gruß dj
Um ehrlich zu sein:
Ich weiß nicht, was da falsch ist :-(
Wirklich keinen Plan :-( :-(
jon
Hi,
hab fest gestellt, dass der zweite durchlauf fehlerhaft ist.
beim ersten mal funktionierts aber wenn er dann wieder bei #Start anfängt hält er nicht mehr an.
ich werd mal weiter nachlesen und gucken ob ich den Fehler find.
Gruß dj
Hi,
Hab den Fehler immernoch nicht entdeckt!
Bitte helft mir doch!
Ich weiß einfach nicht was da schief läuft!
Vielleicht entdeck ja einer ihn.
Gruß dj