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!