INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
While Schleife
01.08.2020, 14:22
Beitrag #1
While Schleife
Hallo Alle Zusammen,
ich baue gerade an einer vollautomatischen Modellbahn mit dem Arduino gesteuert. Es sind drei Blöcke und zwei Züge und nach eine bestimmten Zeit soll er die Personenzüge gegen die Güterzüge austauschen und dafür muss ich einen Zug von einem Block zum nächsten ziehen und dafür wollte ich die While-Schleife verwenden:
Code:
digitalWrite(sE, HIGH);        //Block 1 anschalten
      while (switchStatermB == LOW)   //Solange der Rückmelder von Block 2 nicht meldet
      {
        digitalWrite(sB, HIGH);         // Block 2 anschalten
      }
      Serial.println("Rückmeldung B");
      digitalWrite(sB, LOW);            //Block 2 ausschalten
im Prinzip sollte es ja funktionieren, weil in der Referenz steht, dass er den Code in den Geschweiften Klammern solange wiederholt bis das in den normalen Klammern nicht mehr wahr ist.
Ich habe es mal mit einer If-Funktion probiert und da hat alles geklappt, das heißt es liegt definitiv an der Programmierung und nicht an der Hardware.
Kann mir da irgendjemand helfen?
Gruß Simon

Manche nennen es Chaos - Ich nenne es kreatives Arbeiten!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:27
Beitrag #2
RE: While Schleife
(01.08.2020 14:22)FoxFactoy schrieb:  while (switchStatermB == LOW) //Solange der Rückmelder von Block 2 nicht meldet
{
digitalWrite(sB, HIGH); // Block 2 anschalten
}
[/code]
Das ist eine Endlosschleife, weil sich der Wert von switchStatermB nicht ändern kann, da er in der Schleife nicht ausgelesen/berechnet/sonstwas wird.

Wofür brauchst Du while? Du hast doch loop und if.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:30 (Dieser Beitrag wurde zuletzt bearbeitet: 01.08.2020 14:32 von MicroBahner.)
Beitrag #3
RE: While Schleife
Grundsätzlich ist eine while-Schleife in einer Steuerung eine schlechte Idee. Du hast eine Schleife - den loop(). Mehr brauchst Du nicht.
Wenn es mit einer If-Anweisung funktioniert - wozu dann ein while? Und das Problem hat dir Tommy ja schon aufgezeigt.
Ansonsten kann man mit so einem Schnipsel auch nicht viel anfangen, da sieht man nicht, was abläuft. Etwas mehr Info solltest Du uns schon geben.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:32
Beitrag #4
RE: While Schleife
(01.08.2020 14:27)Tommy56 schrieb:  
(01.08.2020 14:22)FoxFactoy schrieb:  while (switchStatermB == LOW) //Solange der Rückmelder von Block 2 nicht meldet
{
digitalWrite(sB, HIGH); // Block 2 anschalten
}
[/code]
Das ist eine Endlosschleife, weil sich der Wert von switchStatermB nicht ändern kann, da er in der Schleife nicht ausgelesen/berechnet/sonstwas wird.

Wofür brauchst Du while? Du hast doch loop und if.

Gruß Tommy

Dass heißt ich muss in der Whileschleife den Wert von switchStatermB auslesen, damit er dann auch auf HIGH gesetzt werden kann und er die Schleife verlässt so?
Code:
digitalWrite(sE, HIGH);
      while (switchStatermB == LOW)
      {
        digitalWrite(sB, HIGH);
        digitalRead(rmB);
      }
      Serial.println("Rückmeldung B");
      digitalWrite(sB, LOW);
Ich nehme keine If-Funktion, weil wenn die nicht wahr ist springt er ja weiter, er soll aber warten, bis es wahr wird.
Gruß Simon

Manche nennen es Chaos - Ich nenne es kreatives Arbeiten!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:39
Beitrag #5
RE: While Schleife
Du musst den mit digitalRead gelesenen Wert dann schon auch der Variablen zuweisen. So landet der im Nirwana.
Und wenn mal mehr als ein Zug gleichzeitig fahren soll, oder Du auch noch auf eine Bedienung reagieren willst, kommst Du mit der Methode schnell in die Bredouille.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:44 (Dieser Beitrag wurde zuletzt bearbeitet: 01.08.2020 14:45 von Tommy56.)
Beitrag #6
RE: While Schleife
(01.08.2020 14:32)FoxFactoy schrieb:  Ich nehme keine If-Funktion, weil wenn die nicht wahr ist springt er ja weiter, er soll aber warten, bis es wahr wird.
Dann solltest Du dich mal kundig machen, wie man Bedingungen so formuliert, dass das gewünschte Ergebnis eintritt.
So blockierst Du Dir Deinen ganzen Ablauf und das geht nicht lange gut.

Gruß Tommy

PS: if-Funktionen gibt es nicht. Das sind if-Abfragen.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:46
Beitrag #7
RE: While Schleife
(01.08.2020 14:39)MicroBahner schrieb:  Du musst den mit digitalRead gelesenen Wert dann schon auch der Variablen zuweisen. So landet der im Nirwana.
Und wenn mal mehr als ein Zug gleichzeitig fahren soll, oder Du auch noch auf eine Bedienung reagieren willst, kommst Du mit der Methode schnell in die Bredouille.

Oh, ja mach ich natürlich, habe ich nur vergessen mit rein zuschicken.
Ja, klar. Die Methode soll eingesetzt werde, wenn die Züge an einem bestimmten Ort stehen und ein Zug noch ein Block weiter von fahren muss, sonst arbeite ich schon mit If-Funktionen und das klappt auch sehr gut.
Vielen Dank!
Gruß Simon

Manche nennen es Chaos - Ich nenne es kreatives Arbeiten!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.08.2020, 14:49
Beitrag #8
RE: While Schleife
(01.08.2020 14:44)Tommy56 schrieb:  
(01.08.2020 14:32)FoxFactoy schrieb:  Ich nehme keine If-Funktion, weil wenn die nicht wahr ist springt er ja weiter, er soll aber warten, bis es wahr wird.
Dann solltest Du dich mal kundig machen, wie man Bedingungen so formuliert, dass das gewünschte Ergebnis eintritt.
So blockierst Du Dir Deinen ganzen Ablauf und das geht nicht lange gut.

Gruß Tommy

PS: if-Funktionen gibt es nicht. Das sind if-Abfragen.

Im Prinzip will ich in der Situation genau das (das alles andere Blockiert wird), weil nur dieser Zug einen Block weiter nach vorne fahren muss und dann geht es weiter.
Das mit den If-Abfragen werde ich mit merken

Manche nennen es Chaos - Ich nenne es kreatives Arbeiten!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  millis Schleife bleibt hängen Cubicany 10 686 28.06.2020 18:39
Letzter Beitrag: Tommy56
  for-schleife, delay, millis, interrupt Harry 8 836 31.03.2020 21:02
Letzter Beitrag: Harry
  int variable wird nicht in Schleife übertragen ha0248 8 958 11.02.2020 15:25
Letzter Beitrag: ha0248
  Schleife nur 1x durchlaufen ohne for... Hanibal_Smith 3 919 01.10.2019 19:44
Letzter Beitrag: Tommy56
  For-Schleife ohne Begrenzung? Batucada 4 1.063 26.04.2019 09:54
Letzter Beitrag: Batucada
  Berücksichtigung des A0-Einganges in if-Schleife Joergi-1911 3 786 17.02.2019 16:33
Letzter Beitrag: Tommy56
  Schleife (Durchlauf) abbrechen wann ich es will EXCLUZIVE 11 1.793 22.01.2019 15:52
Letzter Beitrag: Vapalus
Wink for Schleife im Void setup() Rockman 12 2.183 20.01.2019 15:17
Letzter Beitrag: Arduinero
  Schleife in der Schleife nanoheld 2 807 06.01.2019 17:08
Letzter Beitrag: Fips
  Verständnisfrage schleife Rasa 12 1.689 06.01.2019 17:00
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste