Ausleseprobleme BH1750 & MSGEQ7 & HC05

Hey,
ich hoffe hier kann mir jemand helfen.
Ich versuche jetzt schon seit mehr als einer Woche mein Programm zum laufen zu bringen allerdings funktioniert das nicht so richtig.

Und zwar soll das Programm nachher mit dem Lichtsensor BH1750 die Umgebungshelligkeit auslesen und ab einer bestimmten Helligkeit einen Led-Streifen (5050) ansteuern.
Mit dem Bluetooth Modul soll zwischen den verschiedenen Farben gewechselt werden und bei Bedarf soll eine Lichtanimation über einen MSGEQ7 ausgeführt werden.

Dies funktioniert auch erstmal alles. Allerdings wenn ich die einzelnen Programm-"Bausteine" zusammenfüge geht nichts mehr.

Auf dem Seriell Monitor werden nur zwei ?? angezeigt.

Anbei der Code, ich hoffe mir kann jemand helfen.

#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

int FADESPEED = 25 ;
int FLASHSPEED = 200;

// Ausgelesener Wert von Bt. Modul
int state = 0;

//Variable für den Luxsensor
int lux;

//Vordefinition der Pins
int analogPin=0;
int strobePin=2;
int resetPin=4;
int ledred=3;
int ledblue=6;
int ledgreen=9;
int spectrumValue[7];
int filter=80;

//Farbvariabeln
int ralt=0;
int rneu=0;
int balt=0;
int bneu=0;
int galt=0;
int gneu=0;



void setup(){
  //Bluethooth konfig
   #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif

 //Lux Sensor 
 //Baudrate Setzen 
  Serial.begin(9600);
 //Auslesen des Luxsensors starten
  lightMeter.begin();
 //Daten in die Testdatei schreiben
  Serial.println("BH1750 Testsoftware");


  
  //Pins definieren
  pinMode(analogPin, INPUT);
  pinMode(strobePin, OUTPUT);
  pinMode(resetPin, OUTPUT);
  pinMode(ledred, OUTPUT);
  pinMode(ledblue, OUTPUT);
  pinMode(ledgreen, OUTPUT);
  digitalWrite(resetPin, LOW);
  digitalWrite(strobePin, HIGH);
}

void loop()
{
   //Ausgelesenen Wert = der Variable setzen
   lux = lightMeter.readLightLevel();
   if(lux<0)
   {
    lux=200;
   }
   // Wenn die Anzahl der Gekoppelten Geräte groesser Null ist wird gelesen.
  if(Serial.available() > 0)
   {
   state = Serial.read();
 
  }
  if(lux<100)
  {
    //Case für den Modus 
    switch (state){
    case 0: analogWrite(ledred,255);
    case 1: analogWrite(ledgreen,255); 
    case 2: analogWrite(ledblue,255);
    case 3: 'Farbwechsel(FADESPEED)';
    case 4: 
    case 5: 
    case 6: 
    case 7:
    case 8: 
    case 9: MSGEQ7(filter, analogPin); 
    
    }
  }
}

void MSGEQ7(int filter, int analogPin){
  //Reset Pin einmal auf High nach Low, damit Resetet ist
  digitalWrite(resetPin, HIGH);
  digitalWrite(resetPin, LOW);
  //Alle Frequenzbänder aus dem IC's auszulesen
  for (int i=0;i<7;i++){
    digitalWrite(strobePin, LOW);
    delay(1);
    spectrumValue[i]=analogRead(analogPin);
    spectrumValue[i]=constrain(spectrumValue[i], filter, 1023);
    spectrumValue[i]=map(spectrumValue[i], filter,1023,0,255);
    Serial.print(spectrumValue[i]);
    Serial.print(" ");
    digitalWrite(strobePin, HIGH);
  }
  //Neudefinition der Farbvariabeln
  Serial.println();
  rneu=ralt+spectrumValue[1]+spectrumValue[2];
  bneu=balt+spectrumValue[3]+spectrumValue[4];
  gneu=galt+spectrumValue[5]+spectrumValue[6];
  //Beschreiben der Farbvarabeln
  analogWrite(ledred,rneu);
  analogWrite(ledblue,bneu);
  analogWrite(ledgreen,gneu);
  
}

void Farbwechsel(int FADESPEED){
       int r,b,g=0;
        // fade from blue to violet
      for (r = 0; r < 256; r++) { 
      analogWrite(ledred, r);
      delay(FADESPEED);
      } 
      // fade from violet to red
      for (b = 255; b > 0; b--) { 
      analogWrite(ledblue, b);
      delay(FADESPEED);
      } 
     // fade from red to yellow
      for (g = 0; g < 256; g++) { 
      analogWrite(ledgreen, g);
      delay(FADESPEED);
      } 
      // fade from yellow to green
      for (r = 255; r > 0; r--) { 
      analogWrite(ledred, r);
      delay(FADESPEED);
      } 
      // fade from green to teal
      for (b = 0; b < 256; b++) { 
      analogWrite(ledblue, b);
      delay(FADESPEED);
      } 
      // fade from teal to blue
      for (g = 255; g > 0; g--) { 
      analogWrite(ledgreen, g);
      delay(FADESPEED);
      } 
}

Die Funktionen funktionieren soweit.
Über euere Hilfe währe ich sehr dankbar!

Bei switch/case hast Du mutmaßlich break vergessen.

Oh stimmt danke!

Allerdings behebt das mein Problem immer noch nicht:/

    case 3: 'Farbwechsel(FADESPEED)';

was meinst du wird das machen?

Die funktion Farbwechsel ansprechen

Durch das (vom Optimizer entfernte) Nennen einer extrem großen Character Konstante?

Whandall:
Durch das (vom Optimizer entfernte) Nennen einer extrem großen Character Konstante?

Wie meinst du das?

Wörtlich?

void setup() {
  'Simsalabim';
}
void loop() {}
Somewhere\BigCharConstant\BigCharConstant.ino:2:3: warning: character constant too long for its type

   'Simsalabim';

   ^

Somewhere\BigCharConstant\BigCharConstant.ino: In function 'void setup()':

Somewhere\BigCharConstant\BigCharConstant.ino:2:15: warning: statement has no effect [-Wunused-value]

Achso okay, jetzt verstehe ich was du meinst!
Die ' ' müssen dann da noch entfernt werden, sehe ich das richtig?
Ansprechen der Funktion wie unten gemacht ohne " ' " ?
Habe bisher immer alles in der void Funktion programmiert und mich jetzt an "Unterprogramme" gewagt.

int FADESPEED = 25 ;
int FLASHSPEED = 200;
...
case 3: Farbwechsel(FADESPEED);
...
void Farbwechsel(int FADESPEED)

Konstanten sollten als solche deklariert werden.

Eine globale Konstante brauchst Du nicht an die Funktion zu übergeben. Das funktioniert wohl, führt aber leicht zu Fehlern.

Wenn du Funktionen aufrufen willst, solltst du ihre Aufrufe nicht in Character-Konstanten verwandeln. :wink:

Stelle in den Einstellungen Warnungen auf Alle, dann weist dich der Kompiler auf so etwas hin.