multy switch case

hallo
gibt es die möglichkeit mehre switch case auf einen arduino laufen zu bringen.
zurzeit laufen mehre attinys für die einzelen switch case um bewegungsmeder zu steuern.
z.B.

void loop() {

  // read the sensor:

  int sensorReading = analogRead(A0);

  // map the sensor range to a range of four options:

  int range = map(sensorReading, sensorMin, sensorMax, 0, 3);



  // do something different depending on the

  // range value:

  switch (range) {

    case 0:    // your hand is on the sensor

      Serial.println("dark");

      break;

    case 1:    // your hand is close to the sensor

      Serial.println("dim");

      break;

    case 2:    // your hand is a few inches from the sensor

      Serial.println("medium");

      break;

    case 3:    // your hand is nowhere near the sensor

      Serial.println("bright");

      break;

  }

  delay(1);        // delay in between reads for stability

}

Ja!

Kannst gerne mehrere switch-Anweisungen hintereinander verwenden.

funktioniert bei mir nicht richtig. Es wir dann nur eine case abgearbeit. die Anderen ohne funktion. ich bitte um Beispiele.

switch (range0) {
    case 0:    // your hand is on the sensor

      Serial.println("dark");      break;

    case 1:    // your hand is close to the sensor

      Serial.println("dim");      break;


  }
 switch (range1) {
    case 10:    // your hand is on the sensor

      Serial.println("dark");      break;

    case 11:    // your hand is close to the sensor

      Serial.println("dim");      break;


  }

 switch (range2) {
    case 20:    // your hand is on the sensor

      Serial.println("dark");      break;

    case 21:    // your hand is close to the sensor

      Serial.println("dim");      break;


  }

Was willst du erreichen? Ich weiß, du willst mehrere Switches, aber warum? Was ist der tiefere Sinn dahinter.....

Was ist range0 bis range2? Was steht da drin? Wenn das richtige drin stehen würde, dann würde es auch funktionieren!

Tipp: Durchnummerieren von Variablen ist selten eine gute Idee. Eigentlich wurden Arrays für solche Zwecke erfunden.

Poste doch mal den gesamten Sketch sowie eine kurze Erläuterung, was in welchem Fall nicht geht

es sind mehre Attinys vorhanden die jeweils Bewegungsmelder mit fadeIn/fadeOut (millis) steuern.
der Versuch die jeweiligen Variablen zu erweitern, brachte nur das die Anweisung nicht gleichzeitig funktionieren.

const unsigned int fadeAmount = 5;    // how many points to fade the LED by
int fadeValue;
const unsigned int loopTime = 10;
long previousMillis;
unsigned int sensorWert;
byte status;
int eingang= A1;        
int S1 = 3;         //Beleuchtung        
int PIR_led = 13;    //Kontroll LED        
int PIR = 2;    
int TN  = 10;
int TN_LED = 11;
int FADE_led = 9;
enum ZUSTAENDE {TAG, NACHT_LED_AUS, NACHT_LED_HELLER, NACHT_LED_AN, NACHT_LED_DUNKLER};

void setup() {                  /// TN = TestNacht??
  pinMode(PIR, INPUT_PULLUP);  // PIR Eingang
  pinMode(TN, INPUT_PULLUP);   // Test Tag/Nacht Eingang anstelle analogem Wert
  pinMode (TN_LED, OUTPUT);    // Tag == An; Nacht == Aus
  pinMode (S1, OUTPUT);        // Fade-LED 100% == An; Fade-LED 0% == Aus
  pinMode(FADE_led, OUTPUT);   // Fade-LED
  if (sensorWert < 100) {    /// start anfangszustand
    status = NACHT_LED_AUS;    ///NACHT_LED_AUS ????
  } else {
    status = TAG;
  }
}

void loop() {
  if (digitalRead(TN) == HIGH) {  // Test Tag/Nacht Eingang anstelle analogem Wert
    sensorWert = 150;
  } else {
    sensorWert = 5;
  }
  if (sensorWert > 110) {
    status = TAG;
  }
  switch (status) {
    case TAG:
      fadeValue = 0;
      analogWrite(FADE_led, fadeValue);
      digitalWrite(TN_LED, HIGH);
      if (sensorWert < 100) {
        status = NACHT_LED_AUS;
      }
      break;
    case NACHT_LED_AUS:
      digitalWrite(S1, LOW);
      digitalWrite(TN_LED, LOW);
      if (digitalRead(PIR) == HIGH) {
        status = NACHT_LED_HELLER;
      }
      break;
    case NACHT_LED_HELLER:
      if (millis() > previousMillis + loopTime) {
        fadeValue += fadeAmount;
        if (fadeValue > 255) {
          fadeValue = 255;
          status = NACHT_LED_AN;
        }
        analogWrite(FADE_led, fadeValue);
        previousMillis = millis();
      }
      break;
    case NACHT_LED_AN:
      digitalWrite(S1, HIGH);
       if (millis() - previousMillis > 2000) {
        
         if (digitalRead(PIR) == LOW) {
        status = NACHT_LED_DUNKLER;
      }
        
        previousMillis = millis();
      }
      

      break;
      
      
    case NACHT_LED_DUNKLER:
      if (millis() > previousMillis + loopTime) {
        fadeValue -= fadeAmount;
        if (fadeValue < 5) {
          fadeValue = 0;
          status = NACHT_LED_AUS;
        }
        analogWrite(FADE_led, fadeValue);
        previousMillis = millis();
      }
  }
  
  if ( digitalRead(PIR) == HIGH ){ digitalWrite(PIR_led, HIGH);   }
else{ digitalWrite(PIR_led, LOW);  }

}//-ende loop

Tipp:
Durchnummerieren von Variablen ist selten eine gute Idee.
Eigentlich wurden Arrays für solche Zwecke erfunden.

leide noch nicht die große erfahrung mit Arrays

Hinter “case” steht ein Zahlenwert, der sich auf den Inhalt von rangex bezieht. Versuch mal diesen Ansatz:

range0 = ???;  // Muß den Wert "0" oder "1" liefern
switch (range0) {
    case 0:    // your hand is on the sensor
      Serial.println("dark0");      break;
    case 1:    // your hand is close to the sensor
      Serial.println("dim0");      break;
  }

range1 = ???;  // Muß den Wert "0" oder "1" liefern
 switch (range1) {
    case 0:    // your hand is on the sensor
      Serial.println("dark1");      break;
    case 1:    // your hand is close to the sensor
      Serial.println("dim1");      break;
  }

range 2 = ???;  // Muß den Wert "0" oder "1" liefern
 switch (range2) {
    case 0:    // your hand is on the sensor
      Serial.println("dark2");      break;
    case 1:    // your hand is close to the sensor
      Serial.println("dim2");      break;
  }

Die Fragezeichen bitte durch was Sinnvolles ersetzen.

Zu Deinem Sketch: enum ZUSTAENDE {TAG, NACHT_LED_AUS, NACHT_LED_HELLER, NACHT_LED_AN, NACHT_LED_DUNKLER};liefert TAG=0 bis NACHT_LED_DUNKLER=4, daher darf es nur case 0 bis case 4 geben, besser case TAG bis case NACHT_LED_DUNKLER, gerne auch mehrmals.

komme hier bei nicht weiter.
habe jetzt alles doppel.

const unsigned int fadeAmount = 5;    // how many points to fade the LED by
int fadeValue;
const unsigned int fadeAmount_2 = 5;    // how many points to fade the LED by
int fadeValue_2;
const unsigned int loopTime = 10;
long previousMillis;
long previousMillis_2;
unsigned int sensorWert;
byte status;
//char ZUSTAENDE_2;
         
int eingang = A1;
int PIR_led = 13;    //Kontroll LED
int PIR = 2;
int FADE_led = 3;
//case_2
int PIR_led_2 = 12;    //Kontroll LED2
int PIR_2 = 6;
int FADE_led_2 = 7;
enum ZUSTAENDE {TAG, NACHT_LED_AUS, NACHT_LED_HELLER, NACHT_LED_AN, NACHT_LED_DUNKLER};
//char TAG_2,NACHT_LED_AUS_2, NACHT_LED_HELLER_2, NACHT_LED_AN_2, NACHT_LED_DUNKLER_2;//case2
enum ZUSTAENDE_2 {TAG_2, NACHT_LED_AUS_2, NACHT_LED_HELLER_2, NACHT_LED_AN_2, NACHT_LED_DUNKLER_2};//case2



void setup() {                  /// TN = TestNacht??
  pinMode(PIR, INPUT_PULLUP);  // PIR Eingang
  pinMode (PIR_led, OUTPUT);
  pinMode(FADE_led, OUTPUT);   // Fade-LED
  //case_2
  pinMode(PIR_2, INPUT_PULLUP);  // PIR Eingang
  pinMode (PIR_led_2, OUTPUT);
  pinMode(FADE_led_2, OUTPUT);   // Fade-LED

  sensorWert = analogRead(eingang);
  Serial.begin(9600);

  if (sensorWert < 700) {    /// start anfangszustand
    status = NACHT_LED_AUS;
    ZUSTAENDE_2 = NACHT_LED_AUS;
  } else {
    status = TAG;
    ZUSTAENDE_2 = TAG;
  }
}

void loop() {
  sensorWert = analogRead(eingang);
  //zum testen ohne LDR
  sensorWert = 170;
  Serial.print("Sensorwert = " );
  Serial.println(sensorWert);

  if (sensorWert > 400) {
    status = TAG;
    ZUSTAENDE_2 = TAG_2;
  }

  switch (status) {
    case TAG:
      fadeValue = 0;
      analogWrite(FADE_led, fadeValue);

      if (sensorWert < 100) {
        status = NACHT_LED_AUS;
      }
      break;
    case NACHT_LED_AUS:


      if (digitalRead(PIR) == HIGH) {
        status = NACHT_LED_HELLER;
      }
      break;
    case NACHT_LED_HELLER:
      if (millis() > previousMillis + loopTime) {
        fadeValue += fadeAmount;
        if (fadeValue > 255) {
          fadeValue = 255;
          status = NACHT_LED_AN;
        }
        analogWrite(FADE_led, fadeValue);
        previousMillis = millis();
      }
      break;
    case NACHT_LED_AN:

      if (millis() - previousMillis > 2000) {

        if (digitalRead(PIR) == LOW) {
          status = NACHT_LED_DUNKLER;
        }

        previousMillis = millis();
      }
      break;

    case NACHT_LED_DUNKLER:
      if (millis() > previousMillis + loopTime) {
        fadeValue -= fadeAmount;
        if (fadeValue < 5) {
          fadeValue = 0;
          status = NACHT_LED_AUS;
        }
        analogWrite(FADE_led, fadeValue);
        previousMillis = millis();
      }
  }
  //////////////----------------------------case_02
  
  switch (ZUSTAENDE_2) {
    case TAG_2;
      fadeValue_2 = 0;
      analogWrite(FADE_led_2, fadeValue_2);

      if (sensorWert < 100) {
        ZUSTAENDE_2 = NACHT_LED_AUS_2;
      }      break;
    case NACHT_LED_AUS_2:
    
      if (digitalRead(PIR_2) == HIGH) {
        ZUSTAENDE_2_2 = NACHT_LED_HELLER_2;
      }      break;
    case NACHT_LED_HELLER_2:
      if (millis() > previousMillis_2 + loopTime) {
        fadeValue_2 += fadeAmount_2;
        if (fadeValue_2 > 255) {
          fadeValue_2 = 255;
          ZUSTAENDE_2 = NACHT_LED_AN_2;
        }
        analogWrite(FADE_led_2, fadeValue_2);
        previousMillis_2 = millis();
      }      break;
    case NACHT_LED_AN_2:

      if (millis() - previousMillis_2 > 2000) {

        if (digitalRead(PIR_2) == LOW) {
          ZUSTAENDE_2 = NACHT_LED_DUNKLER_2;
        }

        previousMillis_2 = millis();
      }
      break;

    case NACHT_LED_DUNKLER_2:
      if (millis() > previousMillis_2 + loopTime) {
        fadeValue_2 -= fadeAmount_2;
        if (fadeValue_2 < 5) {
          fadeValue_2 = 0;
          ZUSTAENDE_2 = NACHT_LED_AUS_2;
        }
        analogWrite(FADE_led_2, fadeValue_2);
        previousMillis_2 = millis();
      }
  }
  

  if ( digitalRead(PIR) == HIGH ) {
    digitalWrite(PIR_led, HIGH);
  }
  else {
    digitalWrite(PIR_led, LOW);
  }

}//-ende loop

Wenn ich Deinen Sketch kompiliere, bekomme ich

Test_Forum.ino:40:17: error: expected unqualified-id before '=' token Test_Forum.ino:43:17: error: expected unqualified-id before '=' token

Du brauchst nicht ZUSTAENDE_2, sondern stattdessen status_2, also status_2 = TAG; usw. (Anmerkung: Das Optimieren kommt später.)