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
Anweisung "break" funktioniert nur mit direkter Abfrage der Konstante
10.11.2014, 15:46
Beitrag #1
Anweisung "break" funktioniert nur mit direkter Abfrage der Konstante
Hallo Smile

Ich habe folgendes Problem: Ich besitze eine kleine Taschenbeleuchtung an meiner Umhängetasche, Spielzeug, aber wenn man's halt kann... Wink

Code:
// Projekt Taschenbeleuchtung

// Eingänge: Switch A/B an Pin 8; Switch 1/2 an Pin 9
// Ausgänge: Duocolor-LED an Pin 10 (ws) und Pin 11 (bl); Kontroll-LED an Pin 13 (gn)
// ACHTUNG: Status der Ausgänge 10 und 11 negiert, da Positive Ground!
// INFO: Status Switch A/B:HIGH = A;LOW = B
// INFO: Status Switch 1/2:HIGH = 1;LOW = 2



int swAB=LOW;          // Boot State von Switch A/B
int sw12=LOW;          // Boot State von Switch 1/2
int i;                 // Countervariable PWM
const int switch_ab=8;    // Switch A/B
const int switch_12=9;    // Switch 1/2
const int ledW=10;     // LED ws
const int ledB=11;     // LED bl
const int ledG=13;     // LED gn

void setup() {
pinMode(switch_ab,INPUT);
pinMode(switch_12,INPUT);
pinMode(ledW,OUTPUT);
pinMode(ledB,OUTPUT);
pinMode(ledG,OUTPUT);



  digitalWrite(ledW,HIGH);                                     // Abschaltung Duocolor-LED bis zum Programmstart
  digitalWrite(ledB,HIGH);


  
  digitalWrite(ledG,LOW);                                      // Bestätigung nach Bootvorgang
  delay(100);
  digitalWrite(ledG,HIGH);
  delay(100);
  digitalWrite(ledG,LOW);
  delay(100);
  digitalWrite(ledG,HIGH);
  delay(100);
  digitalWrite(ledG,LOW);
  delay(100);
  digitalWrite(ledG,HIGH);
  delay(100);
  digitalWrite(ledG,LOW);
  delay(1000);  
  }



void loop(){
  
swAB = digitalRead(switch_ab);                                 // Schalterposition auslesen
sw12 = digitalRead(switch_12);



if (swAB==HIGH && sw12==HIGH) {                             // Programmablauf "PrgA1"

  for (i=0; i<255; i++) {
    analogWrite(ledW, i);
    analogWrite(ledB, -i);
    delay(2);
  }
  
  for (i=255; i>0; i--) {
    analogWrite(ledW, i);
    analogWrite(ledB, -i);
    delay(2);
  }

}



if (swAB==HIGH && sw12==LOW) {                              // Programmablauf "PrgA2"
  
  for (i=0; i<255; i++) {
    analogWrite(ledW, i);
    analogWrite(ledB, -i);
    delay(5);
  }

  for (i=255; i>0; i--) {
    analogWrite(ledW, i);
    analogWrite(ledB, -i);
    delay(5);
  }

}



if (swAB==LOW && sw12==HIGH) {                              // Programmablauf "PrgB1"
  
  for (i=0; i<255; i++) {
    analogWrite(ledW, i);
    delay(3);
  }
  
  digitalWrite(ledW,HIGH);                                    
  digitalWrite(ledB,HIGH);
  delay(500);
  
  while(digitalRead(switch_ab)==LOW && digitalRead(switch_12)==HIGH) {
    
    if (digitalRead(switch_ab)==HIGH){
      break;
    }
    
    if (digitalRead(switch_12)==LOW) {
      break;
    }
    
    digitalWrite(ledW,LOW);
    delay(100);
    digitalWrite(ledW,HIGH);
    delay(100);
    digitalWrite(ledB,LOW);
    delay(100);
    digitalWrite(ledB,HIGH);
    delay(100);
    digitalWrite(ledB,LOW);
    delay(100);
    digitalWrite(ledB,HIGH);
    delay(750);
  
  }
  
  for (i=255; i>0; i--) {
    analogWrite(ledW, i);
    delay(3);
  }
  
}



if (swAB==LOW && sw12==LOW) {                               // Programmablauf "PrgB2"
  
  for (i=0; i<255; i++) {
    analogWrite(ledW, i);
    analogWrite(ledB, -i);
    delay(3);
  }
  
  
  delay(2500);
  
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(100);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(100);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(100);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(1000);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(100);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(100);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(100);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(2500);
  
  for (i=255; i>0; i--) {
    analogWrite(ledW, i);
    analogWrite(ledB, -i);
    delay(3);
  }
  
  delay(2500);
  
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(100);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(100);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(100);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(1000);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(100);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(100);
  digitalWrite(ledW,HIGH);
  digitalWrite(ledB,LOW);
  delay(100);
  digitalWrite(ledW,LOW);
  digitalWrite(ledB,HIGH);
  delay(2500);

}



}



// INFO:
// - VCC: Akku 7x1.2V seriell
// - Power Switch: NC = /, NO = Akku +, C = Vin
// - Switch A/B: NC = GND, NO = +5V, C = Pin 8
// - Switch 1/2: NC = GND, NO = +5V, C = Pin 9
// - Klinkenbuchse: Tip = Pin 10, Ring = Pin 11, Schaft = +5V über 330R
// - Kontroll-LED: * = Pin 13 über 330R, + = GND

Wie ihr sehen könnte, frage ich bei if immer swAB und sw12 ab. Das funktioniert auch wunderbar, die werden ja am Anfang des Loops per digitalRead ausgelesen von switch_ab und switch_12.

Ein Ein Problem bekomme ich erst bei Programmablauf B2 (ab Zeile 96). Dort habe ich eine while-Schleife (ab Zeile 107), die solange laufen soll bis die Bedingungen nicht mehr erfüllt sind und sie über einen der beiden if-Befehle per "break" aufgelöst wird.
Frage ich beim if allerdings swAB oder sw12 ab, dann reagiert das Arduino nicht. Es hängt einfach in dieser while-Schleife fest. Erst wenn ich noch einmal digitalRead auf switch_ab und switch_12 mache, dann klappt die ganze Geschichte.

Mir wird gerade nicht klar warum das so ist, wo genau das Problem beim Abfragen liegt, warum es nur mit de Konstanten geht.
Habe ich da einen Denkfehler?

MfG
analogMensch
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.12.2014, 11:44
Beitrag #2
RE: Anweisung "break" funktioniert nur mit direkter Abfrage der Konstante
Die Variablen werden ja innerhalb der While-Schleife nicht verändert. Ist die Anfangsbedingung erfüllt, wird die Schleife ewig laufen, denn der Wert ändert sich ja nicht. Wenn Du in der Schleife die Werte neu abfragst (per digitalRead()), dann kannst Du auch mit den Variablen arbeiten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.12.2014, 11:53
Beitrag #3
RE: Anweisung "break" funktioniert nur mit direkter Abfrage der Konstante
...manchmal frage ich mich, ob solche Fragen ernst gemeint sind.
SCNR,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Upload funktioniert nicht Levi 5 248 22.09.2016 20:19
Letzter Beitrag: hotsystems
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 226 16.09.2016 20:36
Letzter Beitrag: Datatom
  include abhängig von konstante "debug" tiny85fan 8 395 29.04.2016 16:01
Letzter Beitrag: hotsystems
  Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern nuernie66 9 647 04.03.2016 19:25
Letzter Beitrag: hotsystems
  IRemote probleme mit abfrage schnutzkurt 18 1.153 20.02.2016 01:30
Letzter Beitrag: SkobyMobil
  BARCODE Abfrage über Ethernet Shield Wampo 3 795 05.12.2015 12:11
Letzter Beitrag: Wampo
  Leds blinken lassen mit if-Abfrage und millis ferdi 11 1.525 24.10.2015 08:54
Letzter Beitrag: Bitklopfer
  Suche sketch mit der Abfrage von 2 oder mehr PIR's Tozupi 1 467 05.10.2015 20:55
Letzter Beitrag: hotsystems
  USBhost mit keyboard gefunden, funktioniert aber nicht wie's soll HaWe 0 546 05.08.2015 14:26
Letzter Beitrag: HaWe
Information Code um temperatu einzustellen funktioniert nicht talo213 5 666 17.04.2015 09:57
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


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