Archiv verlassen und diese Seite im Standarddesign anzeigen : aus unterprogramm zurück zur hauptschleife
freaky360
15.01.2006, 23:15
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
Nabend Arndt
Mit (Code) Dein Programm(/code) gehts. (Die Runden durch Ekige Klammern ersetzen.
Oder bequemer mit den Schaltflächen über dem Eingabenfenster.
freaky360
16.01.2006, 17:32
hier ist mal mein programm ich hoff man verstehts einigermasen wenn was nicht verstanden wird fragt bitte!! (habs so gut wie möglich komentiert)
$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
Ja ich hab mal nur überflogen und festgestellt das du Sub und Sprünge durcheinander nutzt.
Entweder (Nur angerissen)
Declare Sub soundso
Do
If irgendwas then Call Sub Soundos
Loop
Sub soundso
Dein Code
End Sub
oder
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).
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.