Forum: Mikrocontroller und Digitale Elektronik Arduino LEDs flackern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kalli (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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;
  }
}
}

von Codelesa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Motzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von dummi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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ß.

von Kalli (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Kalli (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ok shit hab glaub ich schon mein Fehler gefunden. Ich hab bei ein paar 
cases break am Ende vergessen. Doofer Fehler. Trotzdem Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.