Pages: [1] 2   Go Down
Author Topic: Tlc 5940 RGB Fading  (Read 588 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich habe meinen 64 Pixel Tisch fertig gebaut mittlerweile bin ich bei der Programmierung angekommen.
Ich bin gerade dabei ein Fading Programm zu schreiben, hab wieder ein Fehler den ich nicht finden kann.
Ich hab versucht erstmal eine Led leuchten zu lassen und in den Farben zu faden (von rot-gelb-grün-türkis-blau-lila und wieder zu rot und das die ganze zeit), wollte mich dann langsam hoch arbeiten bis schließlich sowas rauskommt: http://www.youtube.com/watch?v=9264jeI_1m4&feature=youtu.be

Hier mal der Code:
Code:
for (int c=500; c <= 0; c--)
{
  for (int a=0; a <= 500; a++)
  {
    for (int b=500; b <= 0; b--)
        {
          for (int c=0; c <= 500; c++)
          {
            for (int a=500; a <= 0; a--)
            {
              for (int b=0; b <= 500; b++)
              {
                for (int a=0; a <= 500; a++)
                {
                  Tlc.set(0,a);
                  Tlc.update();
                }
                Tlc.set(1,b);
                Tlc.update();
              }
              Tlc.set(0,a);
              Tlc.update();
            }
            Tlc.set(2,c);
            Tlc.update();
          }
          Tlc.set(1,b);
          Tlc.update();
        }
        Tlc.set(0,a);
        Tlc.update();
      }
  Tlc.set(2,c);
  Tlc.update();
}

Vielleicht findet ja jemand auf Anhieb den Fehler momentan faded er von rot nach gelb über grün und hört dann auf und fängt wieder bei rot an....
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21183
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Verzeih mir, aber 7 verschachtelte for-Schleifen ist nur murks.
Grüße Uwe
Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wie könnte ich das besser lösen?
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gib wenigstens den Schleifenvariablen andere Namen.
Vielleicht kann man dann verstehen, was  die 7 verschiedenen Variablen ( c,a,b,c,a,b,a ) sollen ?
Logged

Offline Offline
Faraday Member
**
Karma: 97
Posts: 3509
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Und wenn man eine Variable wiederverwendet, dann darf man sie nicht neu deklarieren. Das heißt nur beim ersten mal den Datentyp dazuschreiben und beim zweiten mal dann nur "a = 500" statt "int a = 500". Sonst kannst es gut sein, dass das dann zwei verschiedene Variablen mit dem gleichen Namen sind.
Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habs nochmal geändert und kommentiert vielleicht versteht man es jetzt besser:

Code:
int a,b,c,d,e,f,g;
 
// Tlc.set(0,500); Rot    Tlc.set(1,500); Grün     Tlc.set(2,500); Blau           
Tlc.set(0,500); //rotes licht ist an, schleife wird von innen nach außen abgearbeitet

for (g=500; g >= 0; g--)         //blaues licht geht aus es entsteht rot
{
  for (f=0; f <= 500; f++)           // rotes licht geht an es entsteht lila
  {
    for (e=500; e >= 0; e--)        //grünes lich geht aus es entsteht blau
        {
          for (d=0; d <= 500; d++)  //blaues licht geht an es entsteht türkis
          {
            for (c=500; c >= 0; a--)    //rotes licht geht aus es entsteht grün
            {
              for (b=0; b <= 500; b++)   //grünes licht geht an und mischt sich zu gelb
              {
                Tlc.set(1,b);
                Tlc.update();
              }
              Tlc.set(0,c);
              Tlc.update();
            }
            Tlc.set(2,d);
            Tlc.update();
          }
          Tlc.set(1,e);
          Tlc.update();
        }
        Tlc.set(0,f);
        Tlc.update();
      }
  Tlc.set(2,g);
  Tlc.update();
}

Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
grünes licht geht an und mischt sich zu gelb
und das 500 ^ 5 =  31 Billionen mal ???

(Kann auch sein, dass ich mich um einen Faktor 106 vertan hab, egal ... )
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21183
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Farbwerte RGB in dezimal.
rot-  255-000-000
gelb- 255-255-000
grün-000-255-000
türkis-000-255-255
blau-000-000-255
lila- 255-000-255
um einen Übergang von rot-gelb-grün-türkis-blau bis lila zu haben muß Du
von 255-000-000 auf 255-255-000 faden dann
von 255-255-000 auf 000-255-000
usw.

also angenommen an Kanal 0 ist die rote LED angeschlossen, an 1 die grüne und an 2 die blaue und wir faden mit 12 Bit.
 
Code:
       
int R,G,B;

 // fade von rot nach gelb.
Tlc.set(0,4096);  // rot
Tlc.set(2,0);  // blau
for (G = 0; G<=4095; G++)
  {
  Tlc.set(1,G); //
  Tlc.update();
  delay(10);  // Pause für die Fadegeschwindigkeit.
  }
                 // fade von rot nach grün.
Tlc.set(1,4096);  // grün
Tlc.set(2,0);  // blau
for (R = 4095; R>=0; R--)
  {
  Tlc.set(0,R); //
  Tlc.update();
  delay(10);  // Pause für die Fadegeschwindigkeit.
  }
//ecc
Grüße Uwe



Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oh man ich frage mich warum ich nicht drauf komme...
Hier für alle mal der Code, er funktioniert einwandfrei!

Code:
Tlc.set(0,4095);  // rot
Tlc.set(2,0);  // blau
for (G = 0; G<=4095; G++)
  {
  Tlc.set(myPins[0,1,2,3],G); //
  Tlc.update();
  delay(2);  // Pause für die Fadegeschwindigkeit.
  }
                 // fade von rot nach grün.
Tlc.set(1,4095);  // grün
Tlc.set(2,0);  // blau
for (R = 4095; R>=0; R--)
  {
  Tlc.set(0,R); //
  Tlc.update();
  delay(2);  // Pause für die Fadegeschwindigkeit.
  }

//fade zu türkis 
Tlc.set(1,4095);  // grün
Tlc.set(2,0);  // blau
for (B = 0; B<=4095; B++)
  {
  Tlc.set(2,B); //
  Tlc.update();
  delay(2);  // Pause für die Fadegeschwindigkeit.
  } 

//fade zu blau 
Tlc.set(2,4095);  // blau
Tlc.set(0,0);  // rot
for (G = 4095; G>=0; G--)
  {
  Tlc.set(1,G); //
  Tlc.update();
  delay(2);  // Pause für die Fadegeschwindigkeit.
  } 
 
//fade zu lila 
Tlc.set(2,4095);  // blau
Tlc.set(0,0);  // rot
for (R = 0; R<=4095; R++)
  {
  Tlc.set(0,R); //
  Tlc.update();
  delay(2);  // Pause für die Fadegeschwindigkeit.
  }

//fade zu rot 
Tlc.set(0,4095);  // rot
Tlc.set(1,0);  // grün
for (B = 4095; B>=0; B--)
  {
  Tlc.set(2,B); //
  Tlc.update();
  delay(2);  // Pause für die Fadegeschwindigkeit.
  } 

Jetzt stellt sich die Frage wie ich am einfachsten das Fading auf alle "Pixel" bekomme?
Habs mit einem Array probiert hat aber nicht geklappt, hat jemand eine gute Idee?

Mein versuch sah ungefähr so aus:

Code:
int myArray[] = {0, 3, 6, 9, 12, 15};
Tlc.set(myArray[],2000);
Tlc.update();

Gruß
Logged

Wien
Offline Offline
Edison Member
*
Karma: 26
Posts: 1835
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

also ich würde das so angehen (unprobiert):

void setup() {
  Tlc.set(1, 4095);
  Tlc.update;
}

void loop() {
  for (byte n =0; n < 3; n++) {  
    for (int c = 0;  c < 4096; c++) { Tlc.set(((n + 1) % 3) + 1, c); Tlc.update; }
    for (int c = 4095;  c >= 0; c--) { Tlc.set(n + 1, c); Tlc.update; }
  }
}

gruß stefan
« Last Edit: December 09, 2013, 10:11:41 pm by Eisebaer » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21183
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich würde Dir mal rate ein C- Tutorial zu lesen um einige Grundlagen zu erlernen.
Grüße Uwe.
Logged

Wien
Offline Offline
Edison Member
*
Karma: 26
Posts: 1835
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi, uwe,

Quote
Ich würde Dir mal rate ein C- Tutorial zu lesen um einige Grundlagen zu erlernen.

ok, ich hab' den sketch nicht getestet, aber war er soooo falsch?  smiley-cry

gruß stefan
Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2115
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaub du warst nicht gemeint, Stefan smiley Bezieht sich wohl eher auf den stark blockenden Code, for-Schleifen mit 4k Werten, fehlender Index bei Arrays etc.

Gibt es bei der TLC5940 Lib keine Beispiele? Hab die leider gerade nicht drauf. Mein letzter Versuch mit dem TLC5940 führte dazu, dass mein Breadboard sich etwas deformiert hat smiley-grin
« Last Edit: December 10, 2013, 05:10:46 am by sschultewolter » Logged

Kein technischer Support über die Private Nachricht!

Wien
Offline Offline
Edison Member
*
Karma: 26
Posts: 1835
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

war mir klar, s., aber aus österreichischer sicht kann ein südtiroler gar nicht genug schuldgefühle haben. dort haben sie in den dorfwirtshäusern sogar schon spaghetti auf der karte... smiley-roll-blue

gruß, stefan
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

war mir klar, s., aber aus österreichischer sicht kann ein südtiroler gar nicht genug schuldgefühle haben. dort haben sie in den dorfwirtshäusern sogar schon spaghetti auf der karte... smiley-roll-blue
made my day  smiley-lol
Logged

Pages: [1] 2   Go Up
Jump to: