Loading...
Pages: [1]   Go Down
Author Topic: If Anweisung wird nicht durchgeführt  (Read 161 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich habe ein Problem... habe eine Wordclock gebaut, sie funktioniert auch einwandfrei, bisher habe ich immer die Helligkeit mit meiner Fernbedienung gesteuert, doch nun wollte ich die Helligkeitssteuerung über eine Photodiode machen, da ich nun noch eine Weckfunktion einbauen wollte, möchte ich meine Fernbedienung gern zum einstellen des Timers verwenden...

Hier ist mal mein Quellcode....


Code:
if (irrecv.decode(&results))
  {
 
    Serial.println(wecker); // true = 1 false = 0
    Serial.println(timer);
   
    switch (results.value)
    {
      case 2011254930:
      if (timer < 60)
      {timer = timer + 5;}
      digitalWrite(LEDpin, HIGH);
      delay(80);
      digitalWrite(LEDpin,LOW);
      break;
      case 2011246738:
      if (timer > 0)
      {timer = timer - 5;}
      digitalWrite(LEDpin, HIGH);
      delay(80);
      digitalWrite(LEDpin,LOW);
      break;
      case 2011249298:
      if (wecker == false)
      {
       weckzeitM = now.minute() + timer;
       weckzeitS = now.hour();
       wecker = true;
       if (weckzeitM >= 60)
       {
         weckzeitS = now.hour() + 1;
         weckzeitM = weckzeitM - 60;
       }
       for (int i = 0; i < timer; i= i+5)
         {
           digitalWrite(LEDpin, HIGH);
           delay(500);
           digitalWrite(LEDpin,LOW);
           delay(500);
         }
      }
      else
      {
       wecker = false;
       digitalWrite(LEDpin, HIGH);
       delay(80);
       digitalWrite(LEDpin,LOW);
      }
       break;
     
     
      if (wecker == true) // funktioniert nicht?!
      {digitalWrite(LEDpin, HIGH);}
      else
      {digitalWrite(LEDpin, LOW);}
     
     
       while (((now.minute() >= weckzeitM)&&(now.hour() >= weckzeitS)) && (wecker == true))
       {
       
         for (int i = 0; i < 80; i++)
            {
            if (results.value == 2011249298) {wecker = false; break;}
              for (int i = 0; i < 20; i++)
                {
                if (results.value == 2011249298) {wecker = false; break;}
                   tone(sound,300,10);
                   delay(2);
                   tone(sound,100,15);
                   delay(3);
                   tone(sound,600,10);
                   delay(50);
                 }
              delay(1000);
            }
        for(int i = 0; i < 1000; i++)
          {
          if (results.value == 2011249298) {wecker = false; break;}
            tone(sound, 200);
            delay(500);
            tone (sound, 300);
             delay (500);
          }
       }
   }
   
    // receive the next value
    irrecv.resume();
  }
}

 Das Problem ist die Anzeige(ob der Wecker an ist) funktioniert nicht, "Wecker" wird richtig ausgegeben, das habe ich über den Seriellen Monitor überprüft, auch "Timer" funktioniert korrekt... Hoffe jemand kann mir helfen, bin schon echt am verzweifeln.

Den gesamten Quelltext hänge ich als Textdatei an.Er ist zu lang, um ihn zu posten..

Viele Grüße
Till


« Last Edit: March 20, 2013, 04:57:31 pm by uwefed » Logged

Germany S-H
Offline Offline
God Member
*****
Karma: 28
Posts: 780
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hier ist mal mein Quellcode....
Code:
      break;
      
      
      if (wecker == true) // funktioniert nicht?!

Was dieses "break;" in der vorhergehenden Zeile bewirkt ist Dir aber klar, oder?
Logged

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

joa, ich war der Meinung, dass dadurch das Programm aus der Casebedingung rausspringt....
und dann müsste es dannach weitermachen, aaaber ich lasse mich natürlich gern eines besseren belehren, hab im programmieren erst wenig Erfahrung.


Logged

Germany
Offline Offline
Edison Member
*
Karma: 27
Posts: 1497
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
ich war der Meinung, dass dadurch das Programm aus der Casebedingung rausspringt....
und dann müsste es dannach weitermachen

Genau richtig, es macht nach der schliessenden Klammer, die zu 
Code:
    switch (results.value)
    {
gehört, weiter.

Code:
break;
if (wecker == true) // wird nie erreicht.

Die geschweiften Klammern müssen nicht nur in der Anzahl stimmen, sondern auch an den richtigen Stellen stehen.  Der c-Compiler lässt dir gnadenlos Unsinn durchgehen smiley-wink

Logged

Pages: [1]   Go Up
Print
 
Jump to: