Arduino Zähler springt einfach so

Hey Leute,

ich Zweifel gerade an meinen analytischen Fähigkeiten.

In meinem Sketch gibt es eine Variable: mischeFarbmusterLeds1

Diese wird mit mischeFarbmusterLeds1++ hochgezählt.
Ganz einfach. Die Variable springt aber andauernd. von 255 auf 86, oder irgendwelchen anderen Zahlen.

Am RAM liegt es nicht. ich habe 600Byte frei.

Ich hab dann meinen Nano beiseite gelegt und nen Uno genommen und dort den Sketch nackt ohne Peripherie angeschlossen.

Selbst er verrechnet sich.

Könnt Ihr den sketch bei euch mal laufen lassen und gucken ob auf der Seriellen Konsole das gleiche Verhalten zu sehen ist?

beste Grüße

Sketch (gekürzt, nicht lauffähig da sonst zu lang für den Beitrag, Lauffähig im Anhang als ZIP):

#include <FastLED.h>


#define LED_PIN     6

// Information about the LED strip itself
#define NUM_LEDS    100
#define CHIPSET     WS2812B
#define COLOR_ORDER GRB

const int coinPin = 8;
const int rotationPin = 10;

int coinState = 0;
int rotationState = 0;

bool coinFlag = true;
bool rotationFlagTrue = false;
bool rotationFlagFalse = false;

bool playableFlag = false;

byte coinTimer = 60;
unsigned int timerCounter = 0;
byte letztesMuster = 0;
bool rotateFlag = false;

#define BRIGHTNESS 255

const byte maxByte = 255;


#define TEMPERATURE Tungsten100W


byte sinus = 0;
byte wechselFarbe = 0;
// LED Arrays
CRGB anzeigeLeds[NUM_LEDS];
CRGB farbmuster1zuBlend[NUM_LEDS];
CRGB farbmuster2zuBlend[NUM_LEDS];
CHSV gHerzschlag[NUM_LEDS];
CRGB clr1;
CRGB clr2;

bool farbmuster1Wechseln = false;
bool farbmuster1WechselnErfolgt = false;
byte gHue2 = 73;
byte gHue3 = 129;

// LED Aktualisierung
byte framesPerSecond = 120;

byte mischeFarbmusterLeds1 = 0;

#define anzahlPattern 14
bool patterns[anzahlPattern][2];
static bool gesetztesPattern = false;


void setupPatternsOrg() {
  if (!gesetztesPattern) {
    // Wenn kein Pattern gesetzt wurde, eins setzen
    patterns[random(0, anzahlPattern)][0] = true;
    patterns[random(0, anzahlPattern)][1] = true;

    // Keine doppelten
    for (int i = 0; i < anzahlPattern; i++) {
      while (patterns[i][0] == patterns[i][1]) {
        patterns[i][1] = false;
        patterns[random(0, anzahlPattern)][1] = true;
      }
    }

  }
}

void changePatterns() {
  // Prüfe ob ein Pattern gesetzt wurde

  for (byte i = 0; i < anzahlPattern; i++) {
    if (patterns[i][0]) {
      gesetztesPattern = true;
    }
  }

  if (gesetztesPattern) {
    // Wenn Pattern gesetzt wurde, das andere ändern
    unsigned int musterWahl = random8(0, anzahlPattern);

    for (byte i = 0; i < anzahlPattern; i++) {
      if (!farbmuster1WechselnErfolgt) {
        if (farbmuster1Wechseln) {

          if (musterWahl == i) {
            patterns[i][0] = true;
          } else {
            patterns[i][0] = false;
          }

        } else {

          if (musterWahl == i) {
            patterns[i][1] = true;
          } else {
            patterns[i][1] = false;
          }
        }
        farbmuster1WechselnErfolgt = true;
      }
    }
  }
}



void setzeMuster() {
  if (patterns[0][0]) {
    rainbow(farbmuster1zuBlend);
  }
  if (patterns[1][0]) {
    rainbowWithGlitter(farbmuster1zuBlend);
  }
  if (patterns[2][0]) {
    confetti(farbmuster1zuBlend);
  }
  if (patterns[3][0]) {
    sinelon(farbmuster1zuBlend);
  }
  if (patterns[4][0]) {
    juggle(farbmuster1zuBlend);
  }
  if (patterns[5][0]) {
    wabern(farbmuster1zuBlend);
  }




  if (patterns[0][1]) {
    rainbow(farbmuster2zuBlend);
  }
  if (patterns[1][1]) {
    rainbowWithGlitter(farbmuster2zuBlend);
  }
  if (patterns[2][1]) {
    confetti(farbmuster2zuBlend);
  }
  if (patterns[3][1]) {
    sinelon(farbmuster2zuBlend);
  }
  if (patterns[4][1]) {
    juggle(farbmuster2zuBlend);
  }
  if (patterns[5][1]) {
    wabern(farbmuster2zuBlend);
  }


}

void mischePufferLedsOrg() {

  if (mischeFarbmusterLeds1  == 60) {
    farbmuster1Wechseln = true;
    changePatterns();
  } else {
    farbmuster1WechselnErfolgt = false;
  }

  if (mischeFarbmusterLeds1 == 192) {
    farbmuster1Wechseln = false;
    changePatterns();
  } else {
    farbmuster1WechselnErfolgt = false;
  }
  setzeMuster();
}

void mischeAnzeigeLeds() {
  mischePufferLedsOrg();
  CHSV spectrumcolor;

  for (int i = 0; i < NUM_LEDS; i++) {                        // mix the 2 arrays together
    anzeigeLeds[i] = blend( farbmuster1zuBlend[i], farbmuster2zuBlend[i], sin8(mischeFarbmusterLeds1 ));
  }
}

void zeigeFarben() {
  FastLED.show();
}



void musterRotation() {

  //if (rotationFlagFalse && rotationFlagTrue && coinTimer > 0 && rotateFlag) {
    if (coinTimer < 20) {
      coinTimer += 5;
    }
    Serial.println(mischeFarbmusterLeds1);

    mischeFarbmusterLeds1++;
    rotationFlagFalse = false;
    rotationFlagTrue = false;
    rotateFlag = false;
 // }

}


void readButtons() {

  // read the state of the buttons:
  coinState = digitalRead(coinPin);
  rotationState = digitalRead(rotationPin);

  if (rotationState == HIGH) {
    rotationFlagTrue = true;
  } else {
    rotationFlagFalse = true;
  }



  // check if the coin is inserted. If it is, the coinState is HIGH:
  if (coinState == HIGH) {
    // set flag on:
    if (coinTimer < 30) {
      coinFlag = true;
      coinTimer = 30;
      timerCounter = 0;
    }
  } else {
    coinFlag = false;
  }
}


void loop()
{

  readButtons();

  EVERY_N_MILLISECONDS(20)
  {
    sinus++;
    rotateFlag = true;
    musterRotation();
  }

  EVERY_N_MILLISECONDS(1000 / framesPerSecond)
  {
    if (playableFlag) {
      mischeAnzeigeLeds();
    } else {
      schlafen();
    }
    gHue++;
    FastLED.show();
  }

  EVERY_N_SECONDS(1)
  {
    if (coinTimer > 0) {
      coinTimer--;
      timerCounter++;
      playableFlag = true;
    } else {
      playableFlag = false;
    }
    //Serial.println(coinTimer);
  }
}

void setup() {
  delay( 1000 ); // power-up safety delay
  Serial.begin(115200);
  pinMode(coinPin, INPUT);
  pinMode(rotationPin, INPUT);
  setupZufall();
  setupPuk();
  setupPatternsOrg();
}

void setupZufall() {
  CreateTrulyRandomSeed();
  randomSeed(seed);
}

void setupPuk() {

  Serial.println("Start...");
  setzeHerzFarbe();
  gHerzSaettigung = random(maxByte * 0.7, maxByte);
  setzeHerzVariation();
  setzeHerzschlagFrequenz(30, 120);

  FastLED.setBrightness(  BRIGHTNESS );

  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(anzeigeLeds, NUM_LEDS).setCorrection( TypicalSMD5050 );
  FastLED.setTemperature( TEMPERATURE );

}

Beispielliste:

Start...
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
232
255
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
255
255
226
255
130
164
165
166
167
168

Kaleidoskop.zip (13.3 KB)

Super Zahlenreihe ::slight_smile:
Wo ist der Sketch

Hi

Meinst Du nicht, daß diese Zahlenschlange vll. ein klein Bisschen zu lang geworden ist?
Du hättest Diese zumindest soweit zusammen streichen können, wo sich der Arduino NICHT verrechnet hat.

So habe ich nämlich echt keine Lust, mir Deinen Sketch anzuschauen um zu prüfen, weshalb Er Sich 'da und da' doch nicht verrechnet hat, ein anderes Mal aber dann doch.

Deinen Sketch bitte als CODE hier in Code-Tags.

MfG

200 byte freies Ram sind arg wenig.

Nano und UNO haben den gleichen Controller. Darum tritt der Fehler wie erwartet bei beiden auf.
Hast Du einen MEGA zum probieren?

Grüße Uwe

Hey,

ich hab nochmal meinen Beitrag angepasst. Ich hoffe er ist jetzt verständlicher.

Uwe, ja gute Idee, ich probier ihn heute Abend mal aus. Wenn der funktionieren würde, würde mich aber noch mehr interessieren warum es beim UNO und Nano zu dem Problem führt.

Man muss sich ja schon darauf verlassen können, dass 1+1 = 2 ist. Sonst macht das keinen Sinn xD

Ich sehe halt keine Stelle im Sketch, der die Variable übersteuert. Auch scheint die Variable nicht komplett zufällig überschrieben werden. Es scheint als wenn das Byte immer mal wieder zu 255 kippt, dann aber auch wieder andere Werte annimmt.

beste Grüße
Paul

Der RAM-Verbrauch ist jener den der Compiler aus der Summe der Variablen errechnet. Nicht dabei sind andere RAM-Notwendigkeiten, die sich während der Laufzeit ergeben. Auch der RAM-Bedarf des Stack ist nicht mitgerechnet. In Stack werden Rücksprungadressen die zB bei Funktionsaufrufen notwendig sind abgespeichert. Auch Registerinhalte der CPU können im Stack zwischengespeichert werden.

zB ein Serial.print("text"); verbraucht RAM weil der String vom FLASH ins RAM kopiert wird, obwohl der Compiler das nicht mitrechnet. Serial.print(F("text")); beläßt den String im FLASH.

RAM-Verbrauch - Deutsch - Arduino Forum um RAM Verbrauch zur Laufzeit des Sketches zu wissen.
Arduino Playground - AvailableMemory
Measuring Memory Usage | Memories of an Arduino | Adafruit Learning System

Grüße Uwe

OK, die Erkenntnis ist, dass es reproduzierbar ist.

Der Mega hat 7527 Byte frei. (LED Anzahl auf 5 reduziert, über getFreeMem ermittelt)
Der Nano hat 1385 Byte frei. (LED Anzahl auf 5 reduziert, über getFreeMem ermittelt)

Beim Mega ist es das gleiche Verhalten.

240
241
242
243
244
245
246
255
23
79
130
226
255
136
255
120
252
255
157
255
255
199
255
0
1
2
3
4

Noch weitere Ideen?
Hat es mal jemand ausprobiert?

Hi

global - was macht das STATIC darin? (Zeile 59)

static bool gesetztesPattern = false;

Wo gibst Du die Zahlen überhaupt aus?
Ich finde nur das "Start..." - und reproduzieren kann ich Das nicht, da bei mir 'rainbow' nicht declariert wird - ggf. eine andere Version der FastLED.

MfG

global - was macht das STATIC darin?

Diese Variable ist nur in dieser Übersetzungseinheit sichtbar.

Hey,

also ich hab den Fehler gefunden. Ich verstehe es aber nicht.

void sinelon(struct CRGB *leds)
{
  fadeToBlackBy( leds, NUM_LEDS, 10);
  int pos = beatsin16( 30, 0, NUM_LEDS );
  leds[pos] += CHSV( gHue, maxByte, maxByte);
}

wenn ich diese Funktion nutze, spinnt die Variable rum. Lässt sogar den Arduino neustarten.

wenn man den Aufruf sinelon aus der setzeMuster raus nimmt läuft alles.

hier noch der Sketch:

#include <FastLED.h>

#define LED_PIN     6
#define NUM_LEDS    5
#define CHIPSET     WS2812B
#define COLOR_ORDER GRB

const int coinPin = 8;
const int rotationPin = 10;

int coinState = 0;
int rotationState = 0;

bool coinFlag = true;
bool rotationFlagTrue = false;
bool rotationFlagFalse = false;

bool playableFlag = false;

byte coinTimer = 60;
unsigned int timerCounter = 0;
byte letztesMuster = 0;
bool rotateFlag = false;

#define BRIGHTNESS 255

const byte maxByte = 255;


#define TEMPERATURE Tungsten100W

const byte maxHerzVariation = 25;

byte gHerzFarbe;
byte gGeburtsFarbe;
byte gHerzSaettigung;
byte gHerzVariation;
byte gHerzVariationCache;
byte gHerzHelligkeit;
byte gHerzHelligkeitFaktor;

byte gHerzVariationFarbe[NUM_LEDS];

unsigned int gGeburtsHerzschlagFrequenz = 60; // bpm
unsigned int gHerzschlagFrequenz = 60; // bpm

byte sinus = 0;
byte wechselFarbe = 0;

CRGB anzeigeLeds[NUM_LEDS];
CRGB farbmuster1zuBlend[NUM_LEDS];
CRGB farbmuster2zuBlend[NUM_LEDS];
CHSV gHerzschlag[NUM_LEDS];
CRGB clr1;
CRGB clr2;

bool farbmuster1Wechseln = false;
bool farbmuster1WechselnErfolgt = false;
byte gHue2 = 73;
byte gHue3 = 129;


byte framesPerSecond = 120;

int test1= 0;
byte mischeFarbmusterLeds1 = 0;
int test2= 0;
byte anzahlPattern = 14;
bool patterns[14][2];
bool gesetztesPattern = false;

uint8_t gHue = 0;

void addGlitter( fract8 chanceOfGlitter, struct CRGB *leds) 
{
  if( random8() < chanceOfGlitter) {
    leds[ random16(NUM_LEDS) ] += CRGB::White;
  }
}

void rainbow(struct CRGB *leds) 
{
  fill_rainbow( leds, NUM_LEDS, gHue, NUM_LEDS);
}


void schlafen()
{
  fadeToBlackBy( anzeigeLeds, NUM_LEDS, 30);
  byte brightness;
  if(random8() < 5) {
    brightness = maxByte;
  }else{
    brightness = 0;
  }
  anzeigeLeds[random8(NUM_LEDS)] = CHSV( gHue + random8(20), 255, brightness);
}


void wabern(struct CRGB *leds) {
  byte sprung = 160;
  for( int i = 0; i < NUM_LEDS; i++) {
    if (byte(sinus+i*sprung) == 0){
      gHerzVariationFarbe[i] = gHerzVariationFarbe[i]+random8(3);
    }
    leds[i] = CHSV(gHerzVariationFarbe[i], maxByte, maxByte - (sin8(sinus+i*sprung)/2));
  }
}


void sinelon(struct CRGB *leds)
{
  fadeToBlackBy( leds, NUM_LEDS, 10);
  int pos = beatsin16( 30, 0, NUM_LEDS );
  leds[pos] += CHSV( gHue, maxByte, maxByte);
}


void fade(struct CRGB *leds)
{
  fadeToBlackBy( leds, NUM_LEDS, 50);
  int pos = brighten8_video(16);
  leds[pos] = CHSV( gHue, maxByte, maxByte);
}

void blendme2(struct CRGB *leds) {
  uint8_t starthue = beatsin8(10, 0, 255);
  uint8_t endhue = beatsin8(16, 0, 255);
  if (starthue < endhue) {
    fill_gradient(leds, NUM_LEDS, CHSV(starthue,255,255), CHSV(endhue,255,255), FORWARD_HUES);     } else {
    fill_gradient(leds, NUM_LEDS, CHSV(starthue,255,255), CHSV(endhue,255,255), BACKWARD_HUES);
  }

}

void juggle(struct CRGB *leds) {
  fadeToBlackBy( leds, NUM_LEDS, 20);
  byte dothue = 0;
  for( int i = 0; i < 8; i++) {
    leds[beatsin16( i+7, 0, NUM_LEDS-1 )] |= CHSV(dothue, 200, maxByte);
    dothue += 32;
  }
}


void setupPatternsOrg() {
  if (!gesetztesPattern) {
    // Wenn kein Pattern gesetzt wurde, eins setzen
    patterns[random(0, anzahlPattern)][0] = true;
    patterns[random(0, anzahlPattern)][1] = true;

    // Keine doppelten
    for (int i = 0; i < anzahlPattern; i++) {
      while (patterns[i][0] == patterns[i][1]) {
        patterns[i][1] = false;
        patterns[random(0, anzahlPattern)][1] = true;
      }
    }

  }
}

void changePatterns() {
  

  for (byte i = 0; i < anzahlPattern; i++) {
    if (patterns[i][0]) {
      gesetztesPattern = true;
    }
  }

  if (gesetztesPattern) {
   
    unsigned int musterWahl = random8(0, anzahlPattern);

    for (byte i = 0; i < anzahlPattern; i++) {
      if (!farbmuster1WechselnErfolgt) {
        if (farbmuster1Wechseln) {

          if (musterWahl == i) {
            patterns[i][0] = true;
          } else {
            patterns[i][0] = false;
          }

        } else {

          if (musterWahl == i) {
            patterns[i][1] = true;
          } else {
            patterns[i][1] = false;
          }
        }
        farbmuster1WechselnErfolgt = true;
      }
    }
  }
}

void setzeMuster() {
  if (patterns[0][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[1][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[2][0]) {
    wabern(farbmuster1zuBlend);
  }
  if (patterns[3][0]) {
    sinelon(farbmuster1zuBlend);
  }
  if (patterns[4][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[5][0]) {
    wabern(farbmuster1zuBlend);
  }
  if (patterns[6][0]) {
    wabern(farbmuster1zuBlend);
  }
  if (patterns[7][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[8][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[9][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[10][0]) {
    wabern(farbmuster1zuBlend);
  }
  if (patterns[11][0]) {
    wabern(farbmuster1zuBlend);
  }
  if (patterns[12][0]) {
    fade(farbmuster1zuBlend);
  }
  if (patterns[13][0]) {
    fade(farbmuster1zuBlend);
  }




  if (patterns[0][1]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[1][1]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[2][1]) {
    wabern(farbmuster2zuBlend);
  }
  if (patterns[3][1]) {
    sinelon(farbmuster2zuBlend);
  }
  if (patterns[4][1]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[5][1]) {
    wabern(farbmuster2zuBlend);
  }
  if (patterns[6][1]) {
    wabern(farbmuster2zuBlend);
  }
  if (patterns[7][0]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[8][0]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[9][0]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[10][0]) {
    wabern(farbmuster2zuBlend);
  }
  if (patterns[11][0]) {
    wabern(farbmuster2zuBlend);
  }
  if (patterns[12][0]) {
    fade(farbmuster2zuBlend);
  }
  if (patterns[13][0]) {
    fade(farbmuster2zuBlend);
  }

}

void mischePufferLedsOrg() {

  if (mischeFarbmusterLeds1  == 60) {
    farbmuster1Wechseln = true;
    changePatterns();
  } else {
    farbmuster1WechselnErfolgt = false;
  }

  if (mischeFarbmusterLeds1 == 192) {
    farbmuster1Wechseln = false;
    changePatterns();
  } else {
    farbmuster1WechselnErfolgt = false;
  }
  setzeMuster();
}

void mischeAnzeigeLeds() {
  mischePufferLedsOrg();
  CHSV spectrumcolor;

  for (int i = 0; i < NUM_LEDS; i++) {                        
    anzeigeLeds[i] = blend( farbmuster1zuBlend[i], farbmuster2zuBlend[i], sin8(mischeFarbmusterLeds1 ));
  }
}

void zeigeFarben() {
  FastLED.show();
}


void musterRotation() {

    if (coinTimer < 20) {
      coinTimer += 5;
    }
    Serial.println(mischeFarbmusterLeds1);

    mischeFarbmusterLeds1++;
    rotationFlagFalse = false;
    rotationFlagTrue = false;
    rotateFlag = false;

}


void readButtons() {

  coinState = digitalRead(coinPin);
  rotationState = digitalRead(rotationPin);

  if (rotationState == HIGH) {
    rotationFlagTrue = true;
  } else {
    rotationFlagFalse = true;
  }



  if (coinState == HIGH) {
    if (coinTimer < 30) {
      coinFlag = true;
      coinTimer = 30;
      timerCounter = 0;
    }
  } else {
    coinFlag = false;
  }
}


void loop()
{

  readButtons();

  EVERY_N_MILLISECONDS(20)
  {
    sinus++;
    rotateFlag = true;
    musterRotation();
  }

  EVERY_N_MILLISECONDS(1000 / framesPerSecond)
  {
    if (playableFlag) {
      mischeAnzeigeLeds();
    } else {
      schlafen();
    }
    gHue++;
    FastLED.show();
  }

  EVERY_N_SECONDS(1)
  {
    if (coinTimer > 0) {
      coinTimer--;
      timerCounter++;
      playableFlag = true;
    } else {
      playableFlag = false;
    }

  }
}
void setup() {
  delay( 1000 ); // power-up safety delay
  Serial.begin(115200);
  pinMode(coinPin, INPUT);
  pinMode(rotationPin, INPUT);
  setupPuk();
  setupPatternsOrg();
  test1=1;
  test2=1;
}



void setupPuk() {


  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(anzeigeLeds, NUM_LEDS).setCorrection( TypicalSMD5050 );
  FastLED.setTemperature( TEMPERATURE );

}
  int pos = beatsin16( 30, 0, NUM_LEDS );

Ups. Besser wäre wohl

  int pos = beatsin16( 30, 0, NUM_LEDS-1 );

Also ein versteckter Overflow des Indexes eines Arrays.
Versteckt weil die Variable "leds[]" in der Bibliothek definiert wird und nicht in Sketch.

Grüße Uwe

Das klingt logisch Whandall, aber im FastLED Beispiel ist es auch so implementiert. Ich probiere es heute Abend noch einmal aus und guck mal was beatsin als Werte liefert.

void sinelon() {                                              // a colored dot sweeping back and forth, with fading trails
  
  fadeToBlackBy( leds, NUM_LEDS, thisfade);
  int pos1 = beatsin16(thisbeat,0,NUM_LEDS);
  int pos2 = beatsin16(thatbeat,0,NUM_LEDS);

  leds[(pos1+pos2)/2] += ColorFromPalette(currentPalette, myhue++, thisbri, currentBlending);

} // sinelon()

Uwe wie meinst Du das, dass die led[] Variable in der Bibliothek definiert wird?
Die Variable ist eine lokale der Funktion.
Es wird farbmuster1zuBlend oder farbmuster2zuBlend als Pointer übergeben und so die Werte aus der Funktion sinelon, den farbmustern zugewiesen.

Beste Grüße
Paul

leds[pos] +=

ist nicht

leds[(pos1+pos2)/2] +=

Im ersten Fall genügt der eine Grenzwert, im zweiten müssten beide gleichzeitig auftreten.

ArduinoGuy255:
Uwe wie meinst Du das, dass die led[] Variable in der Bibliothek definiert wird?
Die Variable ist eine lokale der Funktion.
Es wird farbmuster1zuBlend oder farbmuster2zuBlend als Pointer übergeben und so die Werte aus der Funktion sinelon, den farbmustern zugewiesen.

Beste Grüße
Paul

Wo wird das Array definiert im Sinn wo wird definiert wieviele Elemente das Array hat?
Du kannst schon mittels eines Pointers zugreifen aber irgendwo muß definiert werden weiviel Speicher dem Array reserviert wird und darum wo das RAM für anderes benutzt werden kann.
Grüße Uwe

Whandall das war es!
Klassischer Buffer Overflow.

Besten Dank für die Unterstützung!

Danke für die Rückmeldung.

Wenn du jetzt noch den fertigen funktionierenden Sketch posten könntest,
könnten den andere einfacher als Beispiel nutzen.