Pages: [1]   Go Down
Author Topic: While-Schleife Beenden funktioniert nicht  (Read 804 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

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

Nur leider will die "Technik" oft nicht so wie ich es gerne hätte smiley-grin
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:
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:
while(mode == '2'){
  digitalWrite(ledpin, HIGH);
  delay(delay_flash);
  digitalWrite(ledpin, LOW);
  delay(delay_flash);
  if(mode != '2') break;
Und
Code:
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 smiley

mfg
Logged

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank smiley

Mit
Code:
while(mode == '2'){
  digitalWrite(ledpin, HIGH);
  delay(delay_flash);
  digitalWrite(ledpin, LOW);
  delay(delay_flash);
  if(Serial.available()){
    mode = Serial.read();
funktioniert es jetzt smiley


War mir bis jetzt unbekannt, dass sich die Variablenänderung nicht auf die laufende Schleife auswirkt smiley-wink

mfg
Logged

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

War mir bis jetzt unbekannt, dass sich die Variablenänderung nicht auf die laufende Schleife auswirkt smiley-wink

Welche Veränderung denn?

Code:
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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany
Offline Offline
Jr. Member
**
Karma: 1
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-grin
Logged

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-grin

MIcrocontroller sind wie Computer: Die machen nicht das was sie sollen, sondern was man ihnen sagt....  smiley-wink
Logged

Pages: [1]   Go Up
Jump to: