- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 4 von 4

Thema: aus unterprogramm zurück zur hauptschleife

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    14.06.2004
    Ort
    Bretzfeld
    Alter
    38
    Beiträge
    42

    aus unterprogramm zurück zur hauptschleife

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo zusammen!!
    ich bin in sachen Bascom programmierung noch nicht so der crack darum hätte ich da gern mal n problem...

    ich hab n fahrbaren bot gebaut der an jeder seiner 4 ecken einen sensor hat damit er nirgends anstößt ich hab jetzt mal n teilprogramm geschrieben mitdem er wenn der linke vordere sensor betätigt ist n stück zurückfährt und dann ne 90° drehung macht und dann wieder mit der normalen vorwärtsfahr schleife weiterfahren soll. das zurückfahren und drehen ist ein unterprogramm aber wenn das hauptprogramm fortgesetzt werden soll gehts nicht weiter der bot macht auch keine 90° drehung sondern dreht sich lustig im kreis. kann mit beitte jemand helfen?? ich würd mein progrämmchen ja mal hierreinstellen zum besseren verständnis aber ich weis net wie -> bitte erklärung!!

    mfg Arndt

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Nabend Arndt

    Mit (Code) Dein Programm(/code) gehts. (Die Runden durch Ekige Klammern ersetzen.

    Oder bequemer mit den Schaltflächen über dem Eingabenfenster.
    Gruß
    Ratber

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    14.06.2004
    Ort
    Bretzfeld
    Alter
    38
    Beiträge
    42
    hier ist mal mein programm ich hoff man verstehts einigermasen wenn was nicht verstanden wird fragt bitte!! (habs so gut wie möglich komentiert)

    Code:
    $regfile = "m16def.dat"
    $crystal = 1000000
    
    'Konfiguration der Ausgangspins
    Config Pind.2 = Output                     'Richtung Motor rechts
    Config Pind.3 = Output                     'Richtung Motor links
    Config Pind.4 = Output                     'Takt Motor rechts
    Config Pind.5 = Output                     'Takt Motor links
    
    'Konfiguration der Einganspins
    Config Pinb.0 = Input                       'Sensor vorne links
    Config Pinb.1 = Input                       'Sensor vorne rechts
    Config Pinb.2 = Input                       'Sensor hinten links
    Config Pinb.3 = Input                       'Sensor hinten rechts
    
    
    'Deklaration Ausgänge
    Motre Alias Portd.2                           'Variable für Richtung Motor rechts
    Motli Alias Portd.3                            'Variable für Richtung Motor links
    Taktre Alias Portd.4                         'Variable für Takt des Rechten Motors
    Taktli Alias Portd.5                          'Variable für Takt des linken Motors
    
    'Deklaration Eingänge
    'Vornli Alias Pinb.0                          'Variable für Sensor vorne links
    'Vornre Alias Pinb.1                        'Variable für Sensor vorne rechts
    'Hintli Alias Pinb.2                           'Variable für Sensor hinten links
    'Hintre Alias Pinb.3                         'Variable für Sensor hinten rechts
    
    
    Declare Sub Vornli
    Declare Sub Vornre
    Declare Sub Hintli
    Declare Sub Hintre
    
    
    
    
    Wait 2
    
    'Bewegung nach vorne
    
    Motre = 0                                        'motor rechts vorwärts
    Motli = 0                                          'motor links vorwärts
    Do
    
     Taktre = 1
     Taktli = 1
    
     Waitus 1000
    Taktre = 0
     Taktli = 0
    
     Waitus 1000
    
    
    'Aufruf Unterprogramm für Sensor vorne links
    If Pinb.0 = 0 Then Gosub Vornli 
    
    'Aufruf Unterprogramm für Sensor vorne rechts
     'If Pinb.1 = 0 Then Gosub Vornre                           
    
    'Aufruf Unterprogramm für Sensor hinten links
     'If Pinb.2 = 0 Then Gosub Hintli                         
    
    'Aufruf Unterprogramm für Sensor hinten rechts
     'If Pinb.3 = 0 Then Gosub Hintre                         
    
    
    
    Loop
    
    
    'Unterprogramm für Sensor vorne links
    
    Sub Vornli
    
    
    'rückwärts fahren
      
     Dim A As Integer
    
         A = 0
      Motre = 1                                       'Motor rechts rückwärts
      Motli = 1                                         'Motor links rückwärts
      Do
    
       Taktre = 1
       Taktli = 1
    
       Waitus 1000
       Taktre = 0
       Taktli = 0
    
       Waitus 1000
       A = A + 1
    
    'Aufruf Unterprogramm für Sensor vorne rechts
         'If Pinb.1 = 0 Then Gosub Vornre                        
         
    Aufruf Unterprogramm für Sensor hinten links
          'If Pinb.2 = 0 Then Gosub Hintli                       
         
     'Aufruf Unterprogramm für Sensor hinten rechts
         'If Pinb.3 = 0 Then Gosub Hintre                       
     
    
     Loop Until A > 500                             'Dauer der Rückwärtsbewegung
    
    
      'Rechtsdrehung 90°
    
      Dim B As Integer
    
          B = 0
      Motre = 1                                                 'drehung nach rechts
      Motli = 0
    
      Do
    
       Taktre = 1
       Taktli = 1
    
       Waitus 1000
       Taktre = 0
       Taktli = 0
    
       Waitus 1000
    
       B = B + 1
    
    'Aufruf Unterprogramm für Sensor vorne rechts
         'If Pinb.1 = 0 Then Gosub Vornre                        
       
    'Aufruf Unterprogramm für Sensor hinten links
         'If Pinb.2 = 0 Then Gosub Hintli                     
       
    'Aufruf Unterprogramm für Sensor hinten rechts
        'If Pinb.3 = 0 Then Gosub Hintre                       
    
      Loop Until B > 500                                    'winkel (dauer) der drehung
    
    End Sub
    
    'hier läuft das programm nicht weiter d.h. der bot dreht sich immer lustig im kreis!!
    'eigentlich war es von mir geplant dass er wieder in die hauptschleife springt und wieder geradeausfährt

    vielen dank wenn ihr mir helft!!!

    mfg Arndt

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja ich hab mal nur überflogen und festgestellt das du Sub und Sprünge durcheinander nutzt.

    Entweder (Nur angerissen)

    Code:
    Declare Sub soundso
    Do
    If irgendwas then  Call Sub Soundos
    Loop
    
    Sub soundso
    Dein Code
    End Sub

    oder



    Code:
    Do
    If irgendwas then Gosub blabla
    Loop
    
    
    :blabla
    Dein Code
    Return.

    Alles andere endet in Confusion.


    Sub ist sehr gut wenn man lokale Variablen nutzt (Achtung.Stack muß ausreichen.Entsprechend einstellen).
    Gruß
    Ratber

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad