PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fernsteuerung + Wegstreckenzähler Problem



rippingbull
25.04.2008, 10:39
Hi,

ich bin seit einigen Wochen dabei mit dem Robby zu experimentieren.
Nun haben wir in unserem CT Kurs diverse Aufgaben gestellt bekommen.

Meine Aufgabe ist es, den Robby fernsteuerbar zu machen aber auch die Abschaltung der Fernsteuerung nach einer gewissen Strecke.

Nun zu meinem Problem:

Wie bekomme ich das hin? Beide Funktionen nutzen in den Beispielprogrammen HByte. Kann man die Funktionen vlt. umbauen, das sie eine anderes Byte benutzen weil sonst funktioniert das ganze nicht?

Oder gibt es eine ganz andere Möglichkeit dies umzusetzen??

Mir steht nur der Robby zu Verfügung und das mitgelieferte C-Basic Programm.

Danke schonmal im vorraus für eure Hilfe. O:)

Dirk
25.04.2008, 14:03
Hallo rippingbull,

Meine Aufgabe ist es, den Robby fernsteuerbar zu machen ...
Was heißt das? Mit Infrarot, Funk oder ...? Wirst du noch etwas anbauen (z.B. ein Funkmodul ...)? Und wenn ja, welches und wie?

... aber auch die Abschaltung der Fernsteuerung nach einer gewissen Strecke.
Das ist per Programm zu machen!

Beide Funktionen nutzen in den Beispielprogrammen HByte.
Welche beiden Funktionen? Was stört an Hbyte? Warum willst du da was anderes nehmen? Verstehst du den Sinn der Programme?

Gruß Dirk

rippingbull
25.04.2008, 15:02
Was heißt das? Mit Infrarot, Funk oder ...? Wirst du noch etwas anbauen (z.B. ein Funkmodul ...)? Und wenn ja, welches und wie?

Ich möchte das ganze per Infrarotferbedienung machen.
So wie es im Beispielprogramm auch gemacht wurde.



Das ist per Programm zu machen!

Hmm sry wenns n bissl blöd rüberkommt aber wie? Einen einfachen Wegstreckenzähler kann ich realisieren, es lässt sich ja auch einer in den Beispielprogrammen finden nur wie vereine ich diesen mit dem Fernsteuerprogramm???



Welche beiden Funktionen? Was stört an Hbyte? Warum willst du da was anderes nehmen? Verstehst du den Sinn der Programme?

Ich meinte beide Programme speichern ihre Ergebnisse in HByte zwischen und wenn der Wegstreckenzähler zählt und ich das mit der Fernbedienung bediene kommts do da zu Konflikten oder etwa nich?

Dirk
25.04.2008, 20:20
Einen einfachen Wegstreckenzähler kann ich realisieren, ... nur wie vereine ich diesen mit dem Fernsteuerprogramm???
Das ist wohl die Aufgabe, die du dir vorgenommen hast. Mach dich an die Arbeit!
Wenn du Hilfe brauchst: Entwurf hier posten und sagen, was geht und was nicht.

... beide Programme speichern ihre Ergebnisse in HByte zwischen ...
Hbyte ist nur eine Variable (ein Byte im Speicher). Du hast als Nutzer = "User" weitere Variablen zur Verfügung (User Memory), und zwar ab byte[6]. Da kannst du Zwischenergebnisse ablegen und später damit weiter rechnen.
Ich denke, du müßtest dich erst noch ein bißchen mit den Grundlagen von CCBASIC beschäftigen.

Gruß Dirk

rippingbull
25.04.2008, 21:11
Hbyte ist nur eine Variable (ein Byte im Speicher). Du hast als Nutzer = "User" weitere Variablen zur Verfügung (User Memory), und zwar ab byte[6]. Da kannst du Zwischenergebnisse ablegen und später damit weiter rechnen.
Ich denke, du müßtest dich erst noch ein bißchen mit den Grundlagen von CCBASIC beschäftigen.


Danke das hat mir etwas geholfen ^^

eddy3006
29.04.2008, 07:31
Ich kenne das Problem, komme aber auch nicht auf die Lösung...

Könnte jemand näher darauf eingehen oder ein an einem Beispiel zeigen wie es gehen könnte???

rippingbull
06.05.2008, 08:11
Also ich bin immer noch an dem Programm doch ich schaffe es einfach nicht das ganze zum laufen zu bekommen.

Da beide einzelne Programme ihre Daten im Hbyte ablegen.
Wie kann ich das nun umgehen ?? Oder wie kann ich es schaffen das er per IR-Fernbedienung fernsteuerbar ist und ich trotzdem die wegstrecke auslesen kann. Weil bis jetzt wird immer HByte überschrieben.

Könnte mir bitte jemand helfen?? Ich verzweifel noch an der aufgabe.

Dirk
06.05.2008, 12:24
... du wirst deinen Entwurf und was damit noch nicht funktioniert wohl posten müssen, wenn jemand helfen soll.

Gruß Dirk

topgunfb
06.05.2008, 15:36
Hi,

@ Dirk: Du hast Recht, ohne post ist fast nix möglich. ;-')

@ rippingbull:
In den einzelnen Programmen wird sicher auf die Variable HByte verwiesen. Änder das doch einfach in eine Var deiner Wahl, aber eben erst ab Byte[6] wie es Dirk bereits gesagt hat.
Nimm z.B. einen Namen, der simpel ist.

MfG
topgunfb

rippingbull
06.05.2008, 15:58
@dirk: sry :oops: kommt morgen

@topgunfb: hast du die beispiele zu hand ?? wenn ja wie mache ich das z.B. beim Wegstrecken zähler? Sry das kein Quellcode kommt aber des is alles in der schule 8-[

Dirk
06.05.2008, 16:12
@rippingbull:
Noch 'mal etwas allgemeiner zum Thema "Hbyte":
In CCBASIC gibt es keine Funktionen, denen man Parameter übergeben könnte und die dann als Ergebnis einen Wert zurückgeben, so wie:
Ergebnis = FunktionTuWas(mitParameter);

Daher wurden die Unterprogramme des CCRP5 so geschrieben, dass 2 Bytes für die Übergabe von Parametern an Unterprogramme oder als Ergebnis verwendet werden: Hbyte und Lbyte. Die Adressen dieser beiden Bytes sind auch den Maschinensprache-Unterprogrammen (z.B. COMNAV) bekannt. Mit den 2 Bytes sind 16-Bit-Werte als Ergebnis oder Parameter möglich.

Das alles ist überhaupt kein Problem für die eigene Programmierung!

Wenn ein Unterprogramm des CCRP5 sein Ergebnis in Hbyte/Lbyte ausgibt, dann kann man es einfach in eigene Variablen speichern:
MeinHbyte = Hbyte
MeinLbyte = Lbyte

Vorher muss man die eigenen Variablen natürlich definieren:
define MeinLbyte byte[7]
define MeinHbyte byte[8]

Mit diesen Variablen rechnet man dann weiter und hat damit Hbyte/Lbyte für andere Zwecke oder für den nächsten Aufruf eines anderen Unterprogramms frei.

Gruß Dirk

rippingbull
06.05.2008, 19:41
Danke Dirk hat mir wieder viel geholfen. Nur eins verstehe ich noch nicht. Wie weise ich diese Variable dem Unterprogramm zu??

:) Ihr habt mir auf jedenfall schon sehr geholfen :D

Dirk
06.05.2008, 21:19
Wie weise ich diese Variable dem Unterprogramm zu??
Wie gesagt: Jetzt bräuchte ich dein Programm, um zu sehen, was du da so machst ...

Gruß Dirk

rippingbull
07.05.2008, 09:37
'--------------------------------------------
'--- WEGSTRECKENZÄHLER ---
'--------------------------------------------
gosub CLR_DISTANCE:gosub LEDSOFF:gosub move_fwd
#NO_TASK
pause 5:SYS COMNAV_STATUS
gosub R_DISTANCE
if LBYTE=32 then goto kreis
if LBYTE=115 then goto stop
goto NO_TASK
'--------------------------------------------
#stop
gosub LED4ON:SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:end
#kreis
SYS FWDR:SYS FWDL:SPEED_L=255:SPEED_R=45:return
#move_fwd
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155:return
'---------------------------------------------



#loop
if ANZEIGEMODE=0 then goto COMMAND_REQUEST_2
'---------- KOMMANDO ABFRAGE 1 -----------------
#COMMAND_REQUEST_1
pause 2:SYS COMNAV_STATUS
if IR_F =off then goto loop
gosub GET_IRDATA:goto EX_COMMAND
'---------- KOMMANDO ABFRAGE 2 -----------------
#COMMAND_REQUEST_2
pause 5:gosub LEDSOFF:SYS COMNAV_STATUS
if IR_F =off then goto loop
gosub LED1ON:gosub GET_IRDATA
'---------- KOMMANDO INTERPRETER --------------
#EX_COMMAND
if HBYTE=&HFF then goto loop
if LBYTE=13 then goto stop
if LBYTE=32 then goto forward
if LBYTE=33 then goto back
if LBYTE=17 then goto rotleft
if LBYTE=16 then goto rotright
goto loop
#anzeige
if ANZEIGEMODE=0 then ANZEIGEMODE=1 else ANZEIGEMODE=0
pause 5:gosub GET_IRDATA:goto loop
'----------------------------------------------
#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:SPEED=0:MODE=0:goto loop
#rotleft
MODE=3:SYS ROTL:SPEED_L=SPEED:SPEED_R=SPEED:goto loop
#rotright
MODE=3:SYS ROTR:SPEED_L=SPEED:SPEED_R=SPEED:goto loop
'-----------------------------------------------
#forward
if MODE=3 then goto FWD
if MODE=2 then goto REV_SLOWER
if SPEED=250 then SPEED=240
SPEED=SPEED+10:goto FWD
#FWD_SLOWER
SPEED=SPEED-10
if SPEED=20 then goto REV
#FWD
MODE=1:SYS FWDL:SYS FWDR:SPEED_L=SPEED:SPEED_R=SPEED:goto loop

#back
if MODE=3 then goto REV
if MODE=1 then goto FWD_SLOWER
if SPEED=250 then SPEED=240
SPEED=SPEED+10:goto REV
#REV_SLOWER
SPEED=SPEED-10
if SPEED=20 then goto FWD
#REV
MODE=2:SYS REVL:SYS REVR:SPEED_L=SPEED:SPEED_R=SPEED:goto loop

Das sind die 2 teilprogramme die ich verbinden möchte.

Muss das ganze dann so aussehen???
Kann es leider grad nicht nachprüfen da ich den Robby nicht zur Hand habe.


gosub CLR_DISTANCE
#loop
pause 5:SYS COMNAV_STATUS
gosub L_DISTANCE
WEG=LBYTE
if WEG>33 then goto circle
if ANZEIGEMODE=0 then goto COMMAND_REQUEST_2
'---------- KOMMANDO ABFRAGE 1 -----------------
#COMMAND_REQUEST_1
pause 2:SYS COMNAV_STATUS
if IR_F =off then goto loop
gosub GET_IRDATA:goto EX_COMMAND
'---------- KOMMANDO ABFRAGE 2 -----------------
#COMMAND_REQUEST_2
pause 5:gosub LEDSOFF:SYS COMNAV_STATUS
if IR_F =off then goto loop
gosub LED2ON:gosub LED3ON:gosub GET_IRDATA
'---------- KOMMANDO INTERPRETER --------------
#EX_COMMAND
if HBYTE=&HFF then goto loop
if LBYTE=33 then goto stop
if LBYTE=32 then goto forward
if LBYTE=17 then goto rotleft
if LBYTE=16 then goto rotright
goto loop

'----------------------------------------------
#forward
MODE=1:SYS FWDL:SYS FWDR:SPEED_L=100:SPEED_R=100:goto loop

#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:SPEED=0:MODE=0:goto loop

#rotleft
gosub LED4ON:pause 10:gosub LED4OFF:pause 10:beep 250,10,0
MODE=3:SYS ROTL:SPEED_L=70:SPEED_R=70:goto loop

#rotright
gosub LED1ON:pause 10:gosub LED1OFF:pause 10:beep 250,10,0
MODE=3:SYS ROTR:SPEED_L=70:SPEED_R=70:goto loop

#circle
SYS FWDL:SYS FWDR:SPEED_L=200:SPEED_R=29:pause 660
SYS FWDL:SYS FWDR:SPEED_L=0:SPEED_R=0:gosub LEDSOFF:end

Dirk
07.05.2008, 10:03
Hallo rippingbull,

das sind nur unvollständig kopierte und sinnlos aneinander gereihte Ausschnitte aus den CCRP5-Demos "6_EINFÜHRUNG_WEGSTRECKENZÄHLER.bas" und "9_EINFÜHRUNG_REMOTE_CONTROL2.bas".

Du hast da keinerlei eigene Leistung (außer Copy/Paste) eingebracht! [-(

Von meiner Seite gäbe es da nur Unterstützung, wenn du ...

1. Noch einmal GENAU angibst, was das Programm können soll. Bisher weiß ich: Der CCRP5 soll ferngesteuert werden und nach einer bestimmten Strecke soll er nicht mehr ferngesteuert sein. Was soll danach passieren? Soll er einfach stoppen? Soll er autonom weiter fahren? ...

2. Ein eigenes Programm vorstellst, dass schon 'mal wenigstens einen Teil der Aufgaben löst und nicht identisch ist mit einer existenten Demo. Für den Rest gibt es dann Hilfe hier im Forum.

Gruß Dirk