Gast
#4837355
Hallo zusammen, ich habe hier einen Beispielcode geschrieben um mehr über PWM heraus zu finden. Ich habe versucht insgesamt 7 LEDs nacheinander anzusteuern, wovon 5 nur mit analogWrite angesteuert werden. Diese 5 LEDs sollen erst von dunkel nach hell und danach von hell nach dunkel gehen. Als nächstes soll das dann bei der nächsten LED passieren. Mein Problem ist allerdings das die LEDS beim ausgehen schon sehr extrem flackern. Vielen Dank im voraus für eure Hilfe unsigned int i; unsigned int y; int barriertime=6000; unsigned int value =barriertime/6; int value2=value *2; int value3=value *3; int value4=value *4; int value5=value *5; int comparestate; unsigned int brightness5; unsigned int brightness4; unsigned int brightness3; unsigned int brightness2; unsigned int brightness1; #define ledopen 13 //Ausgabe Pin white LED #define ledrun1 5 //Ausgabe Pin green LED #define ledrun2 3 //Ausgabe Pin green LED #define ledrun3 11 //Ausgabe Pin yellow LED #define ledrun4 10 //Ausgabe Pin blue LED #define ledrun5 9 //Ausgabe Pin yellow LED #define ledclose 8 //Ausgabe Pin red LED void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println("Programm läuft..."); pinMode(ledopen,OUTPUT); // Ausgabe LED festlegen pinMode(ledrun1,OUTPUT); // Ausgabe LED festlegen pinMode(ledrun2,OUTPUT); // Ausgabe LED festlegen pinMode(ledrun3,OUTPUT); // Ausgabe LED festlegen pinMode(ledrun4,OUTPUT); // Ausgabe LED festlegen pinMode(ledrun5,OUTPUT); // Ausgabe LED festlegen pinMode(ledclose,OUTPUT); // Ausgabe LED festlegen } void loop() { for(i=0;i<=(barriertime+100);i++) { delay(1); if (i==0) { comparestate=0; } if ((i>0)&& i<value) { comparestate=7; } if (i == value) { comparestate=1; y=value; } if (i>value) { comparestate=8; } if(i == value2) { comparestate=2; y=value; } if (i>value2) { comparestate=9; } if( i == value3) { comparestate=3; y=value; } if (i>value3) { comparestate=10; } if(i == value4) { comparestate=4; y=value; } if (i>value4) { comparestate=11; } if(i == value5) { comparestate=5; y=value; } if (i>value5) { comparestate=12; } if(i >= barriertime) { comparestate=6; } //Serial.println(brightness5); switch (comparestate) { case 0: { digitalWrite(ledclose,HIGH); analogWrite(ledrun5,0); digitalWrite(ledopen,LOW); } break; case 7: { digitalWrite(ledclose,0); brightness5=i/(float)value*255; // Serial.println(brightness5); analogWrite(ledrun5,brightness5); } break; case 1: { analogWrite(ledrun5,255); analogWrite(ledrun4,0); } break; case 8: { brightness5=y/(float)value*255; if ((brightness5 !=0) && (brightness5 <257)) { analogWrite(ledrun5,brightness5); } y--; brightness4= (i-value)/(float)value*255; analogWrite(ledrun4,brightness4); // Serial.println(y); } case 2: { analogWrite(ledrun4,255); analogWrite(ledrun3,0); analogWrite(ledrun5,0); } break; case 9: { brightness4=y/(float)value*255; if (brightness4 !=0) { analogWrite(ledrun4,brightness4); } y--; //Serial.println(brightness4); //Serial.println(y); brightness3= (i-value)/(float)value*255; analogWrite(ledrun3,brightness3); } break; case 3: { analogWrite(ledrun3,255); analogWrite(ledrun4,0); analogWrite(ledrun2,0); } break; case 10: { brightness3=y/(float)value*255; if (brightness3 !=0) { analogWrite(ledrun3,brightness3); } y--; brightness2= (i-value)/(float)value*255; analogWrite(ledrun2,brightness2); } case 4: { analogWrite(ledrun2,255); analogWrite(ledrun1,0); analogWrite(ledrun3,0); } break; case 11: { brightness2=y/(float)value*255; if (brightness2 !=0) { analogWrite(ledrun2,brightness2); } y--; brightness1= (i-value)/(float)value*255; analogWrite(ledrun1,brightness1); } case 5: { analogWrite(ledrun1,255); analogWrite(ledrun2,0); digitalWrite(ledopen,LOW); } break; case 12: { brightness1=y/(float)value*255; if (brightness5 !=0) { analogWrite(ledrun1,brightness1); } y--; } case 6: { digitalWrite(ledopen,HIGH); analogWrite(ledrun1,0); } break; default: break; } } }