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; } } }
Kalli schrieb: > Vielen Dank im voraus für eure Hilfe Toll! Du bedankst dich für Hilfe, sagst aber nicht was wir dir helfen sollen. Nach dem Motto: hier ist mein Problem, schlagt euch einfach mal damit herum. Dann solltest du noch "Wichtige Regeln - erst lesen, dann posten!" berücksichtigen, d.h. lesen, verstehen und umsetzen.
Dir kann keiner helfen. Der hingeschmierte undokumentierte Code begreifst du sicher nicht einmal selbst Beschreib mal in Worten wie dein Programm funktionieren soll. Mal von mir aus Bilder so wie du dir Vorstellst wie es funktionieren soll.
PWM bedeutet "Flackern", nur eben ganz schnell. Dein "delay(1)" bremst das "schnell" unnötig. Fang mal etwas kleiner an, mit einer LED und ohne das Delay.. Deinen Code zu lesen macht keinen Spaß.
Tut mir leid ich bin Anfänger in Sachen Arduino und Foren. Mein Programm kann man als Test für einen Schrankenlauf sehen. Eine Zählvariable i soll den Lauf erst mal Simulieren. Innerhalb der for-Schleife sollen dann die verschiedenen Cases angenommen werden bei Hochlauf der Variable i. Diese cases werden durch die If-Abfragen eingestellt. In den Cases werden die LEDs angesteuert. ledclose und ledopen sind die Endstände der "Schranke", ledrun 5 bis ledrun1 sind die Schrankenlauf leds und sollen halt langsam heller werden und danach wieder abdunkeln. Danach soll die nächste led angehen. Dieser Vorgang led noch aus, wird heller, ganz hell, dunkler werden und wieder ausgehen läuft jeweils in einen Case ab. Und mein Problem ist jetzt: Das Programm an sich läuft eigentlich. Das einzige was mich stört ist das alle LEDs außer die eine LED die an PIN 10 angeschlossen ist beim abdunkeln extrem flackern. Bei der LED an PIN 10 läuft das ausgehen sehr sauber ohne flackern. Dieser Vorgang des dunkel werdens der ledrun4 passiert in case 9. (jede LED ist mit einen Vorwiderstand beschaltet) nochmal sorry für den unstrukturierten Quellcode. Es ist nur ein Testlauf. Ich habe es natürlich vorher nur an einer LED probiert und es hat sauber geklappt sogar an anderen Pins.
Ok shit hab glaub ich schon mein Fehler gefunden. Ich hab bei ein paar cases break am Ende vergessen. Doofer Fehler. Trotzdem Danke.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.