HILFE Arduino Light Animation ALA

hallo ich habe ein kleines Problem, ich möchte 300 led s ws2812 an mein arduino anschließen alerdings ist komischerweise bei 150 leds schluss da nimmt der ardu im serialmonitor keine befehle mehr an.

ich hoffe dafür gibts eine lösung danke schonmal im voraus matze

Wie wäre es mit Deinem Sketch in Codetags? Was verstehst Du unter "nimmt keine Befehle mehr an"?

Gru0 Tommy

Schaltplan, Echtbild und Sketch bitte.

Insbesondere die Stromversorgung des Streifens ist interessant.

Hi

300 LEDs (zwei Ketten a 150 LEDs oder eben 2 Stk 5 Meter a 30 LED/m) gehen an Uno/Nano ohne größere Probleme.
Es sei - Dein Uno/Nano muß nebenher noch die Mondlandung unter Zuhilfenahme von Strings berechnen - dann wird’s langsam knapp.

MfG

also erstmal vielen dank für die Anteilnahme :wink:

mein code ist eigentlich orginal von der ala library außer das ich die anzahl der pixels auf 300 gestellt habe.

///////////////////////////////////////////////////////////////////////////////////////////
//
// ALA library example: RgbStripSerial
//
// Example to demonstrate how to control WS2812 RGB LED strip lighting and animations
// sending AT commands through the serial port.
//
// Web page: http://yaab-arduino.blogspot.com/p/ala-example-rgbstripserial.html
//
///////////////////////////////////////////////////////////////////////////////////////////

#include <AlaLedRgb.h>
#include <stdlib.h>

#define WS2811_PIN 6    // WS2811 control connected to pin 6
#define NUM_PIXELS 150   // number of leds in the LED strip
#define CMDBUFSIZE 16   // buffer size for receiving serial commands

AlaLedRgb rgbStrip;
char cmdBuffer[CMDBUFSIZE];

// global settings and initial values
int animation = ALA_OFF;
AlaColor color = 0xdddddd;
AlaColor white = 0xffffff;
AlaPalette palette = alaPalNull;
int paletteId=0;
float brightness = 0.3;
long duration = 5000;


void setup()
{
 rgbStrip.initWS2812(NUM_PIXELS, WS2811_PIN);
 rgbStrip.setBrightness(color.scale(brightness));
 rgbStrip.setAnimation(animation, duration, color);
 
 Serial.begin(9600);

 Serial.println("Welcome to ALA RgbStripSerial example");
 Serial.println("A=[animation code] Set the animation. See https://github.com/bportaluri/ALA/blob/master/src/AlaLed.h");
 Serial.println("B=[brightness]     Set the brightness [0-100]");
 Serial.println("D=[duration]       Set the duration in milliseconds of the animation cycle");
 Serial.println("C=[color]          Set the color (hexadecimal RGB representation ex. 0xE8A240)");
 Serial.println("P=[palette]        Set the palette.");
}

void loop()
{

 if (Serial.available())
 {
   int charsRead;
   charsRead = Serial.readBytesUntil('\n', cmdBuffer, sizeof(cmdBuffer) - 1);  //read entire line
   cmdBuffer[charsRead] = '\0';       // Make it a C string
   Serial.print(">"); Serial.println(cmdBuffer);
   
   if(cmdBuffer[1] != '=' || strlen(cmdBuffer)<3)
   {
     Serial.println("KO");
   }
   else
   {
     switch(toupper(cmdBuffer[0]))
     {
     case 'A':
       animation = atoi(&cmdBuffer[2]);
       Serial.println("OK");
       break;
     case 'B':
       brightness = atoi(&cmdBuffer[2]);
       rgbStrip.setBrightness(white.scale((float)brightness / 100));
       Serial.println("OK");
       break;
     case 'C':
       color = strtol(&cmdBuffer[2], 0, 16);
       palette=alaPalNull;
       Serial.println("OK");
       break;
     case 'D':
       duration = atol(&cmdBuffer[2]);
       Serial.println("OK");
       break;
     case 'P':
       paletteId = atoi(&cmdBuffer[2]);
       switch(paletteId)
       {
       case 0:
         palette=alaPalNull;
         break;
       case 1:
         palette=alaPalRgb;
         break;
       case 2:
         palette=alaPalRainbow;
         break;
       case 3:
         palette=alaPalParty;
         break;
       case 4:
         palette=alaPalHeat;
         break;
       case 5:
         palette=alaPalFire;
         break;
       case 6:
         palette=alaPalCool;
         break;
       }
       break;
     
     default:
       Serial.println("KO");
     }
     
     if(palette==alaPalNull)
       rgbStrip.setAnimation(animation, duration, color);
     else
       rgbStrip.setAnimation(animation, duration, palette);
   }
 }

 rgbStrip.runAnimation();
}

geh davon aus, dass der original-Sketch funktioniert.
Ergo:

Schaltplan und Echtbild fehlt.

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

hi sorry das ist hier mein erster post ich sehe hier im forum leider keinen editor.

und NOIASCA der script ist orginal hab die led anzahl nur auf 300 gesetzt da ich einen 5 m stripe habe

Gehe auf Deinen Beitrag. Da ist rechts unten zu sehen: Quote, Quick Edit, More
Wähle More und dann Modify. Dann hast Du über dem Editierfenster die Symbole.

Gruß Tommy

sorry wie doof hab ich nicht gesehen *lach *

so aber zurück zum thema wie schaffe ich es alle 300 leds anzusteuern ...

Indem Du erst mal die angeforderten Infos gibst. Welches Netzteil verwendest Du für die 300 LED?

300 * 60 mA = 18 A Die muss das Netzteil sicher bringen können.

Gruß Tommy

tommy das weis ich schon alles netzteil und so ist nicht wichtig das problem ist das ich im serial monitor die befehle nicht eingeben kann wenn ich 3oo leds in den script schreibe spielt also keine rolle ob leds angeschlossen sind oder nicht

Ich hatte Dich auch gefragt, was Du unter Befehle verstehst.

Aber wenn das alles nicht relevant ist, sollte es ja funktionieren.

Gruß Tommy

Welcome to ALA RgbStripSerial example
A=[animation code] Set the animation. See https://github.com/bportaluri/ALA/blob/master/src/AlaLed.h
B=[brightness]     Set the brightness [0-100]
D=[duration]       Set the duration in milliseconds of the animation cycle
C=[color]          Set the color (hexadecimal RGB representation ex. 0xE8A240)
P=[palette]        Set the palette.

das ist die ausgabe im serial monitor

wenn ich jetzt a=251 ALSO ANIMATION nr 251 eingebe kommt kein ok bei dem wert von 300 leds
bei dem wert von 150 wird der befehl ohne weiteres ausgeführt und es erscheint im serial monitor unter dem wecome text ein ok A=251

Für dich sind Schaltplan und Echtbild vieleicht nicht relevant, für mich schon, da wir hier zu oft an Hardware-Unzulänglichkeiten des Threadowners rumdoktern und nach Tagen kommt dann raus dass diese oder jene Leitung fehlt.

Also wenn du auf dein Lösung auch Tage warten kannst, lass Schaltplan und Echtbild ruhig weg.

Was gibt der Sketch für Speicherbedarf aus wenn du mit 150 kompilierst, was bei 300?
kopiere die kompletten Zeile rein

Der Sketch verwendet xxBytes (xx%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden xxBytes (xx%) des dynamischen Speichers, xxBytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Ab welcher Pixel-Anzahl tritt das Problem auf? bei 151, 152, 153? und wie viel Speicher wird dann verbraucht?

300 WS2812 brauchen 900Byte RAM.
Jedes Serial.print("Text"); frißt auch RAM. abhilfe schafft das F-Makro: Serial.print(F("Text"));
Grüße Uwe

ja du ich verstehe dich vollkommen nur hab ich grad keine möglichkeit ein bild einzustellen *kein kabel * wie auch immer es ist definitiv kein verkabelungs problem

ausgabe ist

Der Sketch verwendet 23.396 Bytes (76%) des Programmspeicherplatzes. Das Maximum sind 30.720 Bytes.
Globale Variablen verwenden 916 Bytes (44%) des dynamischen Speichers, 1.132 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.

Ich habe gerade mal in Deine Lib rein geschaut. Die ist extrem in der Speicherverschwendung. Da bekommst Du keine 300 LED zum Laufen:

In AlaLedRgb.cpp
300 * 3 Bytes = 900 Bytes

void AlaLedRgb::initWS2812(int numLeds, byte pin, byte type)
{
    this->driver = ALA_WS2812;
    this->numLeds = numLeds;
    this->pins = 0;

    // allocate and clear leds array
    leds = (AlaColor *)malloc(3*numLeds);
    memset(leds, 0, 3*numLeds);

    neopixels = new Adafruit_NeoPixel(numLeds, pin, type);

    neopixels->begin();
}

in ExtNeoPixel.cpp
Je nach Typ 3 oder 4 * Anzahl-Led 3 * 300 = 900 Bytes oder bei 4Bytes = 1200

void Adafruit_NeoPixel::updateLength(uint16_t n) {
  if(pixels) free(pixels); // Free existing data (if any)

  // Allocate new data -- note: ALL PIXELS ARE CLEARED
  numBytes = n * ((wOffset == rOffset) ? 3 : 4);
  if((pixels = (uint8_t *)malloc(numBytes))) {
    memset(pixels, 0, numBytes);
    numLEDs = n;
  } else {
    numLEDs = numBytes = 0;
  }
}

Also 1800 oder 2100 Bytes nur für die LED-Arrays. Der ATMega328 hat 2048 Byte RAM. Da ist Ende der Fahnenstange.

Also mit dieser Lib und dem RAM wird das nix.

Gruß Tommy

Edit: Dieser Speicher wird Dir von der IDE nicht angezeigt, da der erst zur Laufzeit belegt wird.

danke uwe für den tip wie funktioniert das mit dem f makro geau

wie er schon schrieb

Serial.print(F("Text"));

F(

setzen bei ALLEN Serial.print Ausgaben mit reinem Fixtext. Kannst dir aber sparen wenn das Problem schon bei 154 auftritt, also musst du feststellen ab wann das Problem auftritt und ob dich die 200 byte da rausreißen.