- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 7 von 7

Thema: Ständiges lauschen bei While-Schleife?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.05.2005
    Beiträge
    26

    Ständiges lauschen bei While-Schleife?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.07.2005
    Ort
    Fröndenberg
    Beiträge
    105
    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.
    C ya, Grusim

    Anfänger in der Elektronik

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.05.2005
    Beiträge
    26
    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

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    weil das eben nicht eindeutig ist, gibt es eine Reihe von bedingungs-"end" Statements.
    Code:
    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.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.05.2005
    Beiträge
    26
    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

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.07.2005
    Ort
    Fröndenberg
    Beiträge
    105
    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
    C ya, Grusim

    Anfänger in der Elektronik

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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)
    Code:
    while bedingung
       for var = 1 to 10 
       next var
    wend
    aber sie dürfen sich nicht überlappen
    Code:
    while bedingung
       for var = 1 to 10 
    wend
       next var
    https://www.roboternetz.de/wiki/pmwi...in.Compilerlop
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

LiFePO4 Speicher Test