- Akku Tests und Balkonkraftwerk Speicher         
Seite 7 von 9 ErsteErste ... 56789 LetzteLetzte
Ergebnis 61 bis 70 von 81

Thema: Wegstreckenzähler: Entfernug einstellen?

  1. #61
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Unterprogs und Schleifen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo dj,

    ... wie ist das mit den Schleifen?
    Darf ich merere ineinander schreiben?
    Ja, es gibt verschachtelte Schleifen, z.B.:

    #Start
    ...
    #Schleife
    ...
    If A = B Then Goto Schleife
    ...
    Goto Start

    Da ist eine äußere Schleife ohne Bedingung und eine kleine innere Schleife, die solange wiederholt wird, bis A <> B ist. Wenn die Bedingung A <> B nie eintritt, hängt sich das Prog da auf.

    Unterprogramme kann man auch verschachteln:

    #Unterprog1
    ...
    Return


    #Unterprog2
    ...
    Gosub Unterprog1
    ...
    Return

    Da ruft das 2. Unterprog das 1. auf.

    Beim Proggen sollte man nur immer nachvollziehen können, wohin das Prog bei welcher Bedingung springt. Ein großer Nachteil vom "Herumspringen" im Prog ist, dass man da schnell den Überblick verliert.
    Wenn ihr hier einen intelligenten RP5 bauen wollt, braucht ihr erst 'mal gute Unterprogramme.
    Z.B.:
    Unterprogramm "RP5 Stoppen" ->
    Setzt SPEED_R und SPEED_L gleich Null, dann Return.
    Geht aber auch komplexer: Wenn der Bot nicht sofort stoppen soll, sondern langsam abbremsen, würde das Unterprog einen "Eingabeparameter" brauchen. Der könnte z.B. 0 sein, wenn der Bot sofort stoppen soll und > 0 für das langsame Abbremsen. So ein Unterprog ist also einfach: Es braucht keinen oder höchstens einen Parameter.
    2. Beispiel:
    Unterprog "RP5 Geradeausfahrt":
    Hier wird's schon schwieriger. Ein Eingabeparameter wäre nötig, der die Wegstrecke angibt, die geradeaus zu fahren ist. Das könnte ein Word sein und der Wegstreckenzähler würde das dann machen.
    Aber: Das Unterprog müßte ja wohl auch das ACS benutzen, denn der RP5 darf ja auf seinem Weg nicht irgendwo anstoßen.
    Dann könnte man für dieses Prog noch einen "Ausgabeparameter" nehmen. Denn das Hauptprogramm wüßte ja vielleicht gern, ob unterwegs ein Hindernis war und ob die ganze Wegstrecke geschafft wurde.

    So viel als Beispiel: Interessiert?

    Weitere Unterprogs wären z.B.: Linkskurve, Rechtsrotation mit X Grad usw.

    Am Ende der Kette werden diese Unterprogs durch Verschachtelung immer komplexer: Geh-in-eine-Ecke, Suche-Ausgang, Suche-Licht usw.

    Ein Hauptprogramm wird dadurch immer kürzer:
    #Start
    Gosub Suche-Raummitte
    Gosub Geh-in-eine-Ecke
    Gosub Warte-auf-Dunkelheit
    Gosub Suche-Ausgang
    ...
    (Danach fiel er eine Treppe herunter!).


    Also Vorschlag:
    Baut doch erst 'mal einige Unterprogs, durch die der RP5 immer mehr kann! Ich beteilige mich, wenn ihr Interesse habt!

    Gruß Dirk

  2. #62
    Neuer Benutzer Öfters hier
    Registriert seit
    15.10.2006
    Beiträge
    17
    Hi Dirk,

    da ich nur Subs machen kann und keine Functions erstellen kann - wie übergebe ich dann Parameter?

    Oder haben Subs gar keinen Local Scope?

    Wie definiere ich Rückgabewerte?



    MFG

    Flexo

  3. #63
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Funktionen für CCBASIC

    Hallo Flexo,

    ... da ich nur Subs machen kann und keine Functions erstellen kann - wie übergebe ich dann Parameter? ... Wie definiere ich Rückgabewerte?
    Ja, leider kennt CCBASIC keine Funktionen.

    Ich behelfe mich so:

    Ich definiere 2 Bytes:
    define INBYTE byte[x]
    define OUTBYTE byte[x+1]

    Diese Bytes dienen als Eingabe- und Ausgabeparameter. Man kann bei Bedarf auch Words nehmen oder auch einen 2. Eingabeparameter INBYTE2 o.ä. Auf jeden Fall geschieht die "Kommunikation" zwischen Hauptprogramm und Unterprogrammen NUR über diese Vars. Probleme gibt's beim Verschachteln von Subs,- hier muss man evtl. einen eigenen "Satz" von Ein-/Ausgabevars nehmen.

    Die Unterprogramme dürfen diese Vars frei verwenden und ändern (wäre dann so etwas wie die Byval-Definition). Zusätzlich gibt es universelle Variablen, die im Hauptprogramm und in Unterprogrammen frei verwendet werden dürfen: Temp1 .. Tempn und einfache "Zählvariablen" i .. n. Bei ihnen kann man sich nicht darauf verlassen, dass sie am Anfang oder Ende eines Programmteils oder Subs einen bestimmten Wert haben.

    Alle anderen Vars erfüllen spezielle Aufgaben.


    Naja: Ist nicht so wie ein "großes" BASIC, aber man legt sich zumindest für eigene Projekte fest!

    Gruß Dirk

  4. #64
    Neuer Benutzer Öfters hier
    Registriert seit
    15.10.2006
    Beiträge
    17
    Hi Dirk,

    okay. Also alles über globale Variablen (eigentlich gibt ja keine in dem Sinn)

    Das byte[x] ist ein Array?
    Warum dann aber das OUTBYTE byte[x+1], also + 1?

  5. #65
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Inbyte

    Das byte[x] ist ein Array?
    Warum dann aber das OUTBYTE byte[x+1], also + 1?
    Nein, sorry, so war das nicht gemeint. Das sind ganz normale Variablen.
    Also z.B. so:
    define INBYTE byte[7]
    define OUTBYTE byte[8]


    Gruß Dirk

  6. #66
    Benutzer Stammmitglied
    Registriert seit
    21.08.2006
    Beiträge
    74
    Also ich hab mir das mal überlegt.
    wir brauchen für das Programm etwa 6 Unterprogs:
    1. fahren, dass über INBYTE eine strecke angegeben bekommt und soweit geradeaus fährt.(mit ACS)
    2. micro, dass den Schallpegel über OUTBYTE zurück gibt
    3. stop, dass robby stoppt.
    4. rotate, falls ein hindernis auftaucht, dass er dann rotiert
    5. move_right(wie 4.)
    6. move_left(wie 4.)

    mit diesen Unterprogs. sollte es möglich sein ein übersichtliches und kurzes Prog zu schreiben.
    Ich mach mich dann an die Arbeit.Wenn ich die Unterprogs fertig habe poste ich sie natürlich.

    Gruß dj

  7. #67
    Benutzer Stammmitglied
    Registriert seit
    21.08.2006
    Beiträge
    74
    Hier sind die Unterprogs die ich oben angesprochen hatte:
    Ich muss aber betonen, dass die Unterprogs alleine nicht funktionsfähig und wenn man sie mit Robby ausführt, kann es zu Beschädigungen an ihm kommen. Ich übernehme keine Haftung!
    Code:
    #fahren    'benötigt INBYTE für die Strecke die zurückzulegen ist und ACS
    if LBYTE=INBYTE then gosub stop
    SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155
    if (ACSL_F and ACSR_F)=on then gosub rotate
    if ACSL_F=on then gosub move_right
    if ACSR_F=on then gosub move_left
    goto fahren
    
    #stop
    SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:return
    
    #move_right
    SPEED_R=100:SPEED_L=255:return
    
    #move_left
    SPEED_L=100:SPEED_R=255:return
    
    #rotate
    SPEED_L=150:SPEED_R=150:SYS ROTR:return
    Das sind also die Unterprogs mit denen es möglich sein sollte das Prog zu schreiben.
    Ich versuche es jetzt.Mal sehen was dabei herrauskommt.

    Gruß dj

    ich hab ein Unterprog vergessen gehabt, hier ist es:
    Code:
    #micro
    for GP=1 to 100
    SAMPLE=MIC
    if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
    next
    HSAMPLE=OUTBYTE:return

  8. #68
    Benutzer Stammmitglied
    Registriert seit
    21.08.2006
    Beiträge
    74
    So ich hab jetzt ein Prog, bei dem ich glaube, dass es funktioniert:
    Code:
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'IIIIIIIIII          ROBBY RP5 - Leerprogramm 1            IIIIIIIIIIII
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'PROGRAMM-RUMPF ZUM START EIGENER ENTWICKLUNGEN
    
    ' Programm-Name: LEERPROGRAMM_RP5.bas
    ' Hardware:      Robby RP5 OHNE Erweiterungsplatine
    ' Treiber:       P5DRIV.S19
    
    '----------------------------------------------------------------------
    '                       FUNKTION DES PROGRAMMS
    '----------------------------------------------------------------------
    '
    '
    
    '----------------------------------------------------------------------
    'ACHTUNG:
    ' Der erste Schritt in der Initialisierung Ihres Programms sollte immer die Zeile
    
    '                        REV_L=on:REV_R=on:sys PLM_SLOW
    
    ' enthalten. Diese Zeile initialisiert die Ports für die Richtungsumschaltung
    ' des Antriebs und die PLM Frequenz. Initialisieren Sie die Ports auch, wenn der
    ' Antrieb nicht benutzt werden soll!
    
    ' DER BETRIEB DER MOTOREN OHNE DIESE INITIALISIERUNG FÜHRT UNWEIGERLICH ZUR
    ' ZERSTÖRUNG DER ANTRIEBSELEKTRONIK !!
    '----------------------------------------------------------------------
    '------ Konstanten --------
    define V_OFFSET     0 '= CHRG_CURRENT - SYS_VOLTS (Abgleichwert)
    define V_ADJUST     2 'Eichwert Spannungen (Bauteile-abhängig!)
    'Hier weitere Konstanten-Definitionen!
    
    '--------------------------
    '------ 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]
    '---- FREIE PORTS ---------
    define FREIP7       port[7]
    define FREIP8       port[8]
    define FREIP9       port[9]
    define FREIP10      port[10]
    define FREIP11      port[11]
    define FREIP12      port[12]
    define FREIP13      port[13]
    define FREIP14      port[14]
    define FREIP15      port[15]
    define FREIP16      port[16]
    '--------------------------
    '------ SENSORS ---------
    '--------------------------
    define FREIAD8      ad[8] 'Freier A/D-Wandler
    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 DEVICEADDRESS byte[6]
    'User Memory ab BYTE[7] frei!
    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)
    define INBYTE byte[7]
    define OUTBYTE1 byte[8]
    define OUTBYTE2 byte[9]
    '---------- INIT---------------
    ' Freie Ports initialisieren:
    FREIP7=off:FREIP8=off:FREIP9=off:FREIP10=off
    FREIP11=off:FREIP12=off:FREIP13=off:FREIP14=off
    FREIP15=off:FREIP16=off
    
    ' Subsysteme einschalten:
    gosub SUBSYS_PWR_ON
    
    beep 368,10,0:pause 50
    gosub LEDSOFF 'Alle LEDs auf Robby aus
    
    ' ACS initialisieren:
    '---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
    'gosub NO_ACS_INT:beep 368,10,0:sys ACS_HI 'oder: ACS_LO, ACS_MAX
    ' ODER ...
    '---- SYSTEM OPERATION MODE (ACS INTERRUPT 200 ms) ----
    'interrupt ACS_INTERRUPT:gosub ACS_INT_200:beep 368,10,0:sys ACS_HI
    
    ' IR-COMM initialisieren:
    '--------- IR-DATENFORMAT -----------------
    'gosub RC5 'oder: REC80
    ' ODER ...
    '---- IRCOMM OPERATION MODE (INTERRUPT ON) ----
    'interrupt IRCOMM_INTERRUPT:gosub RC5_INT 'oder: REC80_INT
    '---------- SET ADDRESSED MODE -----------------
    'DEVICEADDRESS=1 'oder: 2..15
    'gosub SET_ADDRESS
    gosub NO_ACS_INT:beep 368,10,0:SYS ACS_MAX
    
    '------------ ANTRIEB -------------------------
    REV_L=on:REV_R=on:sys PLM_SLOW
    '----------------------------------------------------------------------
    ' Hier ggf. weitere Initialisierungs-Befehle!!!
    
    '----------------------------------------------------------------------
    ' PROGRAMM:
    ' Hier mit dem Programm beginnen!!!
    #Start
    gosub CLR_distance:gosub LEDSOFF
    #loop
    gosub micro
    if OUTBYTE1< 10 then goto loop
    if OUTBYTE1> 10 then INBYTE=25:gosub fahren
    goto loop
    '----------------------------------------------------------------------
    ' UNTERPROGRAMME:
    
    #fahren    'benötigt INBYTE für die Strecke die zurückzulegen ist und ACS
    if LBYTE=INBYTE then gosub stop
    SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155
    if (ACSL_F and ACSR_F)=on then gosub rotate
    if ACSL_F=on then gosub move_right
    if ACSR_F=on then gosub move_left
    goto fahren
    
    #stop
    SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:gosub Start
    
    #move_right
    SPEED_R=100:SPEED_L=255:return
    
    #move_left
    SPEED_L=100:SPEED_R=255:return
    
    #rotate
    SPEED_L=150:SPEED_R=150:SYS ROTR:return
    
    #micro
    for GP=1 to 100
    SAMPLE=MIC
    if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
    next
    HSAMPLE=OUTBYTE1:return
    
    
    '----------------------------------------------
    '--------- ACS INTERRUPT SERVICE --------------
    '----------------------------------------------
    '#ACS_INTERRUPT 'Beispiel für eine Interruptroutine!
    'sys COMNAV_STATUS
    'if ACSL_F=on then gosub LED4ON else gosub LED4OFF
    'if ACSR_F=on then gosub LED1ON else gosub LED1OFF
    'pause 5:gosub LED1OFF:gosub LED4OFF:return interrupt
    '---------------------------------------------
    ' ODER ... (ACHTUNG: Nur EINE Interrupt-Routine ist möglich!!!)
    '---------------------------------------------
    '-------- IR-COMM INTERRUPT SERVICE ----------
    '---------------------------------------------
    '#IRCOMM_INTERRUPT 'Beispiel für eine Interruptroutine!
    'sys COMNAV_STATUS
    'gosub GET_IRDATA
    'gosub LED1ON:pause 5:gosub LED1OFF:return interrupt
    '---------------------------------------------
    
    'IIIIIIII Binärausgabe mit den 4 LEDs IIIIIIII
    ' Der Robby kann OHNE zusätzliche Hardware keine Werte (z.B.
    ' seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit den
    ' 4 LEDs in Binärform (als 2 Nibble mit je 4 Bit) aus.
    ' Die Variable VALUE muss als BYTE definiert sein!
    '#LEDBINOUT 'Ausgabe 1. Nibble (low)
    'gosub LEDSOFF: gosub LED1FLASH: gosub LED1FLASH
    'gosub LED1FLASH: gosub LED1FLASH: gosub LED1FLASH
    'if (VALUE and &B1) <> 0 then gosub LED1ON
    'if (VALUE and &B10) <> 0 then gosub LED2ON
    'if (VALUE and &B100) <> 0 then gosub LED3ON
    'if (VALUE and &B1000) <> 0 then gosub LED4ON
    'pause 100 'Ausgabe 2. Nibble (high)
    'gosub LEDSOFF: gosub LED2FLASH: gosub LED2FLASH
    'gosub LED2FLASH: gosub LED2FLASH: gosub LED2FLASH
    'if (VALUE and &B10000) <> 0 then gosub LED1ON
    'if (VALUE and &B100000) <> 0 then gosub LED2ON
    'if (VALUE and &B1000000) <> 0 then gosub LED3ON
    'if (VALUE and &B10000000) <> 0 then gosub LED4ON
    'pause 100: return
    '#LED1FLASH
    'gosub LED1ON: pause 5: gosub LED1OFF: pause 5: return
    '#LED2FLASH
    'gosub LED2ON: pause 5: gosub LED2OFF: pause 5: return
    
    'Binär-Dezimal-Tabelle (4-Bit):
    ' WERT:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    ' LED1->  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
    ' LED2->  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1
    ' LED3->  0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1
    ' LED4->  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1
    '
    ' Der Dezimal-WERT kann in der 1. Zeile abgelesen werden, wenn man
    ' die zutreffende LED-Kombination aussucht (1 -> an, 0 -> aus).
    ' Der Wert des 2. Nibbles (high) kann genauso abgelesen werden,
    ' muss aber noch mit 16 multipliziert und zum 1. Nibble addiert
    ' werden, um den ganzen 8-Bit-Dezimalwert (0..255) zu erhalten.
    
    '----------------------------------------------------------------------
    
    '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
    #LEDSON
    EXTPORT=EXTPORT or &HF0
    #EXTPORT_WRITE
    LBYTE=EXTPORT:sys SYSTEM:return
    
    'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM  IIIII
    #GET_IRDATA
    SUBCMD=1:sys COMNAV:return
    #SEND_IRDATA
    SUBCMD=0:sys COMNAV:return
    #GET_TLM
    SUBCMD=1:sys COMNAV:LBYTE= LBYTE or (HBYTE shl 6)
    HBYTE= HBYTE shr 2: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
    #ADDRESSED_MODE_ON
    SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H10)
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    #ADDRESSED_MODE_OFF
    SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HEF)
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    #SET_ADDRESS
    SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H10)
    HBYTE=00:SUBCMD=2:sys COMNAV
    LBYTE=DEVICEADDRESS:SUBCMD=5:sys COMNAV:return
    #GET_ADDRESSED_DATA
    SUBCMD=1:sys COMNAV:HBYTE=HBYTE and &H7:return
    #SEND_ADDRESSED_DATA
    HBYTE=(HBYTE shl 3)or DEVICEADDRESS:SUBCMD=0:sys COMNAV:return
    #WAIT_PING
    SUBCMD=8: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 -------------
    'syscode "p5driv.s19"
    ich habe nur ein Problem:
    ich komm nicht an meinen Robby ran und kann deswegen mein Prog nicht testen.Kann es jemand für mich ausprobieren und mir dann mitteilen, wie es funtioniert hat(oder auch nicht)?
    Ich fände es sehr nett.

    Gruß dj

    edit:Man muss bei dem Prog am Anfang Klatschen. Dann sollte Robby etwa 1m weit fahren und dann stehen bleiben.Wenn man dann wieder klatscht sollte er wieder 1m weit fahren... Wenn ein Hindernis kommt solte er ausweichen.
    Gruß dj

  9. #69
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Prog

    Hallo dj,

    sieht doch gut aus! (Konnte es aber nicht testen!)

    Mit den Variablen must du etwas aufpassen!

    Wenn du deine Vars ...
    define INBYTE byte[7]
    define OUTBYTE1 byte[8]
    define OUTBYTE2 byte[9]
    ... als Bytes 7..9 definierst, gibt es weiter oben unter "USER MEMORY" bei den schon vorhandenen Variablen Überlappungen mit ...
    define MAXLIGHT byte[7]
    define GP1 byte[8]
    define SAMPLE byte[9]

    Wenn du das im Kopf hast, kann man das so machen, aber es bedeutet, dass z.B. OUTBYTE1 und GP1 DIESELBE Variable ist.

    Gruss Dirk

  10. #70
    Benutzer Stammmitglied
    Registriert seit
    21.08.2006
    Beiträge
    74
    Hi Dirk
    Danke für den Tipp!
    Aber kann ich auch Variablen mit z.b. dem Wert byte[100] benutzen oder ist das irgendwie begrenzt?

    Gruß dj

Seite 7 von 9 ErsteErste ... 56789 LetzteLetzte

Berechtigungen

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

12V Akku bauen