Programm hängt sich auf

hallo

ich habe einen led Strip um meinen Tisch, den habe ich so programmiert das er nach dem Beat meiner musik leuchtet. Nur leider hängt sich das Programm nach ca 5-10 sekunden auf. Könnt ihr mir helfen?

Hier der code:

#include <Arduino.h>
#include <FastLED.h>

#define ledStrip 9
#define LED 80

unsigned int startLedR1 = 10;
unsigned int startLedR2 = 25;
unsigned int startLedL1 = 47;
unsigned int startLedL2 = 60;
//Colors
#define wave1c 100, 0, 255
#define wave2c 0, 0, 255
#define wave3c 0, 100, 255
#define wave4c 0, 200, 50
#define wave5c 0, 50, 200
#define black 0, 0, 0 
//stage loudness
const int stage1 = 6;
const int stage2 = 10;
const int stage3 = 15;
const int stage4 = 20;
const int stage5 = 25;
const int stage6 = 30;

//moving loudness
const int loundnessLeft = 9;
const int loundnessRight = 19;
//ini Stage1
unsigned int stage11;
unsigned int Stage11;
unsigned int stage12;
unsigned int Stage12;
unsigned int stage13;
unsigned int Stage13;
unsigned int stage14;
unsigned int Stage14;
//ini Stage2
unsigned int stage21;
unsigned int Stage21;
unsigned int stage22;
unsigned int Stage22;
unsigned int stage23;
unsigned int Stage23;
unsigned int stage24;
unsigned int Stage24;
//ini Stage3
unsigned int stage31;
unsigned int Stage31;
unsigned int stage32;
unsigned int Stage32;
unsigned int stage33;
unsigned int Stage33;
unsigned int stage34;
unsigned int Stage34;
//ini Stage 4
unsigned int stage41;
unsigned int Stage41;
unsigned int stage42;
unsigned int Stage42;
unsigned int stage43;
unsigned int Stage43;
unsigned int stage44;
unsigned int Stage44;
//ini Stage 5
unsigned int stage51;
unsigned int Stage51;
unsigned int stage52;
unsigned int Stage52;
unsigned int stage53;
unsigned int Stage53;
unsigned int stage54;
unsigned int Stage54;

//moving direction
bool Left = false;
bool Right = true;

unsigned int BeatLVL;
unsigned int sample;
unsigned int peakToPeak;

const int Window = 50;
const int sampleWindow = 10;                                   //Sample window width in mS (50 mS = 20Hz)


CRGB leds[LED];

void setup() 
{
 FastLED.addLeds<NEOPIXEL, ledStrip >(leds, LED);
 Serial.begin(9600);
 
}
void sensorLesen()
{
  
  unsigned long startMillis= millis();                           // Start of sample window
  peakToPeak = 0;                                                // peak-to-peak level

  unsigned int signalMax = 0;
  unsigned int signalMin = 1023;


                                                                 // collect data for 50 mS
  while (millis() - startMillis < sampleWindow)
  {
     sample = analogRead(4);
       
     if (sample < 1023)                                          // toss out spurious readings
     {
        if (sample > signalMax)
        {
           signalMax = sample;
        }
        else if (sample < signalMin)
        {
           signalMin = sample;
        }
     }
  }
  peakToPeak = signalMax - signalMin;                          // max - min = peak-peak amplitude
  
  Serial.println(peakToPeak);

  
     
  
}
void WriteLeds()
{
                                                              //Stage 1
  stage11 = startLedL1 + 1;
  Stage11 = startLedL1 - 1;
  stage12 = startLedL2 + 1;
  Stage12 = startLedL2 - 1;
  stage13 = startLedR1 + 1;
  Stage13 = startLedR1 - 1;
  stage14 = startLedR2 + 1;
  Stage14 = startLedR2 - 1;
                                                              //Stage 2
  stage21 = startLedL1 + 2;
  Stage21 = startLedL1 - 2;
  stage22 = startLedL2 + 2;
  Stage22 = startLedL2 - 2;
  stage23 = startLedR1 + 2;
  Stage23 = startLedR1 - 2;
  stage24 = startLedR2 + 2;
  Stage24 = startLedR2 - 2;
                                                              //Stage 3
  stage31 = startLedL1 + 3;
  Stage31 = startLedL1 - 3;
  stage32 = startLedL2 + 3;
  Stage32 = startLedL2 - 3;
  stage33 = startLedR1 + 3;
  Stage33 = startLedR1 - 3;
  stage34 = startLedR2 + 3;
  Stage34 = startLedR2 - 3;
                                                              //Stage 4
}
void writeLeds1()
{
  stage41 = startLedL1 + 4;
  Stage41 = startLedL1 - 4;
  stage42 = startLedL2 + 4;
  Stage42 = startLedL2 - 4;
  stage43 = startLedR1 + 4;
  Stage43 = startLedR1 - 4;
  stage44 = startLedR2 + 4;
  Stage44 = startLedR2 - 4;
                                                              //Stage 5
  stage51 = startLedL1 + 5;
  Stage51 = startLedL1 - 5;
  stage52 = startLedL2 + 5;
  Stage52 = startLedL2 - 5;
  stage53 = startLedR1 + 5;
  Stage53 = startLedR1 - 5;
  stage54 = startLedR2 + 5;
  Stage54 = startLedR2 - 5;
}
void waveOn()
{
  leds[startLedL1]= CRGB(100, 0, 255);
  leds[startLedL2]= CRGB(100, 0, 255);
  leds[startLedR1]= CRGB(100, 0, 255);
  leds[startLedR2]= CRGB(100, 0, 255);
  FastLED.show();
}
void right()
{
  if(Left == false)
  {
     if(Right == true)
     {
       //LEDS OFF
        leds[startLedL1]= CRGB(black);
        leds[startLedL2]= CRGB(black);
        leds[startLedR1]= CRGB(black);
        leds[startLedR2]= CRGB(black);

        leds[stage11]=CRGB(black);
        leds[Stage11]=CRGB(black);
        leds[stage12]=CRGB(black);
        leds[Stage12]=CRGB(black);
        leds[stage13]=CRGB(black);
        leds[Stage13]=CRGB(black);
        leds[stage14]=CRGB(black);
        leds[Stage14]=CRGB(black);

        leds[stage21]=CRGB(black);
        leds[Stage21]=CRGB(black);
        leds[stage22]=CRGB(black);
        leds[Stage22]=CRGB(black);
        leds[stage23]=CRGB(black);
        leds[Stage23]=CRGB(black);
        leds[stage24]=CRGB(black);
        leds[Stage24]=CRGB(black);

        leds[stage31]=CRGB(black);
        leds[Stage31]=CRGB(black);
        leds[stage32]=CRGB(black);
        leds[Stage32]=CRGB(black);
        leds[stage33]=CRGB(black);
        leds[Stage33]=CRGB(black);
        leds[stage34]=CRGB(black);
        leds[Stage34]=CRGB(black);

        startLedL1++;
        startLedL2++;
        startLedR1++;
        startLedR2++;
     }  
  } 
}
void left()
{
  if(Left == true)
  {
     if(Right == false)
     {
        //LEDS OFF
        leds[startLedL1]= CRGB(black);
        leds[startLedL2]= CRGB(black);
        leds[startLedR1]= CRGB(black);
        leds[startLedR2]= CRGB(black);

        leds[stage11]=CRGB(black);
        leds[Stage11]=CRGB(black);
        leds[stage12]=CRGB(black);
        leds[Stage12]=CRGB(black);
        leds[stage13]=CRGB(black);
        leds[Stage13]=CRGB(black);
        leds[stage14]=CRGB(black);
        leds[Stage14]=CRGB(black);

        leds[stage21]=CRGB(black);
        leds[Stage21]=CRGB(black);
        leds[stage22]=CRGB(black);
        leds[Stage22]=CRGB(black);
        leds[stage23]=CRGB(black);
        leds[Stage23]=CRGB(black);
        leds[stage24]=CRGB(black);
        leds[Stage24]=CRGB(black);

        leds[stage31]=CRGB(black);
        leds[Stage31]=CRGB(black);
        leds[stage32]=CRGB(black);
        leds[Stage32]=CRGB(black);
        leds[stage33]=CRGB(black);
        leds[Stage33]=CRGB(black);
        leds[stage34]=CRGB(black);
        leds[Stage34]=CRGB(black);

        startLedL1--;
        startLedL2--;
        startLedR1--;
        startLedR2--;
     }
  }
}
void Wave1()
{
        leds[stage11]=CRGB(wave1c);
        leds[Stage11]=CRGB(wave1c);
        leds[stage12]=CRGB(wave1c);
        leds[Stage12]=CRGB(wave1c);
        leds[stage13]=CRGB(wave1c);
        leds[Stage13]=CRGB(wave1c);
        leds[stage14]=CRGB(wave1c);
        leds[Stage14]=CRGB(wave1c);

        leds[stage21]=CRGB(black);
        leds[Stage21]=CRGB(black);
        leds[stage22]=CRGB(black);
        leds[Stage22]=CRGB(black);
        leds[stage23]=CRGB(black);
        leds[Stage23]=CRGB(black);
        leds[stage24]=CRGB(black);
        leds[Stage24]=CRGB(black);

        leds[stage31]=CRGB(black);
        leds[Stage31]=CRGB(black);
        leds[stage32]=CRGB(black);
        leds[Stage32]=CRGB(black);
        leds[stage33]=CRGB(black);
        leds[Stage33]=CRGB(black);
        leds[stage34]=CRGB(black);
        leds[Stage34]=CRGB(black);

        leds[stage41]=CRGB(black);
        leds[Stage41]=CRGB(black);
        leds[stage42]=CRGB(black);
        leds[Stage42]=CRGB(black);
        leds[stage43]=CRGB(black);
        leds[Stage43]=CRGB(black);
        leds[stage44]=CRGB(black);
        leds[Stage44]=CRGB(black);

        leds[stage51]=CRGB(black);
        leds[Stage51]=CRGB(black);
        leds[Stage52]=CRGB(black);
        leds[stage53]=CRGB(black);
        leds[Stage53]=CRGB(black);
        leds[stage54]=CRGB(black);
        leds[Stage54]=CRGB(black);
        FastLED.show();
}
void Wave2()
{
        leds[stage21]=CRGB(wave2c);
        leds[Stage21]=CRGB(wave2c);
        leds[stage22]=CRGB(wave2c);
        leds[Stage22]=CRGB(wave2c);
        leds[stage23]=CRGB(wave2c);
        leds[Stage23]=CRGB(wave2c);
        leds[stage24]=CRGB(wave2c);
        leds[Stage24]=CRGB(wave2c);

        leds[stage31]=CRGB(black);
        leds[Stage31]=CRGB(black);
        leds[stage32]=CRGB(black);
        leds[Stage32]=CRGB(black);
        leds[stage33]=CRGB(black);
        leds[Stage33]=CRGB(black);
        leds[stage34]=CRGB(black);
        leds[Stage34]=CRGB(black);

        leds[stage41]=CRGB(black);
        leds[Stage41]=CRGB(black);
        leds[stage42]=CRGB(black);
        leds[Stage42]=CRGB(black);
        leds[stage43]=CRGB(black);
        leds[Stage43]=CRGB(black);
        leds[stage44]=CRGB(black);
        leds[Stage44]=CRGB(black);

        leds[stage51]=CRGB(black);
        leds[Stage51]=CRGB(black);
        leds[Stage52]=CRGB(black);
        leds[stage53]=CRGB(black);
        leds[Stage53]=CRGB(black);
        leds[stage54]=CRGB(black);
        leds[Stage54]=CRGB(black);
        FastLED.show();
}
void Wave3()
{
        leds[stage31]=CRGB(wave3c);
        leds[Stage31]=CRGB(wave3c);
        leds[stage32]=CRGB(wave3c);
        leds[Stage32]=CRGB(wave3c);
        leds[stage33]=CRGB(wave3c);
        leds[Stage33]=CRGB(wave3c);
        leds[stage34]=CRGB(wave3c);
        leds[Stage34]=CRGB(wave3c);

        leds[stage41]=CRGB(black);
        leds[Stage41]=CRGB(black);
        leds[stage42]=CRGB(black);
        leds[Stage42]=CRGB(black);
        leds[stage43]=CRGB(black);
        leds[Stage43]=CRGB(black);
        leds[stage44]=CRGB(black);
        leds[Stage44]=CRGB(black);

        leds[stage51]=CRGB(black);
        leds[Stage51]=CRGB(black);
        leds[Stage52]=CRGB(black);
        leds[stage53]=CRGB(black);
        leds[Stage53]=CRGB(black);
        leds[stage54]=CRGB(black);
        leds[Stage54]=CRGB(black);
        FastLED.show();
}
void Wave4()
{
        leds[stage41]=CRGB(wave4c);
        leds[Stage41]=CRGB(wave4c);
        leds[stage42]=CRGB(wave4c);
        leds[Stage42]=CRGB(wave4c);
        leds[stage43]=CRGB(wave4c);
        leds[Stage43]=CRGB(wave4c);
        leds[stage44]=CRGB(wave4c);
        leds[Stage44]=CRGB(wave4c);

        leds[stage51]=CRGB(black);
        leds[Stage51]=CRGB(black);
        leds[Stage52]=CRGB(black);
        leds[stage53]=CRGB(black);
        leds[Stage53]=CRGB(black);
        leds[stage54]=CRGB(black);
        leds[Stage54]=CRGB(black);
        FastLED.show();
}
void Wave5()
{
        leds[stage51]=CRGB(wave5c);
        leds[Stage51]=CRGB(wave5c);
        leds[stage52]=CRGB(wave5c);
        leds[Stage52]=CRGB(wave5c);
        leds[stage53]=CRGB(wave5c);
        leds[Stage53]=CRGB(wave5c);
        leds[stage54]=CRGB(wave5c);
        leds[Stage54]=CRGB(wave5c);
        FastLED.show();
}
void endLed1()
{
//led 1
  if(startLedL1 == 0)
  {
     startLedL1 = 72;
  }
  if(startLedL1 == 72)
  {
     startLedL1 = 0;
  }
}
void endLed2()
{
  //led 2

  if(startLedL2 == 0)
  {
     startLedL2 = 72;
  }
  if(startLedL2 == 72)
  {
     startLedL2 = 0;
  }
}
void endLed3()
{
  //led 3
  if(startLedR1 == 0)
  {
     startLedR1 = 72;
  }
  if(startLedR1 == 72)
  {
     startLedR1 = 0;
  }
}
void endLed4()
{
  //led 4
  if(startLedR2 == 0)
  {
     startLedR2 = 72;
  }
  if(startLedR2 == 72)
  {
     startLedR2 = 0;
  }
}
void loop()
{
  sensorLesen();
  WriteLeds();
  writeLeds1();
  waveOn();
   if(peakToPeak == loundnessRight)
  {
     Right = true;
     Left = false;
     right();
  }
  if(peakToPeak == loundnessLeft)
  {
     Right= false;
     Left = true;
     left();
  }
  if(peakToPeak > stage1)
  {
     if(peakToPeak < stage6)
     {
        Wave1();
     }
  }
  if(peakToPeak > stage2)
  {
     if(peakToPeak < stage6)
     {
        Wave2();
     }
  }
  if(peakToPeak > stage3)
  {
     if(peakToPeak < stage6)
     {
        Wave3();
     }
  }
  if(peakToPeak > stage4)
  {
     if(peakToPeak < stage6)
     {
        Wave4();
     }
  }
  if(peakToPeak > stage5)
  {
     if(peakToPeak < stage6)
     {
        Wave5();
     }
  }
  endLed1();
  endLed2();
  endLed3();
  endLed4();
  
}

TL;DR

try that here:

https://forum.arduino.cc/index.php?board=31.0

@Zkall
Was ist das für ein Led-Stripe, den du programmieren kannst ?
Poste mal einen Hyperlink deines programmierbaren Stripes.

Und setze deinen Bandwurmsketch in Code-Tags, damit dieser überhaupt ein wenig lesbar ist.
So kann man sich das nicht antun......

Und beschreibe mal an welcher Stelle sich dein Sketch aufhängt.

void endLed1()
{
  //led 1
  if (startLedL1 == 0)
  {
    startLedL1 = 72;
  }
  if (startLedL1 == 72)
  {
    startLedL1 = 0;
  }
}

Das ergibt keinen Sinn: 0 -> 72 -> 0

Oder?

danke für die antworten :slight_smile:

des ist einer bei dem ich jede led einzeln ansteuern kann.

wie macht man code-tags?

agmue:
des ist wenn die zum anfang vom tischende ist, das die an des andere tischende springt und umgekehrt.

@Zkall
Was passiert denn, wenn Led1 Null ist?
Die erste IF greift, Led1 ist jetzt 72.
Nun greift die 2.te IF, Led1 ist jetzt wieder 0.
Somit wird 'Led1' auf Null gesetzt, wenn zuvor 0 oder 72 war.
Und NICHT abwechselnd.

...Dein Code ... nur mit eckigen Klammern (oder der </>-Button im Antwort-Fenster)

MfG

Ich kann mir nicht helfen, aber sowas finde ich ein klein wenig unübersichtlich

unsigned int stage11;
unsigned int Stage11;

genauso wie Zuweisungsorgien wie in void Wave1().
Bist du sicher, das du keine out-of-bounds Zugriffe auf das Array produzierst?

Zkall:
agmue:
des ist wenn die zum anfang vom tischende ist, das die an des andere tischende springt und umgekehrt.

Deine Absicht ist mir klar, nur tut Dein Code das nicht.

Zkall:
Nur leider hängt sich das Programm nach ca 5-10 sekunden auf.

So ein Laufzeitfehler tritt beispielsweise auf, wenn Feldgrenzen überschritten werden. Daher suche ich in diese Richtung.

Du möchtest das verhindern, aber leider tut Dein Code das an verschiedenen Stellen nicht.

Wenn Du

leds[startLedL1] = CRGB(100, 0, 255);

ersetzt durch

 saveLed(startLedL1, CRGB(100, 0, 255));

...

void saveLed(uint16_t led, CRGB farbe)
{
  if (led < LED) leds[led] = farbe;
}

hast Du die Feldgrenzen im Griff, Dein Programm stürzt nicht ab. Falsche Berechnungen mußt Du natürlich dennoch korrigieren.

Danke für die hilfreichen antworten

ich werde den Code dann mal überarbeiten.