Show Posts
Pages: 1 ... 9 10 [11] 12 13 ... 23
151  International / Deutsch / Re: FastLED / Matrix / Brainstorming on: April 25, 2014, 05:16:11 am
Das nehme ich doch beim Wort: Als nächstes würde ich gern den Schweif in einer beliebigen Richtung (0-360 Grad) berechnen.

Für 0, 45, 90, 135, ... Grad bekomme ich es hin. Aber wie könnte ich das verallgemeinern, dass es mit jedem Richtungsvektor/Winkel funktioniert?

Hier mal ein Beispielcode. Ein Punkt beschreibt eine Lissajousfigur. Die Funktion MoveAll() ganz am Ende erzeugt den Verwischeffekt nach unten. Ideen, wie man die modifizieren könnte?

Code:
/* 20 * 12 Matrix */


#include <FastLED.h>

// LED stuff

#define LED_PIN     23
#define COLOR_ORDER GRB
#define CHIPSET     WS2811

#define BRIGHTNESS  255

// Matrix dimensions

const uint8_t WIDTH  = 20;
const uint8_t HEIGHT = 12;

#define NUM_LEDS (WIDTH * HEIGHT)
CRGB leds[NUM_LEDS];

// Timer stuff

struct timer {unsigned long takt; unsigned long lastMillis; unsigned long count; int delta; byte up; byte down;};
timer multiTimer[3];
int timers = sizeof( multiTimer ) / sizeof( multiTimer[0] );

// Cos table

uint8_t const cos_wave[256]  
{0,0,0,0,1,1,1,2,2,3,4,5,6,6,8,9,10,11,12,14,15,17,18,20,22,23,25,27,29,31,33,35,38,40,42,
45,47,49,52,54,57,60,62,65,68,71,73,76,79,82,85,88,91,94,97,100,103,106,109,113,116,119,
122,125,128,131,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,
189,191,194,197,199,202,204,207,209,212,214,216,218,221,223,225,227,229,231,232,234,236,
238,239,241,242,243,245,246,247,248,249,250,251,252,252,253,253,254,254,255,255,255,255,
255,255,255,255,254,254,253,253,252,252,251,250,249,248,247,246,245,243,242,241,239,238,
236,234,232,231,229,227,225,223,221,218,216,214,212,209,207,204,202,199,197,194,191,189,
186,183,180,177,174,171,168,165,162,159,156,153,150,147,144,141,138,135,131,128,125,122,
119,116,113,109,106,103,100,97,94,91,88,85,82,79,76,73,71,68,65,62,60,57,54,52,49,47,45,
42,40,38,35,33,31,29,27,25,23,22,20,18,17,15,14,12,11,10,9,8,6,6,5,4,3,2,2,1,1,1,0,0,0,0
};

void setup() {
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness( BRIGHTNESS );
  //Serial.begin(9600);

  // set all counting directions positive for the beginning
  
  for (int i = 0; i < timers; i++) multiTimer[i].delta = 1;
  
  // set range (up/down), speed (takt=ms between steps) and starting point (count) of all variables
  
  multiTimer[0].takt=  2;       //x1
  multiTimer[0].up = 255;
  multiTimer[0].down = 0;
  multiTimer[0].count = multiTimer[0].down;
  
  multiTimer[1].takt=  5;      //y1
  multiTimer[1].up = 255;
  multiTimer[1].down = 0;
  multiTimer[1].count = multiTimer[1].down;
  
  multiTimer[2].takt=  6;      //color
  multiTimer[2].up = 255;
  multiTimer[2].down = 0;
  multiTimer[2].count = multiTimer[2].down;

 
}

void loop()
{
  UpdateTimers();
  //DimmAll();
  MoveAll();
  // Lissajous point
  leds[ XY(
    cos_wave[ multiTimer[0].count ] * WIDTH / 255,
    cos_wave[ multiTimer[1].count] * (HEIGHT-2) / 255) ]  
    += CHSV( multiTimer[2].count, 255, 255);
  FastLED.show();
}



uint16_t XY( uint8_t x, uint8_t y) {  // translates from x, y into an index into the LED array
  uint16_t i;
  i = (y * WIDTH) + x;
  return i;
}

void UpdateTimers() // counts all variables with different speeds linear up and down
{
  unsigned long now=millis();
  for (int i=0; i < timers; i++)
  {
    while (now-multiTimer[i].lastMillis >= multiTimer[i].takt)
    {
      multiTimer[i].lastMillis += multiTimer[i].takt;
      multiTimer[i].count = multiTimer[i].count + multiTimer[i].delta;
      if ((multiTimer[i].count == multiTimer[i].up) || (multiTimer[i].count == multiTimer[i].down))
      {
        multiTimer[i].delta = -multiTimer[i].delta;
      }
    }
  }
}

void DimmAll()  // the tail behind the dots
{
  for(int i = 0; i < NUM_LEDS; i++)
  {
    leds[i].nscale8( 240 );
  }
}

void MoveAll()  // the tail downwards
{
  for(int i = 0; i < NUM_LEDS - WIDTH; i++)
  {
    leds[i] += leds[i + WIDTH];
    leds[i].nscale8( 120 );
  }
}

Beste Grüße

Helmuth

edit: Ich muss das Problem wohl präziser beschreiben?! ;-)

Habe im Hinterkopf die Frage, ob man den Bresenham-Algorithmus dafür missbrauchen könnte. Ich fürchte nur, das wird zu langsam, jeden Pixel als Linie der Länge 1 zu beschreiben...




152  International / Deutsch / Re: FastLED / Matrix / Brainstorming on: April 24, 2014, 12:16:32 pm
Eisebaer war schneller - lol - ja genau so war es bei mir! smiley
153  International / Deutsch / Re: FastLED / Matrix / Brainstorming on: April 24, 2014, 12:13:57 pm
@Eisebaer + @Uwe: Ja, hat es wirklich - durch das präzise Beschreiben des Problems ist mir die Lösung klar geworden... denken beim Tippen sozusagen... danke fürs Zuhören!  smiley

@gloob: Das ist auch EIN Streifen, 4m mit 240 LEDs auf ein transparentes Acrylrohr gewickelt und diese Spirale als Matrix hergenommen.

Hier: Warpkern (newscool) smiley-wink

http://www.youtube.com/watch?v=lG8zYfc3TeE&feature=youtu.be
154  International / Deutsch / Re: FastLED / Matrix / Brainstorming on: April 24, 2014, 09:49:03 am
;-)

Hier, so sieht das aus (sorry für den Sound):

155  International / Deutsch / Re: FastLED / Matrix / Brainstorming on: April 24, 2014, 07:34:51 am
Ok, Knoten geplatzt. Ja, so funktioniert das. Fehlte nur 4.) neue Zeile nochmal dimmen
156  International / Deutsch / FastLED / Matrix / Brainstorming on: April 24, 2014, 06:48:22 am
Hey Ihr,

ich habe da eine Idee im Kopf aber gerade einen Knoten im Hirn, wie man die umsetzen könnte.

Man stelle sich ein LED Array vor, auf welchem sich ein Pixel "bewegt".

Dieser soll einen Schweif hinter sich herziehen. Soweit komme ich klar: Vor dem Schreiben der neuen Pixelposition den "Bildspeicher" nicht löschen, sondern nur ein bisschen runterdimmen. Ergebnis: ein Schweif in Bewegungsrichtung des Pixels hinter selbigem. 2D Knight Rider sozusagen.

Jetzt möchte ich die Form des Schweifs zusätzlich durch eine "Strömung" / "Wind" beeinflussen. Sagen wir zum Anfang, alles soll zusätzlich nach unten verwischen/ausfaden - so, dass z.B. ein waagerecht sinusschwingender Pixel einen wellenförmigen Schweif nach unten erzeugt.

Mir fällt dazu nur ein, zeilenweise den Inhalt einer waagerechten Linie halbtransparent in die jeweils darunterliegende Zeile zu kopieren. Konkret 1.) Zeile lesen, 2.) Farbwerte ein bisschen runterskalieren, 3.) zum Inhalt der darunterliegenden Zeile addieren und dorthin schreiben.

Könnt Ihr Euch das vorstellen? Wie würdet Ihr das machen? Ideen, Vorschläge?

Grüße

Helmuth
157  International / Deutsch / Aduino 1.0 IDE unter Ubuntu 12.04 on: April 24, 2014, 05:01:49 am
...stürzt bei mir regelmäßig ab (beendet sich ohne Vorwarnung).

Ist das Problem (und ggf. seine Lösung) bekannt?

MfG

Helmuth
158  International / Deutsch / @jurs: Multitimer 2.0 on: April 23, 2014, 01:57:51 am
Hi Du, habe ein bisschen rumgespielt und lasse Deinen Multitimer jetzt linear hoch- und runterzählen unter Einhaltung oberer und unterer Grenzen. Mit nur 5 Variablen geht dann schon sowas:



Beste Grüße

Helmuth
159  International / Deutsch / Re: "Array of Functions" gesucht on: April 22, 2014, 05:16:35 am
Dankeschön!
160  International / Deutsch / "Array of Functions" gesucht on: April 22, 2014, 04:28:03 am
Hallo Forum!

Problem: In Abhängigkeit von einem Array of Boolean sollen viele verschiedene Unterfunktionen aufgerufen werden.

Momentan mache ich das sinngemäß mit einer langen Liste von

if (data[0] = TRUE)  {action0();}
if (data[1] = TRUE)  {action1();}
usw.

Gibt es eine Möglichkeit, das elegant in einer Schleife zu machen? So hier wäre cool:

for (int index = 0; index < max_actions; index++)   {
  if (data[index] = TRUE) {action[index]();}
  }

Ich hoffe, mein Anliegen ist verständlich?!
Gesucht ist sozusagen ein Konstrukt, um ein "Array of Functions" zu beschreiben.
Wozu? Mein Code ist dermaßen unübersichtlich geworden, dass es sehr mühsam ist, neue Funktionen (action0 bis actionxx) einzubinden.

Was kann man da machen?

Grüße

Helmuth

161  Community / Website and Forum / Re: (solved) How to embed a YouTube video? on: April 02, 2014, 03:37:15 am
@melarky: I was in the same boat - sometimes it worked, sometimes not. Thanx for sharing the missing hint.
162  International / Deutsch / Re: Periodische Ereignisse mit verschiedenen Triggerfrequenzen managen on: March 31, 2014, 03:39:48 am
@Jurs: Super, genau das habe ich gesucht! Danke.

@Theseus: Danke für den Hinweis mit dem genauen Treffen. Habe schon gerätselt, warum das nur manchmal funktioniert hat...

Im weitesten Sinne geht es tatsächlich um (viele und schnell) blinkende Lampen - für einen "Lichtsythesizer" sollen alle Parameter (von z.B. Oszillatoren, Filtern, LFOs) unabhängig voneinander und mit verschiedenen Wellenformen manipuliert werden.

@michael_x: Danke für den eleganten Vorschlag.
163  International / Deutsch / Periodische Ereignisse mit verschiedenen Triggerfrequenzen managen on: March 31, 2014, 02:06:37 am
Hallo und guten Morgen,

ich möchte mehrere Variablen unabhängig voneinander hochzählen, z.B. soll sich a jede halbe Sekunde um 1 erhöhen, b alle 2 Sekunden, c alle 5 Sekunden, usw.
Grundsätzlich funktioniert das ganz gut nach dem Prinzip von Blink without Delay, allerdings muss ich dann für jede Variable previousMillis einzeln speichern, was bei vielen Variablen ziemlich unübersichtlich wird.
Die Frage lautet, ob das nicht eleganter geht. Z.B. dachte ich an die Möglichkeit, zu prüfen, ob currentMillis/1000 ohne Rest durch 2 oder 3 teilbar ist.
Wie würdet ihr das machen, wenn es um viele (+-50) unabhängige Prozesse (=Variablen) geht?

Freue mich über Anregungen, beste Grüße,

Helmuth
164  International / Deutsch / Re: Farbverlauf - Triviale Mathematik?! on: March 20, 2014, 05:00:53 am
@Eisebaer:
Hi, das sollte aber nur passieren, wenn r2 = r1.
War aber ständig so, auch während ich r1 und r2 im Serialmonitor anzeigen ließ und sie nicht identisch waren.
Gruß Helmuth
165  International / Deutsch / Re: Farbverlauf - Triviale Mathematik?! on: March 20, 2014, 04:21:25 am
Hallo Theseus,
super, so funktioniert es.
Danke.
Pages: 1 ... 9 10 [11] 12 13 ... 23