Go Down

Topic: While-Schleife Beenden funktioniert nicht (Read 923 times) previous topic - next topic

Hallo,

bin neu hier, habe meine Arduino UNO auch erst seit 3 Wochen, habe aber sofort großen Gefallen an ihm gefunden :)

Nur leider will die "Technik" oft nicht so wie ich es gerne hätte :D
Und bei meinem jetzigen Problem komme ich auch einfach auf keine Lösung.

Mein Arduino soll die Eingaben von meinem Handy auslesen über ein Bluetooth-Modul,
funktioniert soweit auch ohne Probleme.


Allerdings schaffe ich es einfach nicht die While-Schleife(n) zu beenden wenn sich die Variable "mode" ändert:

Code: [Select]

int ledpin = 3;
int delay_flash = 125;

void setup()
{
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);

}

void loop()
{
  int mode = Serial.read();
 
  if(mode == '0') digitalWrite(ledpin, LOW);
  if(mode == '1') digitalWrite(ledpin, HIGH);
 
  while(mode == '2'){
    digitalWrite(ledpin, HIGH);
    delay(delay_flash);
    digitalWrite(ledpin, LOW);
    delay(delay_flash);
  }
}


Habe schon folgendes Probiert:
Code: [Select]

while(mode == '2'){
  digitalWrite(ledpin, HIGH);
  delay(delay_flash);
  digitalWrite(ledpin, LOW);
  delay(delay_flash);
  if(mode != '2') break;

Und
Code: [Select]

if(mode == '2'){
  goto1:
  digitalWrite(ledpin, HIGH);
  delay(delay_flash);
  digitalWrite(ledpin, LOW);
  delay(delay_flash);
  if(mode == '2'){goto goto1;}


Und noch ein, zwei andere Sachen,
schaffe es aber nicht.

Ich hoffe von euch kann mir jemand helfen :)

mfg

vieledinge

Wenn mode == 2 ist wird die Schleife ausgeführt. Und zwar so lange bis sich mode ändert. Erst dann wird die Schleife verlassen. Wie soll die Schleife was von einer Änderung mitbekommen, wenn Du mode nur außerhalb der Schleife änderst?


Vielen Dank :)

Mit
Code: [Select]

while(mode == '2'){
  digitalWrite(ledpin, HIGH);
  delay(delay_flash);
  digitalWrite(ledpin, LOW);
  delay(delay_flash);
  if(Serial.available()){
    mode = Serial.read();

funktioniert es jetzt :)


War mir bis jetzt unbekannt, dass sich die Variablenänderung nicht auf die laufende Schleife auswirkt ;)

mfg

vieledinge


War mir bis jetzt unbekannt, dass sich die Variablenänderung nicht auf die laufende Schleife auswirkt ;)


Welche Veränderung denn?

Code: [Select]

void loop()
{
  int mode = Serial.read();
 
  if(mode == '0') digitalWrite(ledpin, LOW);
  if(mode == '1') digitalWrite(ledpin, HIGH);
 
  while(mode == '2'){
    digitalWrite(ledpin, HIGH);
    delay(delay_flash);
    digitalWrite(ledpin, LOW);
    delay(delay_flash);
  }
}


Dein loop() wird so lange durchlaufen, bis beim read() eine 2 gelesen wird. Damit ist die Bedingung für die While-Schleife gültig. Die wird jetzt so lange durchlaufen, wie die Bedingung gültig ist. Nur die While-Schleife, nix davor. Da damit mode nie ein neuer Wert zugewiesen werden kann, ist die Schleife endlos gültig.


Dein loop() wird so lange durchlaufen, bis beim read() eine 2 gelesen wird. Damit ist die Bedingung für die While-Schleife gültig. Die wird jetzt so lange durchlaufen, wie die Bedingung gültig ist. Nur die While-Schleife, nix davor. Da damit mode nie ein neuer Wert zugewiesen werden kann, ist die Schleife endlos gültig.


Dann hab ich wohl irgendwo etwas falsch aufgeschnappt.
Dachte nämlich mal gelesen zu haben, dass read() auch funkioniert, wenn eine Schleife bereits läuft :smiley-red:

Chaos_Lord

tut es doch aber read() liest gneu in dem augenblick wo du es aufrufst was aus, und das passierte ja auserhalb deiner schleife. Wenn du erstmal in der Schleife drin bist führtest du ja kein read mer aus. Arduino ist wie wir Menschen eben faul, wenns nix machen muß macht's nix, sprich wenn du ihm nicht sagst ließ es ständig aus dann macht es das genau einmal und dann eben nix mehr :D

vieledinge


Arduino ist wie wir Menschen eben faul, wenns nix machen muß macht's nix, sprich wenn du ihm nicht sagst ließ es ständig aus dann macht es das genau einmal und dann eben nix mehr :D


MIcrocontroller sind wie Computer: Die machen nicht das was sie sollen, sondern was man ihnen sagt....  ;)

Go Up