Show Posts
Pages: 1 [2]
16  International / Deutsch / SimpleTimer class -> timer mehrfach von Hand starten und ein mal durchlaufen on: September 13, 2012, 08:02:17 am
Hallo ich versteh die SimpleTimer nicht so ganz

was ich möchte:

einen Timer von 2 sekunden manuell starten und bei ablauf des Timers eine Funktion auslösen

Diesen Timer von 2 sekunden möchte ich jedoch öfter mal auslösen.

was ich habe:

Code:
SimpleTimer animationFinishedTimer;
Code:
startAnimationFinishedTimer();
Code:
void startAnimationFinishedTimer()
{
  Serial.println("start timer");
 
  timerStarted = true;
   
  animationFinishedTimer.setTimeout(500, sendAnimationFinished);
  animationFinishedTimer.run();
}
Code:
void sendAnimationFinished()
{
  Serial.println("animation finished");
}

iregdnwas klappt da aber nicht....beim ersten mal wird sendAnimationFinished() gar nicht aufgerufen und danach dann sofort beim run() und nicht mit der 500 ms verzögerung.

kann mir da jemand helfen?

achso und ganz wichtig: der timer muss abzubrechen sein und neu zu starten sein
17  International / Deutsch / Re: Geschwindigkeit von Arduino erhöhen on: September 10, 2012, 04:24:19 am
weil ich zum beispiel bei cometRight den index runter zähle
beim runter zählen von 0 soll er dann auf das strip ende springen

aber ich glaube auch nicht, dass mir die makemodulo funktion derart viel performance raubt...
ich persönlich habe die vermutung, dass es die clearOtherLeds funktion ist, die bei jedem durchlauf im comet aufgerufen wird
clearOtherLeds durchläuft unter umständen einen menge leds...
18  International / Deutsch / Re: Geschwindigkeit von Arduino erhöhen on: September 10, 2012, 03:33:42 am
hallo,

also der erste tipp hat nciht wirklich merklich viel verbessert. aber war nen versuch wert...aber sind ja eh nur 6 schleifendurchläufe pro funktion
er rennt ja nicht alle pixel einzeln durch sondern nur die strips

der zweite tipp mit dem modulo funktioniert so leider nicht...deshalb hab ich mir ja diese funktion geschrieben
diese funktion soll sicherstellen, dass ich bei negativen zahlen trotzdem noch im kreislauf 0 bis totalLength bleibe
keine ahnung warum der normale modulo mir sowas nicht liefert....

Beispiel:

Normal: -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
 ----------------------------------------------------------------
Mod 4  :  3  0  1  2  3  0  1  2   3 0 1 2 3 0 1 2 3 0 1
19  International / Deutsch / Re: Geschwindigkeit von Arduino erhöhen on: September 06, 2012, 08:45:56 am
Quote
Für diese Library müsstest Du wohl auch Deinen Hardware-Aufbau anpassen, und alle 6 Strips in Reihe schalten.

achso ok na dann fällt das ganze eh aus....ist leider schon alles fest verbaut....


ich lad einfach nochmal das script hoch....vll fällt euch ja noch was auf

20  International / Deutsch / Re: Geschwindigkeit von Arduino erhöhen on: September 06, 2012, 03:10:00 am
könnt ihr mir eventuell beim umstieg auf die fastSPI schnittstelle helfen?

reicht schon ein tauschen der includes aus?
oder muss im code da noch reichlich angepasst werden?

krieg auch das example der library nicht zum laufen....
hab nen SPI_LPD8806
21  International / Deutsch / Re: Geschwindigkeit von Arduino erhöhen on: September 05, 2012, 08:32:12 am
@michael_x: der timer is für ein simples blinken der leds da...is auch nur sehr selten der fall dass es blinken soll

@ volvodani: ui das klingt als wüsstest du was probleme macht...leider weiß ich von diesem ganzen "urschleim" nicht viel....

deshalb mal die frage:

sind das die 6 SPI schnittstellen?

Code:
LPD8806 strip1 = LPD8806(stripLengthv, dataPin1, clockPin1);
LPD8806 strip2 = LPD8806(stripLengthvr, dataPin2, clockPin2);
LPD8806 strip3 = LPD8806(stripLengthhr, dataPin3, clockPin3);
LPD8806 strip4 = LPD8806(stripLengthh, dataPin4, clockPin4);
LPD8806 strip5 = LPD8806(stripLengthhl, dataPin5, clockPin5);
LPD8806 strip6 = LPD8806(stripLengthvl, dataPin6, clockPin6);

kann ich diese zu einer SPI packen ohne die strips um löten zu müssen?
steckt nämlich alles schon im gehäuse...macht sich also schwer...
es bleiben also 6 einzelne strips, die sternförmig verdrahtet sind
22  International / Deutsch / Re: Geschwindigkeit von Arduino erhöhen on: September 05, 2012, 07:30:51 am
ok ein paar teile kann ich mal posten aber für alles ist es etwas zu viel...

schonmal vorweg...
es sind 6 led strips, die sternförmig verdrahtet sind.

für mich intern sehe ich es als reihenverdrahtung und rechne das ganze mit folgenden funktionen in das sternförmige um:

Code:
int calculatePartForStar(int pixel)
{
  int tempLength = 0;
 
  for(int i=0; i<HALO_SIZE; i++)
  {
    tempLength += ledLengthArray[i];
   
    if(tempLength >= pixel)
    {
      return i;
    }
  }
}

int calculatePxForStar(int pixel, int part)
{
  int tempLength = 0;
  int tempPixel = 0;
 
  for(int i=0; i<part; i++)
  {
    tempLength += ledLengthArray[i];
  }
 
  tempPixel = pixel - tempLength;
 
  return tempPixel-1;
}

in jedem loop wird dann beispielsweise folgende funktion aufgerufen:

Code:
void leftCometSolo()
{
  if(cometIndex-totalLength < endComet)
  {
    cometIndex = cometIndex + cometSpeed;
   
    for(int i=0; i<cometLength; i++)
    {
      paint(cometIndex-i, colors[infoWarningColor][0]-(i*((colors[infoWarningColor][0])/cometLength)), colors[infoWarningColor][1]-(i*((colors[infoWarningColor][1])/cometLength)), colors[infoWarningColor][2]-(i*((colors[infoWarningColor][2])/cometLength)));
    }
   
    for(int i=1; i<=cometSpeed; i++)
    {
      paint(cometIndex-cometLength - (cometSpeed-i), 0,0, 0);
    }
   
    clearOtherLeds(startComet, endComet-cometLength);
  }
}

das zeichnen der pixel erfolgt hierüber:

Code:
void paint(int pixelPos, int r, int g, int b)
{
  int part = calculatePartForStar(makeModulo(pixelPos));
  int pixel = calculatePxForStar(makeModulo(pixelPos), part);
 
  strips[part].setPixelColor(pixel, r*brightness/100, g*brightness/100, b*brightness/100);
}

void showStrip()
{
  for(int i=0; i<6; i++)
  {
    strips[i].show();
  }
}

für den überlauf in positiver oder negativer richtung ist dann das makeModulo zuständig...


hier dann noch paar variablendefinitionen:

Code:
#include "LPD8806.h"
#include "SPI.h"
#include "SimpleTimer.h"

int dataPin1 = 5;
int clockPin1 = 4;
int dataPin2 = 7;
int clockPin2 = 6;
int dataPin3 = 9;
int clockPin3 = 8;
int dataPin4 = 11;
int clockPin4 = 10;
int dataPin5 = 45;
int clockPin5 = 44;
int dataPin6 = 3;
int clockPin6 = 2;


int stripLengthv = 32;
int stripLengthvr = 16;
int stripLengthhr = 16;
int stripLengthh = 32;
int stripLengthhl = 16;
int stripLengthvl = 16;

LPD8806 strip1 = LPD8806(stripLengthv, dataPin1, clockPin1);
LPD8806 strip2 = LPD8806(stripLengthvr, dataPin2, clockPin2);
LPD8806 strip3 = LPD8806(stripLengthhr, dataPin3, clockPin3);
LPD8806 strip4 = LPD8806(stripLengthh, dataPin4, clockPin4);
LPD8806 strip5 = LPD8806(stripLengthhl, dataPin5, clockPin5);
LPD8806 strip6 = LPD8806(stripLengthvl, dataPin6, clockPin6);

LPD8806 strips[6] = {strip1, strip2, strip3, strip4, strip5, strip6};

#define HALO_SIZE 6
#define LED_PIN 13

und die setup funktion:

Code:
void setup()
{
  Serial.flush();
 
  Serial.begin(9600);
 
  pinMode(LED_PIN, OUTPUT);
 
  for(int i=0; i<6; i++)
  {
    strips[i].begin();
    strips[i].show();
  }

  clearAllLeds();
 
  blinkTimerWall.setInterval(100, blinkWall);
 
  Serial.flush();
}

der rest dürfte eigentlich nicht viel zur sache tun...hoffe ihr könnt mir helfen


Achso: delays sind außer der eine im loop (delay(2)) keine weiter drin...so ein comet braucht aber locker 2, 3 oder 4 sekunden um die runde von 128 LEDs komplett zu durchlaufen....geht doch sicher schneller oder?

hatte es in der not dann mit 2 und 3 pixel sprüngen in der for schleife versucht aber dann ist die animation sehr hakelig....
23  International / Deutsch / Geschwindigkeit von Arduino erhöhen on: September 05, 2012, 03:55:33 am
Hallo ich habe von einem Kollegen ein Arduino board mit einem LED strip bekommen und programmiere dafür jetzt fleißig animationen.
Ich habe jedoch das Gefühl, dass die eigentlichen 20Mhz nicht genutzt werden, da die Animationen doch recht langsam ablaufen.

Gibt es eine Möglichkeit das board hoch zu takten?

das ganze ist ein arduino mega 2560.

Würde mich über ein paar Tipps echt freuen, da es so nciht besonders zufriedenstellend ist.

Viele Grüße
Pages: 1 [2]