Pages: 1 [2]   Go Down
Author Topic: Geschwindigkeit von Arduino erhöhen  (Read 2017 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2741
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

und warum hast du überhaupt negative Zahlen ?

unsigned löst viele Pseudo-Probleme, wenn die Daten logisch gesehen nur  im Bereich {0, 1, ...} sind.
Und wenn dein Ergebnis modulo (0 .. len) sein soll, ist der Ausgangswert das eigentlich auch, oder kann zumindest so interprtiert werden, oder ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4702
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
aber ich glaube auch nicht, dass mir die makemodulo funktion derart viel performance raubt...

Ich auch nicht, aber mit vielen Optimierungen erreichst Du in der Summe auch etwas grösseres.

Quote
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

Ja, es sind schon nur 6 Durchläufe, aber Du rufst das bei jedem paint() auf und die paint()-Funktion ist wahrscheinlich die am häufigsten aufgerufene Funktion in Deinem Sketch. Somit ist das durchaus relevant. Poste mal die verbesserte Version.

Ich würde die clearOtherLeds()-Funktion komplett eliminieren und gleich clearAllLeds() aufrufen (natürlich vor dem Setzen der anderen Leds), bei dieser Funktion aber den Aufruf von showStrip() entfernen und nur an jenen Ort wieder einzufügen, wo es wirklich gebraucht wird.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo entschuldigt die lange pause...bin mit dem kram gerade ziemlich im stress

hier nun die verbesserte paint samt umrechnung auf die sternförmige verdrahtung:

Code:
void paint(int pixelPos, int r, int g, int b)
{
  calculatePxForStar(pixelPos);
 
  strips[aktPart].setPixelColor(aktPixel, r*brightness/100, g*brightness/100, b*brightness/100);
}

Code:
void calculatePxForStar(int pixel)
{
  int tempLength = 0;
  //int tempPixel = pixel%totalLength;
  int tempPixel = makeModulo(pixel);
 
  for(int i=0; i<HALO_SIZE; i++)
  {
    tempLength += ledLengthArray[i];
   
    if(tempLength >= tempPixel)
    {
      aktPart = i;
      aktPixel = tempPixel - (tempLength - ledLengthArray[i]) - 1;
     
      break;
    }
  }
}

den zweiten tipp von dir werde ich nächste woche mal probieren wenn es an die optimierung geht...gerade muss erstmal alles funktionieren....tut es aber zum glück auch schon fast smiley-wink

ich meld mich dann nochmal....da geht noch was ^^
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

es hat mir einfach keien ruhe gelassen.....

ich habe das weglassen der clearOtherLeds jetzt einmal versucht....hat einiges an speed gebracht....ich schätze mal 10-20% etwa....das is schonmal gut...vielen vielen dank schonmal...wenn noch weitere solcher dinge auffallen wär das echt genial....

« Last Edit: September 14, 2012, 08:41:34 am by iamable » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4702
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kannst Du Deinen ganzen Code nochmals posten? Ich verliere sonst den Überblick, welcher Code gerade aktuell ist.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

jap wird gemacht.

clearOtherLeds() ist aber noch nicht überall draußen....bisher nur in leftCometSolo() und ricgtCometSolo()
den rest ziehe ich am montag nach
« Last Edit: September 27, 2012, 01:44:31 am by iamable » Logged

Pages: 1 [2]   Go Up
Jump to: