Schleife beenden in case8

:confused:

Hab noch mal was anderes ausprobiert.

angelehnt an die Tips von Michael.

leider erfolglos!

const int Taster = 18;            // Pin Nummer des Tasters
const int Led_Rot = 2;            // Pin Nummer der Ledfarbe Rot
const int Led_Gruen = 3;          // Pin Nummer der Ledfarbe Grün
const int Led_Blau = 4;           // Pin Nummer der Ledfarbe Blau

int Zaehler = 1;                  // Zähler für den aktuellen Programstand
int helligkeit = 0;               // Helligkeit der LED
int Tasterstatus = LOW;           // aktuelles Signal vom Eingangspin
int Vorherigerstatus = LOW;       // vorheriges Signal vom Eingangspin

void setup() {
  pinMode(Led_Blau, OUTPUT);       // LED Pin wird als Ausgang gesetzt
  pinMode(Led_Rot, OUTPUT);        // LED Pin wird als Ausgang gesetzt
  pinMode(Led_Gruen, OUTPUT);      // LED Pin wird als Ausgang gesetzt
  pinMode(Taster, INPUT);          // Taster Pin wird als Eingang gesetzt
}

void loop()
{
  Tasterstatus = digitalRead (Taster);         // Tasterstatusabfrage

  //Flankenwechsel erkennen
  if (Vorherigerstatus != Tasterstatus)

    delay(5); // Einfaches Entprellen
  if (Tasterstatus == HIGH) Zaehler++;
  if (Zaehler > 9) Zaehler = 0;
  Vorherigerstatus = Tasterstatus;


  //abhängig vom Zähler passende funktion aufrufen

  if (Zaehler = 1) {
    digitalWrite(Led_Blau, HIGH);     // LED Blau an
    digitalWrite(Led_Rot, LOW);       // LED Rot aus
    digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
  }
  if (Zaehler = 2) {
    digitalWrite(Led_Blau, LOW);      // LED Blau aus
    digitalWrite(Led_Rot, HIGH);      // LED Rot an
    digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
  }
  if (Zaehler = 3) {
    digitalWrite(Led_Blau, LOW);      // LED Blau aus
    digitalWrite(Led_Rot, LOW);       // LED Rot aus
    digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
  }
  if (Zaehler = 4) {
    digitalWrite(Led_Blau, HIGH);     // LED Blau an
    digitalWrite(Led_Rot, HIGH);      // LED Rot an
    digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
  }
  if (Zaehler = 5) {
    digitalWrite(Led_Blau, HIGH);     // LED Blau an
    digitalWrite(Led_Rot, LOW);       // LED Rot aus
    digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
  }
  if (Zaehler = 6) {
    digitalWrite(Led_Blau, LOW);      // LED Blau aus
    digitalWrite(Led_Rot, HIGH);      // LED Rot an
    digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
  }
  if (Zaehler = 7) {
    digitalWrite(Led_Blau, HIGH);     // LED Blau an
    digitalWrite(Led_Rot, HIGH);      // LED Rot an
    digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
  }
  if (Zaehler = 8) {
    digitalWrite(Led_Gruen, LOW);      // LED Blau aus
    digitalWrite(Led_Blau, LOW);       // LED Rot aus
    if (helligkeit < 255)
    { helligkeit++;
      analogWrite(Led_Rot, helligkeit);
      delay(4);
    } else {
      Zaehler++;  // automatisch weiterschalten
      helligkeit = 0;   // helligkeit zurücksetzen
    }
  }
  if (Zaehler = 9) {
    digitalWrite(Led_Blau, LOW);      // LED Blau aus
    digitalWrite(Led_Rot, LOW);       // LED Rot aus
    digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
  }


}

= ist eine Zuweisung (die ihren Wert zurück gibt) == ist ein Vergleich

Aktivere Warnungen in der IDE. Dann wird sowas gemeldet.

if/else ist hier etwas vernünftiger als immer if. Aber es geht beides.

Hier ein Minimal-Beispiel, wie ich mir das gedacht habe

const byte Taster = 2; // schaltet gegen GND, um Pulldown Widerstand zu vermeiden
const byte Led = 13;

void setup() {
  Serial.begin(9600);
  // Serial.println("Start");
  pinMode (Taster, INPUT_PULLUP);
  pinMode(Led, OUTPUT);
}

bool Vorherigerstatus;
byte Zaehler;

void loop() {
  bool Tasterstatus = digitalRead (Taster);         // Tasterstatusabfrage

  //Flankenwechsel erkennen
  if (Vorherigerstatus != Tasterstatus) {
    delay(5); // Einfaches Entprellen
    if (Tasterstatus == LOW) {
      Zaehler++;
      if (Zaehler > 1) Zaehler = 0;
      Serial.println(Zaehler);
    }
    Vorherigerstatus = Tasterstatus;
  }
  switch (Zaehler) {
    case 0: Led_8(); break;
    case 1: digitalWrite(Led, LOW); break;
  }
}

byte helligkeit;
void Led_8()  {
  if (helligkeit < 255)
  { helligkeit++;
    // analogWrite(Led, helligkeit);
    digitalWrite(Led, (helligkeit & 0x20) != 0 );  // Blinkt 4 mal
    delay(10); // 2.5 sec insgesamt
  } else {
    Zaehler++;  // automatisch weiterschalten
    helligkeit = 0;   // helligkeit zurücksetzen
    Serial.println(Zaehler);
  }
}

Nicht nur kompiliert, sondern sogar getestet

Da die eingebaute Led auf Pin 13 nicht gut in PWM ist, lasse ich sie einfach 4 mal blinken, während
helligkeit von 0 bis 255 ansteigt.

Das Ganze startet (Zaehler=0) mit Led_8 und geht automatisch auf Zaehler=1 (Led aus bis zum nächsten Tastendruck)

Ich habe noch einen Merker für den alten Tastenzustand ergänzt, um nah am Vorschlag des TO zu bleiben:

const int Taster = 18;            // Pin Nummer des Tasters
const int Led_Rot = 2;            // Pin Nummer der Ledfarbe Rot
const int Led_Gruen = 3;          // Pin Nummer der Ledfarbe Grün
const int Led_Blau = 4;           // Pin Nummer der Ledfarbe Blau

int Zaehler = 1;                  // Zähler für den aktuellen Programstand
int Merker = 1;                   // Merker für den vorhergehenden Programstand
int helligkeit = 1;
bool Tasterstatus;                // aktuelles Signal vom Eingangspin
bool TasterGedrueckt = 0;         // abfragen ob Taster gedrückt war
bool Vorherigerstatus;            // vorheriges Signal vom Eingangspin
const unsigned long EntprellZeit = 20;            // Zeit für Entprellung, anpassen!
unsigned long TasterZeit;         // Zeit beim drücken des Tasters

void setup() {
  pinMode(Led_Blau, OUTPUT);       // LED Pin wird als Ausgang gesetzt
  pinMode(Led_Rot, OUTPUT);        // LED Pin wird als Ausgang gesetzt
  pinMode(Led_Gruen, OUTPUT);      // LED Pin wird als Ausgang gesetzt
  pinMode(Taster, INPUT_PULLUP);   // Taster Pin wird als Eingang gesetzt
  Tasterstatus = digitalRead (Taster);         // Tasterstatusabfrage
  Vorherigerstatus = Tasterstatus;
}

void loop()
{
  Vorherigerstatus = Tasterstatus;             //letzten Zustand merken
  Tasterstatus = digitalRead (Taster);         // Tasterstatusabfrage

  //Flankenwechsel erkennen
  if (!Vorherigerstatus && Tasterstatus && !TasterGedrueckt)
  {
    TasterZeit = millis();      // aktualisiere TasterZeit
    TasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
  }

  // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
  if ((millis() - TasterZeit > EntprellZeit) && TasterGedrueckt == 1)
  {
    Merker++;
    if (Merker == 10) Merker = 1;   //Merker zurücksetzen
    Zaehler = Merker;
  }
  //abhängig vom Zähler passende Funktion aufrufen
  switch (Zaehler) {
    case 0:                               // Warten
      break;
    case 1:     Led_1();                  // Fall_1 Led Blau
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 2:     Led_2();                  // Fall_2 Led Rot
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 3:     Led_3();                  // Fall_3 Led Gruen
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 4:     Led_4();                  // Fall_4 Led Lila
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 5:     Led_5();                  // Fall_5 Led Türkis
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 6:     Led_6();                  // Fall_6 Led Gelb
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 7:     Led_7();                  // Fall_7 Led Weis
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
    case 8:     Led_8();                  // Fall_8 Led Farbmisch
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      break;
    case 9:     Led_9();                  // Fall_9 Led Aus
      TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      Zaehler = 0;
      break;
  }

  /*
    if (Vorherigerstatus != Tasterstatus && millis() - TasterZeit > 2000) { // Taster losgelassen und war mind. 1 Sek. gedrueckt
      Led_9();
      TasterGedrueckt = 0;
      Zaehler = 10;
    }
    */
}

void Led_1()                        // Fall_1 Led Blau
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}


void Led_2()                        // Fall_2 Led Rot
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}

void Led_3()                        // Fall_3 Led Grün
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_4()                        // Fall_4 Led Lila
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}

void Led_5()                        // Fall_5 Led Türkis
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_6()                        // Fall_6 Led Gelb
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_7()                        // Fall_7 Led Weis
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_8()                        // Fall_8 Led aus
{
  digitalWrite(Led_Gruen, LOW);      // LED Blau aus
  digitalWrite(Led_Blau, LOW);       // LED Rot aus
  if (helligkeit < 255)
  { helligkeit = helligkeit + 5;
    analogWrite(Led_Rot, helligkeit);
    delay(20);
  } else {
    Zaehler = 0;
    helligkeit = 1;
  }
}

void Led_9()                        // Fall_9 Led aus
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}

ich finde das echt toll von euch was ihr euch für Mühe gebt.

Versuche mal die Sketches von Michael und Agmue über Weihnachten zu verstehen.

Allerdings den von Agmue hab ich gerade getestet. Genial! Leider wird das Faden nicht widerholt.

Aber das liegt bestimmt daran das es auch nicht im Loop ist.

Danke

Leo1980:
Aber das liegt bestimmt daran das es auch nicht im Loop ist.

Nö, weil ich nirgendwo finden konnte, was Du eigentlich machen willst.

Also Faden, bis der Taster erneut gedrückt wird:

const int Taster = 18;            // Pin Nummer des Tasters
const int Led_Rot = 2;            // Pin Nummer der Ledfarbe Rot
const int Led_Gruen = 3;          // Pin Nummer der Ledfarbe Grün
const int Led_Blau = 4;           // Pin Nummer der Ledfarbe Blau

int Zaehler = 1;                  // Zähler für den aktuellen Programstand
int Merker = 1;                   // Merker für den vorhergehenden Programstand
int helligkeit = 1;
bool Tasterstatus;                // aktuelles Signal vom Eingangspin
bool TasterGedrueckt = 0;         // abfragen ob Taster gedrückt war
bool Vorherigerstatus;            // vorheriges Signal vom Eingangspin
const unsigned long EntprellZeit = 20;            // Zeit für Entprellung, anpassen!
unsigned long TasterZeit;         // Zeit beim drücken des Tasters

void setup() {
  pinMode(Led_Blau, OUTPUT);       // LED Pin wird als Ausgang gesetzt
  pinMode(Led_Rot, OUTPUT);        // LED Pin wird als Ausgang gesetzt
  pinMode(Led_Gruen, OUTPUT);      // LED Pin wird als Ausgang gesetzt
  pinMode(Taster, INPUT_PULLUP);   // Taster Pin wird als Eingang gesetzt
  Tasterstatus = digitalRead (Taster);         // Tasterstatusabfrage
  Vorherigerstatus = Tasterstatus;
}

void loop()
{
  Vorherigerstatus = Tasterstatus;             //letzten Zustand merken
  Tasterstatus = digitalRead (Taster);         // Tasterstatusabfrage

  //Flankenwechsel erkennen
  if (!Vorherigerstatus && Tasterstatus && !TasterGedrueckt)
  {
    TasterZeit = millis();      // aktualisiere TasterZeit
    TasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
  }

  //abhängig vom Zähler passende Funktion aufrufen
  switch (Zaehler) {
    case 0:                               // Warten
      // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
      if ((millis() - TasterZeit > EntprellZeit) && TasterGedrueckt)
      {
        Merker++;
        if (Merker == 11) Merker = 1;   //Merker zurücksetzen
        Zaehler = Merker;
        TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      }
      break;
    case 1:     Led_1();                  // Fall_1 Led Blau
      Zaehler = 0;
      break;
    case 2:     Led_2();                  // Fall_2 Led Rot
      Zaehler = 0;
      break;
    case 3:     Led_3();                  // Fall_3 Led Gruen
      Zaehler = 0;
      break;
    case 4:     Led_4();                  // Fall_4 Led Lila
      Zaehler = 0;
      break;
    case 5:     Led_5();                  // Fall_5 Led Türkis
      Zaehler = 0;
      break;
    case 6:     Led_6();                  // Fall_6 Led Gelb
      Zaehler = 0;
      break;
    case 7:     Led_7();                  // Fall_7 Led Weis
      Zaehler = 0;
      break;
    case 8:     Led_8();                  // Fall_8 Led Farbmisch
      // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
      if ((millis() - TasterZeit > EntprellZeit) && TasterGedrueckt)
      {
        helligkeit = 0;
        Merker = 10;
        Zaehler = Merker;
        TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      }
      break;
    case 9:     Led_9();                  // Fall_9 Led Aus
      // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
      if ((millis() - TasterZeit > EntprellZeit) && TasterGedrueckt)
      {
        helligkeit = 0;
        Merker = 10;
        Zaehler = Merker;
        TasterGedrueckt = 0;      // setzt gedrückten Taster zurück
      }
      break;
    case 10:     Led_10();                // Fall_9 Led Aus
      Zaehler = 0;
      break;
  }

  /*
    if (Vorherigerstatus != Tasterstatus && millis() - TasterZeit > 2000) { // Taster losgelassen und war mind. 1 Sek. gedrueckt
      Led_9();
      TasterGedrueckt = 0;
      Zaehler = 10;
    }
    */
}

void Led_1()                        // Fall_1 Led Blau
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}


void Led_2()                        // Fall_2 Led Rot
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}

void Led_3()                        // Fall_3 Led Grün
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_4()                        // Fall_4 Led Lila
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}

void Led_5()                        // Fall_5 Led Türkis
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_6()                        // Fall_6 Led Gelb
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_7()                        // Fall_7 Led Weis
{
  digitalWrite(Led_Blau, HIGH);     // LED Blau an
  digitalWrite(Led_Rot, HIGH);      // LED Rot an
  digitalWrite(Led_Gruen, HIGH);    // LED Gruen an
}

void Led_8()                        // Fall_8
{
  digitalWrite(Led_Gruen, LOW);      // LED Blau aus
  digitalWrite(Led_Blau, LOW);       // LED Rot aus
  if (helligkeit <= (255 - 5))
  { helligkeit = helligkeit + 5;
    analogWrite(Led_Rot, helligkeit);
    delay(20);
  } else {
    Zaehler = 9;
    helligkeit = 255;
  }
}

void Led_9()                        // Fall_9
{
  if (helligkeit >= (0 + 5))
  { helligkeit = helligkeit - 5;
    analogWrite(Led_Rot, helligkeit);
    delay(20);
  } else {
    Zaehler = 8;
    helligkeit = 0;
  }
}

void Led_10()                        // Fall_10 Led aus
{
  digitalWrite(Led_Blau, LOW);      // LED Blau aus
  digitalWrite(Led_Rot, LOW);       // LED Rot aus
  digitalWrite(Led_Gruen, LOW);     // LED Gruen aus
}