If Anweisung wird nicht durchgeführt

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....

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

worclock sketch.rtfd.zip (2.81 KB)

till_s90:
Hier ist mal mein Quellcode....

       break;

if (wecker == true) // funktioniert nicht?!

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

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.

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

    switch (results.value)
    {

gehört, weiter.

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 :wink: