Hallo,
ich bin absoluter Anfänger. Habe mich ein bisschen durchgearbeitet und würde mir jetzt gerne einen RGB LED Controller basteln. Ich habe vier Taster. Taster 1-3 sollen jeweils ein RGB Ablauf starten, Taster 4 soll ein Stop Taster werden, der die Abläufe stoppt und die LEDs ausschaltet. Ablauf 1 (Taster 1) soll ein einfacher Chase werden, indem verschiedene Farben nacheinander aufleuchtet. Ablauf 2 (Taster 2) soll ein Fade werden, indem verschiedene Farben auf und wieder abfaden. Ablauf 3 habe ich mir noch nicht überlegt, bis jetzt hat Taster 3 die gleiche Funktion wie Taster 4.
Probleme, auf die ich gerade stoße sind:
-dass ich im Ablauf 1 erst bei erneutem drücken von Taster 1 die nächste Farbe angezeigt bekomme.
-dass ich erst am Ende eines Ablaufs umschalten kann auf einen anderen Ablauf oder austellen kann.
Bitte um verständliche Unterstützung. Vielen Dank!
Hier mein Code:
[/
int Leds[]= {9,10,11};
int Buttons1 = 1;
int Buttons2 = 2;
int Buttons3 = 3;
int Buttons4 = 4;
double fade;
long myTimer = 0;
long myTimeout = 7;
long myTimeout_flash= myTimeout * 200;
int x=1;
int menu = 0;
void setup()
{
for (int i=0;i<3;i++)
{
pinMode(Leds[i],OUTPUT);
}
pinMode(Buttons1,INPUT_PULLUP);
pinMode(Buttons2,INPUT_PULLUP);
pinMode(Buttons3,INPUT_PULLUP);
pinMode(Buttons4,INPUT_PULLUP);
}
void loop()
{
if (digitalRead(Buttons1)==LOW) //Abfrage von Button 1
{
menu = 1;
updateMenu();
delay(100);
while(!digitalRead(Buttons1));
}
if (digitalRead(Buttons2)==LOW) //Abfrage von Button 2
{
menu = 2;
updateMenu();
delay(100);
while(!digitalRead(Buttons2));
}
if (digitalRead(Buttons3)==LOW) //Abfrage von Button 3
{
menu = 3;
updateMenu();
delay(100);
while(!digitalRead(Buttons3));
}
if (digitalRead(Buttons4)==LOW) //Abfrage von Button 4
{
menu = 4;
updateMenu();
delay(100);
while(!digitalRead(Buttons4));
}
}
void updateMenu()
{
switch(menu){
case 0:
menu = 4;
updateMenu();
break;
case 1:
FarbenSpringen();
break;
case 2:
FadeLED();
break;
case 3:
menu = 4;
updateMenu();
break;
case 4:
analogWrite(Leds[0],0);
analogWrite(Leds[1],0);
analogWrite(Leds[2],0);
break;
case 5:
menu = 4;
updateMenu();
break;
}
}
void FarbenSpringen()
{
if (millis()> myTimer + myTimeout_flash && x==1 )
myTimer=millis();
analogWrite(Leds[0],255);
analogWrite(Leds[1],0);
analogWrite(Leds[2],0);
x++;
}
if (millis()> myTimer + myTimeout_flash && x==2)
{
myTimer=millis();
analogWrite(Leds[0],0);
analogWrite(Leds[1],255);
analogWrite(Leds[2],0);
x++;
}
if (millis()> myTimer + myTimeout_flash && x==3)
{
myTimer=millis();
analogWrite(Leds[0],0);
analogWrite(Leds[1],0);
analogWrite(Leds[2],255);
x++;
}
if (millis()> myTimer + myTimeout_flash && x==4)
{
myTimer=millis();
analogWrite(Leds[0],255);
analogWrite(Leds[1],255);
analogWrite(Leds[2],0);
x++;
}
if (millis()> myTimer + myTimeout_flash && x==5)
{
myTimer=millis();
analogWrite(Leds[0],0);
analogWrite(Leds[1],245);
analogWrite(Leds[2],255);
x++;
}
if (millis()> myTimer + myTimeout_flash && x==6)
{
myTimer=millis();
analogWrite(Leds[0],255);
analogWrite(Leds[1],127);
analogWrite(Leds[2],36);
x++;
}
if (millis()> myTimer + myTimeout_flash && x==7)
{
myTimer=millis();
analogWrite(Leds[0],255);
analogWrite(Leds[1],0);
analogWrite(Leds[2],255);
x++;
}
if (millis()> myTimer + myTimeout_flash &&x==8)
{
myTimer=millis();
analogWrite(Leds[0],255);
analogWrite(Leds[1],255);
analogWrite(Leds[2],255);
x=1;
}
}
void FadeLED()
{
fade = 0;
for(int i=0;i<3;i++)
{
while ( ! (fade == 255) )
{
if(millis()> myTimer + myTimeout)
{
myTimer = millis();
analogWrite(Leds[i], fade);
fade = fade + 1;
}
}
if ( fade == 255 )
{
while ( ! (fade == 0) )
{
if(millis()> myTimer + myTimeout)
{
myTimer = millis();
analogWrite(Leds[i], fade);
fade = fade - 1;
}
}
}
}
}
]
SwitchCase.ino (8.87 KB)