Archiv verlassen und diese Seite im Standarddesign anzeigen : Ständiges lauschen bei While-Schleife?
Ich schreibe gerade mein erstes Programm zur Steuerung in BASCOM.
Der Algorithmus sieht so aus (ist nur die Grundstruktur, noch nicht in BASCOM übersetzt.)
port X = Eingabe 1;2;3
Do
while port x = 1
funktion A
if port x = 2
funktion B
if port x = 3
funktion C
loop
funktion A
funktion B
funktion C
end
Meine Frage:
Lauscht der µC in dieser While-Schleife ununterbrochen auf das Signal aus Port x? Wenn nicht, würde das Programm ja jedesmal nur am Anfang Funktion A ausführen, damit dann aufhören und erneut port x überprüfen. Dann würde es "stocken" und nicht rund laufen.
Nach meinem Verständnis prüft er einmal am Anfang ob der Port x =1 ist, wenn er das nicht ist, wird die gesamt Schleife beendet.
Do...while bedeutet ja, Wiederhole solange, d.h. Solange die Bedingung erfüllt ist, mache die Schleife.
Wenn du eine Endlos-Schleife ohne Abbruch machen willst oder ein Schleife mit Abbruch mach doch (wenn es das bei BASCOM gibt, programmiere noch kein µC) Do...loop (ohne Bedingung) oder do....until port x=4 (Wiederhole bis der Wert an Port X = 4 ist. Port X=1 msst dann über If-Abfrage in der Schleife abfragen.
Du hast Recht, Grusim.
Übrigens soll funktion A ein ständiges geradeaus fahren des Roboters bedeuten. die anderen funktionen sind dann hindernis ausweichen und greifarm bewegen.
dann ginge es auch so:
port x = 1;2;3
for port x = 1
do
funktion A (Fahren)
loop
if poert x = 2
funktion B
if port x = 3
funktion C
funktion B
funktion C
end
klingt logisch meine ich.
Gruß,
Ansgar
weil das eben nicht eindeutig ist, gibt es eine Reihe von bedingungs-"end" Statements.
Do
' while..wend
while port x = 1 '
funktion A
wend
' if... end if
if port x = 2
funktion B
end if
' if... end if
if port x = 3
funktion C
end if
loop ' zurück nach "DO"
Um das zu verstehen, sind "Struktogramme" recht anschaulich
http://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm
Fahr dem Ablauf mit dem Bleistift nach. Du solltest erkennen, daß
while port x = 1 '
funktion A
wend
eigentlich sinnlos ist.
Du hast geschrieben: "weil das eben nicht eindeutig ist,..."
Meinst du damit meine erste Frage?
Danke für den tipp mit den Struktugrammen.
aber was ist mit meinem 2. Algorithmus (die Antwort auf Grusim).
Logisch oder nicht?
ansgar
Code von Ansgar:
port x = 1;2;3
for port x = 1
do
funktion A (Fahren)
loop
--> Das klappt nicht! Es wird abgefragt ob Portx=1 bei wahr geht es in eine Endlosschleife, die immer gemacht wird. Kein Abbruch der Schleife, fährt also geradeaus bis Akku leer.
if poert x = 2
funktion B
if port x = 3
funktion C
--> Das funktioniert nur fehlt ein Endif damit das Programm weiss, wie weit die Funktionen für die jeweilige Bedingung ist.
funktion B
funktion C
-->Und nachdem alles einmal abgefragt wurde, soll er noch ausweichen und rückwärts fahren?! Oder warum werden die Funktionen aufgerufen?
end
Bei der zweiten Konstuktion bist du syntaktisch leider ganz daneben. Da hilft dir aber dann auch die BasCom "Help"
Schleifenkonstruktionen können zwar verschachtelt sein (eine innerhalb einer anderen)
while bedingung
for var = 1 to 10
next var
wend
aber sie dürfen sich nicht überlappen
while bedingung
for var = 1 to 10
wend
next var
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Compilerlop
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.