INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
RGB Wechsler - LEDs flackern
22.05.2015, 15:19
Beitrag #1
RGB Wechsler - LEDs flackern
Hallo zusammen,
ich bin neu beim programmieren und hatte bis dato eigentlich nichts damit am Hut.

Mein erstes Projekt ist eine Steuerung für RGB LEDs. Mit einem Schalter kann ich zwischen zwei Modi wählen - erstens die Farben werden automatisch schön gewechselt, mit einem Poti kann ich dauer des Vorgangs verändern

Modi zwei: eine Fixe Farbe entsteht, durch drei Potis kann ich die Werte für Rot, Grün und Blau einstellen.
So weit so gut. Hier der Code:
Code:
int rot = 11; //LED Ausgänge
int gruen = 10;
int blau = 9;
int schalter = 7; //Schalter Variable
int wertrot = 0;  //Helligkeitsvariablen
int wertgruen = 0;
int wertblau = 0;
int rotpot = A0;   //Potieingaenge
int gruenpot = A1;
int blaupot = A2;
int zeitpot = A3;
long zeit;          //Wert für zeitwechsel
float sinzahl = 0; //Zähler für Sinus
float pi = 3.14159265;
void setup() {
  pinMode (rot, OUTPUT);       //LED Ausgänge
  pinMode (gruen, OUTPUT);
  pinMode (blau, OUTPUT);
  pinMode (schalter, INPUT);   //Taster Eingang
  pinMode (rotpot, INPUT);     //Poti Eingänge
  pinMode (gruenpot, INPUT);
  pinMode (blaupot, INPUT);
  pinMode (zeitpot, INPUT);
  Serial.begin(9600);
}
void loop() {

  if (digitalRead(schalter) == LOW)
  {
    zeit=map(analogRead(zeitpot), 0, 1024, 10, 1000);      //Poti für Zeit wird ausgewerter
    wertrot = sin(sinzahl / zeit) * 1000;                  //sinus, rot)
    wertgruen = sin(sinzahl / zeit + pi * 2 / 3) * 1000;   //sinus, grün, 120° Phasenverschoben)
    wertblau = sin(sinzahl / zeit + pi * 4 / 3) * 1000;    //sinus, blau, 240° Phasenverschoben
    wertrot = map(wertrot, -1000, 1000, 0, 255);           //auf Werte für LED übertragen
    wertgruen = map(wertgruen, -1000, 1000, 0, 255);
    wertblau = map(wertblau, -1000, 1000, 0, 100);
    analogWrite(rot, wertrot);                             //Farbe anzeigen
    analogWrite(gruen, wertgruen);                          
    analogWrite (blau, wertblau);
    sinzahl++;                            //zähler +1 für Sinuskurve
    delay (10);
  }

  else if (digitalRead(schalter) == HIGH) {

    wertrot = map(analogRead(rotpot), 0, 1024, 0, 255);        //Poti auslesen und in werte für LED umwandeln
    analogWrite (rot, wertrot);                                //Farbe anzeigen
    wertgruen = map(analogRead(gruenpot), 0, 1024, 0, 255);
    analogWrite (gruen, wertgruen);
    wertblau = map(analogRead(blaupot), 0, 1024, 0, 255);
    analogWrite(blau, wertblau);
  

        }
  }

Erstmal wird der Schalter Abgefragt, damit ich eben in Modus eins oder zwei komme. Der Modus funktioniert soweit, das umschalten und alles klappt auch.

Im modus wird erst das Poti für die Zeit eingelesen, dann sind drei Sinusfunktionien, die um 120° Phasenverschoben sind.. danach kommt die Map funktion und dann wird der Zähler wider um eins erhöht. In den Sinusen (schreibt man das so?) wird die Zählervariable (sinzahl) durch die ausgelsene Zeit vom Poti geteilt. Durch das teileh verändert sich die Frequenz und dadurch läuft die ganze Geschichte langsamer oder schneller ab.

Beim Modus eins, dem automatischen wechsel tritt aber das Problem auf. Die LED flackert. Je nach Stellung des Potis mehr oder weniger, mal mit größeren mal mit kleineren Pausen aber immer flackert es etwas. Die zeit an sich mit dem Poti einstellen geht aber.

Was mich allerdings wundert: Wenn ich statt der Variable zeit eine Festzahl, die nicht abhängig vom Poti ist verwende, funktioniert das ganze einwandfrei.. also ohne Fehler und ohne Probleme, ohne Flackern. Also wenn der Code in etwa so aussieht:
Code:
zeit =163;
    wertrot = sin(sinzahl / zeit) * 1000;                  //sinus, rot)
    wertgruen = sin(sinzahl / zeit + pi * 2 / 3) * 1000;   //sinus, grün, 120° Phasenverschoben)
    wertblau = sin(sinzahl / zeit + pi * 4 / 3) * 1000;    //sinus, blau, 240° Phasenverschoben
    wertrot = map(wertrot, -1000, 1000, 0, 255);           //auf Werte für LED übertragen
    wertgruen = map(wertgruen, -1000, 1000, 0, 255);
    wertblau = map(wertblau, -1000, 1000, 0, 100);
    analogWrite(rot, wertrot);                             //Farbe anzeigen
    analogWrite(gruen, wertgruen);                          
    analogWrite (blau, wertblau);
    sinzahl++;                            //zähler +1 für Sinuskurve
    delay (10);
Dabei spielt es eigentlich keine Rolle welchen Wert ich da eingebe. habe so um die 20 verschiedene Zahlen zwischen 10 und 1000 reingeschmissen und es lief alles super.

An der Schaltung sollte der Fehler nicht liegen.. Es handelt sich um eine common Anode LED; angesteuert über 3 NPN Transistoren. Potis liegen zwischen plus und minus, Schleifer geht zum analogen eingang. Beim Schalter ist 10K Pulldown widerstand.

Und die Vorwiderstände (Basen der Transistoren, LEDs), sind mit Sicherheit ebenfalls richtig; entweder das oder ich sollte mir einen anderen Job suchen, im zweiten Lehrjahr EGS sollte man das können Big Grin

Nun woran könnte das liegen? bin relativ ratlos... vor allem weil es mit einem fixen Wert klappt. Hat da einer ne Idee?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.05.2015, 16:03 (Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2015 16:08 von Sesselmann.)
Beitrag #2
RE: RGB Wechsler - LEDs flackern
Der Grund warum das jetzt in zwei Foren steht: Oftmals sind im einen Forum n paar Leute die einem da weiterhelfen können, im anderen welche für andere Themen, manche haben und generell weiß kenn ich die Foren nicht, deshalb weiß ich auch nicht, wie aktiv oder schnell geantwortet wird..


Wups.. naja kann man ja mal vertauschen, leider ist es bei 1023 auch nicht besser...

Abblockondensatoren in der Schaltung hatte ich keine drin, habe aber noch n paar 100n Kondensatoren zwischen den schleifern und Masse jetzt gesetzt... passiert eigentlich nix. Schwingen sollte dennoch nix mehr, falls das irgendwas jetzt getan hat.. naja zumindest hochfrequente sachen an den Potis sollten weg sein.

Beschaltet so: Die äußeren Pins an +5V bzw. -5V (alles auf m Steckbrett), die schleifer gehen zu den analogen eingängen.

Edit: achja Handy habe ich kurzzeitig zu testzwecken ausgeschaltet. leider ebenfalls keine Änderung.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.05.2015, 16:30 (Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2015 16:35 von Sesselmann.)
Beitrag #3
RE: RGB Wechsler - LEDs flackern
wups mein Gehirn ist noch etwas matsch ^^
meinte +5V und 0V; -5V würden in der Tat wenig Sinn machen...

Potis haben alle 100K. Grund dafür ist a) die hab ich noch rumliegen und b), nachdem nur die Spannung verwertet wird, ist n hoher Widerstand recht schön, weil dann verbrate ich nicht unnötig Strom...

Habe jetzt gerade mal rot ausglesen... bei einem durchlauf sind da einige Sprünge vorhanden, die da nicht sein sollten... von 134 auf 83 auf 128 auf 78...

Code:
236
235
250
232
231
230
228
226
225
223
222
220
218
216
215
175
211
209
207
205
203
201
199
197
195
193
170
188
186
184
182
180
177
175
173
208
121
166
163
161
158
156
194
151
149
146
144
141
139
136
134
83
129
78
124
121
119
116
114
111
109
106
104
101
99
97
94
92
89
87
85
82
80
78
75
73
71
68
66
64
62
60
58
56
54
52
49
48
46
44
42
60
38
36
35
6
31
15
28

Allerdings ist das bei der zeit variable schon so, meistens ist die in der aktuellen potistellung auf 51, aber dann passiert mal sowas
Code:
51
51
49
51
49
51
48
51
48
51
49
51
50
51
51

interresant finde ich dabei, dass es fast so aussieht als würde das periodisch passieren...

Edit: am Poti ist das ganze wohl nicht. Habe gerade über eine Minute den wert von zeitpot auslesen lassen. Auch wenn die LED heftig flackert, da ändert sich nix. wert ist konstant bei 17.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.05.2015, 17:07 (Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2015 17:38 von Sesselmann.)
Beitrag #4
RE: RGB Wechsler - LEDs flackern
naja dachte ich mir schon, die abweichung war jetzt auch nicht so so groß.
die großen Sprünge bei den ausgangsvariablen sind aber schon seltsam, sollte so eigentlich nicht sein..

naja habe n anderes Poti eingesteckt, 10K, mit Drehgriff. Keine Änderung.

da ich nicht mehr von den Dingern gerade zur hand habe, habe ich einfach mal alle anderen Potis von den digitalen Pins getrannt. Für mein Problemkind, also dem Farbwechsel brauch ich die ja eh nicht.
Leider auch nix...

Ach äh übrigens, was ich vergessen hab, wenn man etwas "Glück" hat, kommt man auch schon mal auf eine Potistellung, in der ein Farbwechsel nur mit Wohlwollen erkennbar ist, weil eigentlich alles unkontrolliert hin und her zuckt :/

Edit:
Habe es jetzt schon mal direkt nach dem Sinus ausglesen, um zum schaun ob hier der fehler beginnt oder während des map befehls..
hier hat rot mal wieder recht unbeholfen geflackert, sieht nicht nur schäusslich aus, sondern hat mit Sinus auch rleativ wenig zu tun...
Code:
-811
-985
-982
-979
-976
116
-470
-743
-961
-957
-952
-947
227
-937
-932
-926
-920
-914
-908
-901
-903
-580
-880
-873
-865
-996
439
-994
-487
-824
-815
-806
-797
-788
-784
-389
-969
-749
-738
-728
-717
-991
-286
-938
-673
-662
-650
-638
-999
-180
-896
-590
-577
-565
-552
-935
-72
-845
-500
-486
-473
-811
-802
-431
-418
-774
-389
-754
-361
-834
146
-713
-303
-288
-996
222
-998
-229
-635
-623
-184
-599
-153
-928
-123
-550
-92
-77
-840
-46
443
-985
0
-445
30
-779
-769
538
-750
106
-347
-333
-994
614
-290
-275

edit2: und nochmals habe ich die Zei im Code selbst ohne Poti festgelegt.. Naja was soll man sagen, sieht alles super aus, flüssiges fading, so wie es sein sollte und auch im Serial Monitor sind keine Sprünge und ähnliches vorhanden...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Pulsierende LEDs KBLc 4 190 20.10.2016 22:35
Letzter Beitrag: hotsystems
  WS2812 Helligkeit einzelner LEDs steuern mavericklp 3 665 11.03.2016 09:32
Letzter Beitrag: torsten_156
  Leds blinken lassen mit if-Abfrage und millis ferdi 11 1.527 24.10.2015 08:54
Letzter Beitrag: Bitklopfer
  Laufschrift mit RGB-LEDs scritch 31 4.186 30.04.2015 15:11
Letzter Beitrag: scritch
  Switch Case, LEDs bleiben an, Bedingung aber falsch luto92 4 1.448 16.11.2014 16:52
Letzter Beitrag: luto92
Brick Taster und Leds Hilfe bei dem Code max800000 8 2.590 21.07.2014 12:20
Letzter Beitrag: fp.blues2013
  Wie LEDs durch Taster schalten Alessandra 1 1.617 05.01.2014 16:50
Letzter Beitrag: derdemo

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste