Projekt ARGB LEDs selbst steuern - Arduino Nano

RaptorTP

Fleet Admiral
Registriert
Jan. 2006
Beiträge
18.078
Hallo zusammen,

ich habe endlich mal einen Code der mir es ermöglichst alle LEDs im Rechner so anzupassen wie ich es will.
Einfach so. Ohne irgend eine blöde SW.

Code:
#include <FastLED.h>

#define LED_PIN1     3  //strip1
#define NUM_LEDS1    30

#define LED_PIN2     4  //strip2
#define NUM_LEDS2    30

#define LED_PIN3     5  //strip3
#define NUM_LEDS3    30

#define LED_PIN4     6  //strip4
#define NUM_LEDS4    30

#define LED_PIN5     7  //strip5
#define NUM_LEDS5    30

#define LED_PIN6     8  //strip6
#define NUM_LEDS6    30

#define LED_PIN7     9  //strip7
#define NUM_LEDS7    30

#define LED_PIN8     10  //strip8
#define NUM_LEDS8    30

#define BRIGHTNESS   30
#define LED_TYPE    WS2812B
#define COLOR_ORDER RGB
CRGB ledsA[NUM_LEDS1];
CRGB ledsB[NUM_LEDS2];
CRGB ledsC[NUM_LEDS3];
CRGB ledsD[NUM_LEDS4];
CRGB ledsE[NUM_LEDS5];
CRGB ledsF[NUM_LEDS6];
CRGB ledsG[NUM_LEDS7];
CRGB ledsH[NUM_LEDS8];

#define UPDATES_PER_SECOND 500


CRGBPalette16 currentPalette;
TBlendType    currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
    delay( 3000 ); // power-up safety delay
    FastLED.addLeds<LED_TYPE, LED_PIN1, COLOR_ORDER>(ledsA, NUM_LEDS1).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN2, COLOR_ORDER>(ledsB, NUM_LEDS2).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN3, COLOR_ORDER>(ledsC, NUM_LEDS3).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN4, COLOR_ORDER>(ledsD, NUM_LEDS4).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN5, COLOR_ORDER>(ledsE, NUM_LEDS5).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN6, COLOR_ORDER>(ledsF, NUM_LEDS6).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN7, COLOR_ORDER>(ledsG, NUM_LEDS7).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<LED_TYPE, LED_PIN8, COLOR_ORDER>(ledsH, NUM_LEDS8).setCorrection( TypicalLEDStrip );
    FastLED.setBrightness( BRIGHTNESS );
    
    currentPalette = RainbowColors_p;
    currentBlending = LINEARBLEND;
}


void loop()
{
    //ChangePalettePeriodically();
    
    //static uint8_t startIndex = 0;
    //startIndex = startIndex + 1; /* motion speed */
    
    //FillLEDsFromPaletteColors( startIndex);
    
    //strip1
    ledsA[0] = CRGB(0,255,255);
    ledsA[1] = CRGB(0,255,255);
    ledsA[2] = CRGB(0,255,255);
    ledsA[3] = CRGB(0,255,255);
    ledsA[4] = CRGB(0,255,255);
    ledsA[5] = CRGB(0,0,255);
    ledsA[6] = CRGB(255,0,0);
    ledsA[7] = CRGB(0,255,0);
    ledsA[8] = CRGB(0,0,255);
    ledsA[9] = CRGB(255,0,0);
    ledsA[10] = CRGB(0,255,0);
    ledsA[11] = CRGB(0,0,255);
    ledsA[12] = CRGB(255,0,0);
    ledsA[13] = CRGB(0,255,0);
    ledsA[14] = CRGB(0,0,255);
    ledsA[15] = CRGB(255,0,0);
    ledsA[16] = CRGB(0,255,0);
    ledsA[17] = CRGB(0,0,255);
    ledsA[18] = CRGB(255,0,0);
    ledsA[19] = CRGB(0,255,0);
    ledsA[20] = CRGB(0,0,255);
    ledsA[21] = CRGB(0,255,0);
    ledsA[22] = CRGB(0,0,255);
    ledsA[23] = CRGB(255,0,0);
    ledsA[24] = CRGB(0,255,0);
    ledsA[25] = CRGB(0,0,255);
    ledsA[26] = CRGB(255,0,0);
    ledsA[27] = CRGB(0,255,0);
    ledsA[28] = CRGB(0,0,255);
    ledsA[29] = CRGB(255,0,0);
    ledsA[30] = CRGB(0,255,0);

    //strip2
    ledsB[0] = CRGB(0,255,255);
    ledsB[1] = CRGB(0,255,255);
    ledsB[2] = CRGB(0,255,255);
    ledsB[3] = CRGB(0,255,255);
    ledsB[4] = CRGB(0,255,255);
    ledsB[5] = CRGB(0,255,255);
    ledsB[6] = CRGB(0,255,255);
    ledsB[7] = CRGB(0,255,0);
    ledsB[8] = CRGB(0,0,255);
    ledsB[9] = CRGB(255,0,0);
    ledsB[10] = CRGB(0,255,0);
    ledsB[11] = CRGB(0,0,255);
    ledsB[12] = CRGB(255,0,0);
    ledsB[13] = CRGB(0,255,0);
    ledsB[14] = CRGB(0,255,255);
    ledsB[15] = CRGB(255,0,0);
    ledsB[16] = CRGB(0,255,255);
    ledsB[17] = CRGB(0,0,255);
    ledsB[18] = CRGB(255,0,0);
    ledsB[19] = CRGB(0,255,255);
    ledsB[20] = CRGB(0,0,255);
    ledsB[21] = CRGB(0,255,0);
    ledsB[22] = CRGB(0,255,255);
    ledsB[23] = CRGB(255,0,0);
    ledsB[24] = CRGB(0,255,0);
    ledsB[25] = CRGB(0,0,255);
    ledsB[26] = CRGB(255,0,0);
    ledsB[27] = CRGB(0,255,0);
    ledsB[28] = CRGB(0,0,255);
    ledsB[29] = CRGB(255,0,0);
    ledsB[30] = CRGB(0,255,0);

    //strip3
    ledsC[0] = CRGB(255,255,255);
    ledsC[1] = CRGB(255,255,255);
    ledsC[2] = CRGB(0,255,255);
    ledsC[3] = CRGB(0,255,255);
    ledsC[4] = CRGB(0,255,255);
    ledsC[5] = CRGB(0,255,255);
    ledsC[6] = CRGB(0,255,255);
    ledsC[7] = CRGB(0,255,0);
    ledsC[8] = CRGB(0,0,255);
    ledsC[9] = CRGB(255,0,0);
    ledsC[10] = CRGB(0,255,0);
    ledsC[11] = CRGB(0,0,255);
    ledsC[12] = CRGB(255,0,0);
    ledsC[13] = CRGB(0,255,0);
    ledsC[14] = CRGB(0,255,255);
    ledsC[15] = CRGB(255,0,0);
    ledsC[16] = CRGB(0,255,255);
    ledsC[17] = CRGB(0,0,255);
    ledsC[18] = CRGB(255,0,0);
    ledsC[19] = CRGB(0,255,255);
    ledsC[20] = CRGB(0,0,255);
    ledsC[21] = CRGB(0,255,0);
    ledsC[22] = CRGB(0,255,255);
    ledsC[23] = CRGB(255,0,0);
    ledsC[24] = CRGB(0,255,0);
    ledsC[25] = CRGB(0,0,255);
    ledsC[26] = CRGB(255,0,0);
    ledsC[27] = CRGB(0,255,0);
    ledsC[28] = CRGB(0,0,255);
    ledsC[29] = CRGB(255,0,0);
    ledsC[30] = CRGB(0,255,0);

    //strip4
    ledsD[0] = CRGB(0,255,255);
    ledsD[1] = CRGB(0,255,255);
    ledsD[2] = CRGB(0,255,255);
    ledsD[3] = CRGB(0,255,255);
    ledsD[4] = CRGB(0,255,255);
    ledsD[5] = CRGB(0,255,255);
    ledsD[6] = CRGB(0,255,255);
    ledsD[7] = CRGB(0,255,0);
    ledsD[8] = CRGB(0,0,255);
    ledsD[9] = CRGB(255,0,0);
    ledsD[10] = CRGB(0,255,0);
    ledsD[11] = CRGB(0,0,255);
    ledsD[12] = CRGB(255,0,0);
    ledsD[13] = CRGB(0,255,0);
    ledsD[14] = CRGB(0,255,255);
    ledsD[15] = CRGB(255,0,0);
    ledsD[16] = CRGB(0,255,255);
    ledsD[17] = CRGB(0,0,255);
    ledsD[18] = CRGB(255,0,0);
    ledsD[19] = CRGB(0,255,255);
    ledsD[20] = CRGB(0,0,255);
    ledsD[21] = CRGB(0,255,0);
    ledsD[22] = CRGB(0,255,255);
    ledsD[23] = CRGB(255,0,0);
    ledsD[24] = CRGB(0,255,0);
    ledsD[25] = CRGB(0,0,255);
    ledsD[26] = CRGB(255,0,0);
    ledsD[27] = CRGB(0,255,0);
    ledsD[28] = CRGB(0,0,255);
    ledsD[29] = CRGB(255,0,0);
    ledsD[30] = CRGB(0,255,0);

    //strip5
    ledsE[0] = CRGB(255,255,255);
    ledsE[1] = CRGB(255,255,255);
    ledsE[2] = CRGB(0,255,255);
    ledsE[3] = CRGB(0,255,255);
    ledsE[4] = CRGB(0,255,255);
    ledsE[5] = CRGB(0,255,255);
    ledsE[6] = CRGB(0,255,255);
    ledsE[7] = CRGB(0,255,0);
    ledsE[8] = CRGB(0,0,255);
    ledsE[9] = CRGB(255,0,0);
    ledsE[10] = CRGB(0,255,0);
    ledsE[11] = CRGB(0,0,255);
    ledsE[12] = CRGB(255,0,0);
    ledsE[13] = CRGB(0,255,0);
    ledsE[14] = CRGB(0,255,255);
    ledsE[15] = CRGB(255,0,0);
    ledsE[16] = CRGB(0,255,255);
    ledsE[17] = CRGB(0,0,255);
    ledsE[18] = CRGB(255,0,0);
    ledsE[19] = CRGB(0,255,255);
    ledsE[20] = CRGB(0,0,255);
    ledsE[21] = CRGB(0,255,0);
    ledsE[22] = CRGB(0,255,255);
    ledsE[23] = CRGB(255,0,0);
    ledsE[24] = CRGB(0,255,0);
    ledsE[25] = CRGB(0,0,255);
    ledsE[26] = CRGB(255,0,0);
    ledsE[27] = CRGB(0,255,0);
    ledsE[28] = CRGB(0,0,255);
    ledsE[29] = CRGB(255,0,0);
    ledsE[30] = CRGB(0,255,0);

    //strip6
    ledsF[0] = CRGB(255,255,255);
    ledsF[1] = CRGB(255,255,255);
    ledsF[2] = CRGB(0,255,255);
    ledsF[3] = CRGB(0,255,255);
    ledsF[4] = CRGB(0,255,255);
    ledsF[5] = CRGB(0,255,255);
    ledsF[6] = CRGB(0,255,255);
    ledsF[7] = CRGB(0,255,0);
    ledsF[8] = CRGB(0,0,255);
    ledsF[9] = CRGB(255,0,0);
    ledsF[10] = CRGB(0,255,0);
    ledsF[11] = CRGB(0,0,255);
    ledsF[12] = CRGB(255,0,0);
    ledsF[13] = CRGB(0,255,0);
    ledsF[14] = CRGB(0,255,255);
    ledsF[15] = CRGB(255,0,0);
    ledsF[16] = CRGB(0,255,255);
    ledsF[17] = CRGB(0,0,255);
    ledsF[18] = CRGB(255,0,0);
    ledsF[19] = CRGB(0,255,255);
    ledsF[20] = CRGB(0,0,255);
    ledsF[21] = CRGB(0,255,0);
    ledsF[22] = CRGB(0,255,255);
    ledsF[23] = CRGB(255,0,0);
    ledsF[24] = CRGB(0,255,0);
    ledsF[25] = CRGB(0,0,255);
    ledsF[26] = CRGB(255,0,0);
    ledsF[27] = CRGB(0,255,0);
    ledsF[28] = CRGB(0,0,255);
    ledsF[29] = CRGB(255,0,0);
    ledsF[30] = CRGB(0,255,0);

    //strip7
    ledsG[0] = CRGB(255,255,255);
    ledsG[1] = CRGB(255,255,255);
    ledsG[2] = CRGB(0,255,255);
    ledsG[3] = CRGB(0,255,255);
    ledsG[4] = CRGB(0,255,255);
    ledsG[5] = CRGB(0,255,255);
    ledsG[6] = CRGB(0,255,255);
    ledsG[7] = CRGB(0,255,0);
    ledsG[8] = CRGB(0,0,255);
    ledsG[9] = CRGB(255,0,0);
    ledsG[10] = CRGB(0,255,0);
    ledsG[11] = CRGB(0,0,255);
    ledsG[12] = CRGB(255,0,0);
    ledsG[13] = CRGB(0,255,0);
    ledsG[14] = CRGB(0,255,255);
    ledsG[15] = CRGB(255,0,0);
    ledsG[16] = CRGB(0,255,255);
    ledsG[17] = CRGB(0,0,255);
    ledsG[18] = CRGB(255,0,0);
    ledsG[19] = CRGB(0,255,255);
    ledsG[20] = CRGB(0,0,255);
    ledsG[21] = CRGB(0,255,0);
    ledsG[22] = CRGB(0,255,255);
    ledsG[23] = CRGB(255,0,0);
    ledsG[24] = CRGB(0,255,0);
    ledsG[25] = CRGB(0,0,255);
    ledsG[26] = CRGB(255,0,0);
    ledsG[27] = CRGB(0,255,0);
    ledsG[28] = CRGB(0,0,255);
    ledsG[29] = CRGB(255,0,0);
    ledsG[30] = CRGB(0,255,0);

    //strip8
    ledsH[0] = CRGB(255,255,255);
    ledsH[1] = CRGB(255,255,255);
    ledsH[2] = CRGB(0,255,255);
    ledsH[3] = CRGB(0,255,255);
    ledsH[4] = CRGB(0,255,255);
    ledsH[5] = CRGB(0,255,255);
    ledsH[6] = CRGB(0,255,255);
    ledsH[7] = CRGB(0,255,0);
    ledsH[8] = CRGB(0,0,255);
    ledsH[9] = CRGB(255,0,0);
    ledsH[10] = CRGB(0,255,0);
    ledsH[11] = CRGB(0,0,255);
    ledsH[12] = CRGB(255,0,0);
    ledsH[13] = CRGB(0,255,0);
    ledsH[14] = CRGB(0,255,255);
    ledsH[15] = CRGB(255,0,0);
    ledsH[16] = CRGB(0,255,255);
    ledsH[17] = CRGB(0,0,255);
    ledsH[18] = CRGB(255,0,0);
    ledsH[19] = CRGB(0,255,255);
    ledsH[20] = CRGB(0,0,255);
    ledsH[21] = CRGB(0,255,0);
    ledsH[22] = CRGB(0,255,255);
    ledsH[23] = CRGB(255,0,0);
    ledsH[24] = CRGB(0,255,0);
    ledsH[25] = CRGB(0,0,255);
    ledsH[26] = CRGB(255,0,0);
    ledsH[27] = CRGB(0,255,0);
    ledsH[28] = CRGB(0,0,255);
    ledsH[29] = CRGB(255,0,0);
    ledsH[30] = CRGB(0,255,0);
    
    FastLED.show();
    FastLED.delay(500 / UPDATES_PER_SECOND);
}

void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
    uint8_t brightness = 255;
    
    for( int i = 0; i < NUM_LEDS1; i++) {
        ledsA[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 0;
    }
}


void ChangePalettePeriodically()
{
    uint8_t secondHand = (millis() / 1000) % 60;
    static uint8_t lastSecond = 99;
    
    if( lastSecond != secondHand) {
        lastSecond = secondHand;
        if( secondHand ==  0)  { currentPalette = RainbowColors_p;         currentBlending = LINEARBLEND; }
        if( secondHand == 10)  { currentPalette = RainbowStripeColors_p;   currentBlending = NOBLEND;  }
        if( secondHand == 15)  { currentPalette = RainbowStripeColors_p;   currentBlending = LINEARBLEND; }
        if( secondHand == 20)  { SetupPurpleAndGreenPalette();             currentBlending = LINEARBLEND; }
        if( secondHand == 25)  { SetupTotallyRandomPalette();              currentBlending = LINEARBLEND; }
        if( secondHand == 30)  { SetupBlackAndWhiteStripedPalette();       currentBlending = NOBLEND; }
        if( secondHand == 35)  { SetupBlackAndWhiteStripedPalette();       currentBlending = LINEARBLEND; }
        if( secondHand == 40)  { currentPalette = CloudColors_p;           currentBlending = LINEARBLEND; }
        if( secondHand == 45)  { currentPalette = PartyColors_p;           currentBlending = LINEARBLEND; }
        if( secondHand == 50)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;  }
        if( secondHand == 55)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; }
    }
}

// This function fills the palette with totally random colors.
void SetupTotallyRandomPalette()
{
    for( int i = 0; i < 16; i++) {
        currentPalette[i] = CHSV( 255, 0, 0);
    }
}

void SetupBlackAndWhiteStripedPalette()
{
    // 'black out' all 16 palette entries...
    fill_solid( currentPalette, 16, CRGB::Black);
    // and set every fourth one to white.
    currentPalette[0] = CRGB::White;
    currentPalette[4] = CRGB::White;
    currentPalette[8] = CRGB::White;
    currentPalette[12] = CRGB::White;
    
}

// This function sets up a palette of purple and green stripes.
void SetupPurpleAndGreenPalette()
{
    CRGB purple = CHSV( HUE_PURPLE, 255, 255);
    CRGB green  = CHSV( HUE_GREEN, 255, 255);
    CRGB black  = CRGB::Black;
    
    currentPalette = CRGBPalette16(
                                   green,  green,  black,  black,
                                   purple, purple, black,  black,
                                   green,  green,  black,  black,
                                   purple, purple, black,  black );
}


const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
    CRGB::Red,
    CRGB::Gray, // 'white' is too bright compared to red and blue
    CRGB::Blue,
    CRGB::Black,
    
    CRGB::Red,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Black,
    
    CRGB::Red,
    CRGB::Red,
    CRGB::Gray,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Blue,
    CRGB::Black,
    CRGB::Black
};

Arduino einmal konfigurieren - alles LEDs so ansteuern wie man das möchte.
Kompilieren, hochladen, fertig.

Auch farbliche Anpassungen zwischen den Stripes sind somit kein Problem.
Soweit, so gut.

Ich habe bereits man Test-Stripes aus alten Phanteks HALO rausgeschraubt und angeschlossen.

1673812248485.png


Jetzt aber nochmal eine Frage seitens der Verdrahtung:

Ich hatte erst alles direkt verdrahtet. Also wirklich einfach vom Arduino Nano via USB gezogen.
Auch direkt die PINs am Arduino verbunden. Alles lief immer ohne Probleme.

So - dann dachte ich mir - Nimm ein Breadboard, machen andere genauso. Ist doch viel einfacher.

Ging auch auch ein paar mal ohne Probleme.
ZACK - Erste LED rot ... und auch nur noch ROT.

Ist wohl so nicht mehr ansteuerbar. Der Rest geht einwandfrei.

Jetzt möchte ich natürlich vorsorgen und nicht überall dann die erst LED schrotten.

Ich würde die 5V direkt vom Netzteil im Rechner abgreifen.
Was gibt es da zu beachten ? Gehört ein Widerstand zwischen Arduino und dem DATA PIN der LEDs ?
Wenn ja - welcher ?
Was muss ich noch beachten.

Dieses StarterKIT hab ich mir mal bestellt:

https://www.amazon.de/gp/product/B01M7N4WB6/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

Erst mal vielen Dank für alle Hinweise.

Was etwas seltsam ist: Ich habe ein Arduino Nano auch am Ambilight am Monitor mit einem 5V Netzteil verbunden.
Da habe ich keine Widerstände irgendwo hin und das hält schon Jahre ! :/

Euch nen schönen Sonntag Abend !
 
RaptorTP schrieb:
Ich würde die 5V direkt vom Netzteil im Rechner abgreifen.
Was gibt es da zu beachten ? Gehört ein Widerstand zwischen Arduino und dem DATA PIN der LEDs ?
Wenn ja - welcher ?
1. Sicherung
2. bulk capacitor
3. 33 Ohm nahe LED (optional)
4. GND sowohl mit dem Netzteil als auch mit dem Arduino verbinden.
 
Ich komm aus der Mechanik xD

GND ist soweit verstanden :)

Was ist mit Punkt 1. & 2. ? Ich bin unsicher.
 
1. Fuse: Dein Netzteil hat ordentlich Leistung. Sicherung oder PTC verhindern schlimmeres im Schadensfall.
2. Größerer Kondensator z.B. 1 mF zum glätten.
 
Welcher Arduino Nano ist s genau? Es gibt auch welche mit 3,3V Logikpegel, das kann Probleme geben, da die LEDs 5V haben. Dann brauchst du noch einen Oegelwandler. Oder gleich einen Arduino mit 5V nehmen.

Schau auch mal bei WLED: https://kno.wled.ge/basics/getting-started/. Die Hinweise zum Anschluss kannst du auch für dein Projekt übernehmen.
 
Zurück
Oben