da das Thema aktuell passt, führe ich es mal fort....
Ich habe mir vor kuzem solche LED Ringe gekauft. Hier habe ich aber das Problem, dass diese 2 Ringe verschieden sind. Der eine versteht RGB, der andere dagegen GRB..
Jetzt steh ich vor dem Problem und weiß nicht, wie ich das auf die einzelnen Pixel verweisen kann... Sowas wie: von LED... bis LED so..... und von..... bis.... so...
Erst dachte ich, der variable i eine Zahl zu geben, die dann i++ geht, bis die nächste Zahl erreicht ist.. Hat jemand eine kleine Hilfestellung für mich? Vielleicht kann man dies ja gruppieren?
Anbei mal der Code.. Aktuelll gekürzt.
#include "FastLED.h" // Bibliothek der LEDs laden.
#include <EEPROM.h> // EEPROM-Lib für die Speicherung des aktuellen Zustandes
#define NUM_LEDS 63 // Wie viele LEDs sind in dem Strang verkettet?
#define dataPin 7 // Welcher Pin gibt den Signalausgang?
CRGB leds[NUM_LEDS]; // Dies ist eine Reihe von LEDs. Ein Stück für jede LED in diesem Streifen.
int modus = 0; // Variable für den Ablauf
int LED = 0;
byte dim = 5; // Helligkeit zwischen 0 und 255
long lWaitMillis = 0; // Hilfsvariable zur Zeitmessung bei effekten
uint8_t gHue = 0; // rotatierende "base color" von sämtlichen effekten
byte maxModi = 6; // Anzahl der Modi (ist modi der plural von modus?!)
int buttonPin = 2; // Eingang des Tasters für die Programmauswahl
// Button um alle LEDs auszuschalten und wieder einzuschalten.
int buttonState = LOW; // variable um den Tasterstatus zu halten
int buttonread = 0;
void setup() { // Folgende Funktion schaltet die LEDs und übermittelt die Informationen an den Arduino
// sanity check delay - allows reprogramming if accidently blowing power w/leds
delay(2000);
FastLED.addLeds<WS2812, dataPin>(leds, NUM_LEDS);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop (){
getButtonStatus(); // handle button
if (modus==0) modus1();
if (modus==1) modus2();
if (modus==2) modus3();
if (modus==3) modus4();
if (modus==4) modus5();
if (modus==5) modus6();
}
void getButtonStatus() {
buttonread = digitalRead(buttonPin); // Lese PinStatus vom Taster
if (buttonread == LOW) {
if (buttonState == HIGH) {
buttonState = LOW;
modus++;
if (modus > maxModi) { modus = 0; }
delay(20);
Serial.println(modus);
}
}
else { if (buttonState == LOW) { buttonState = HIGH; }}
}
//+++++++++++++++ LEUCHTPROGRAMME +++++++++++++++++
void modus1()
{
if ((long)(millis() - lWaitMillis) >= 0)
{
static byte heat[NUM_LEDS];
for (int i = 0; i < NUM_LEDS; i++) heat = qsub8(heat, random8(0, ((55 * 10) / NUM_LEDS) + 2));
* for (int k = NUM_LEDS - 1; k >= 2; k--) heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;*
* if (random8() < 120) {*
* int y = random8(7);*
* heat[y] = qadd8(heat[y], random8(160, 255)); // FARBE*
* }*
* for (int j = 0; j < NUM_LEDS; j++)
_ {_
_ CRGB color = HeatColor(heat[j]);_
_ int pixelnummer;_
_ pixelnummer = j;_
_ leds[pixelnummer] = color;_
_ }_
_ lWaitMillis += 50; // GESCHWINDIGKEIT*_
* }*
* FastLED.show();*
}
void modus2()
{
* fill_solid( leds, NUM_LEDS, CRGB::DarkGreen);
_ FastLED.show();_
_}*_
void modus3()
{
* fadeToBlackBy( leds, NUM_LEDS, 20);
int pos = beatsin16(40, 0, NUM_LEDS); // ERSTER WERT = GESCHWINDIGKEIT*
* static int prevpos = 0;*
* if ( pos < prevpos ) {*
* fill_solid( leds + pos, (prevpos - pos) + 1, CRGB(255, 255, 255));
_ } else {_
fill_solid( leds + prevpos, (pos - prevpos) + 1, CHSV( gHue, 220, 255));
_ }_
_ prevpos = pos;_
_ FastLED.show();_
_}*_
void modus4()
{
* static uint8_t numdots = 4; // Number of dots in use.
static uint8_t faderate = 2; // How long should the trails be. Very low value = longer trails.
static uint8_t hueinc = 255 / numdots - 1; // Incremental change in hue between each dot.
static uint8_t thishue = 0; // Starting hue.
static uint8_t curhue = 0; // The current hue*
* static uint8_t thissat = 255; // Saturation of the colour.
static uint8_t thisbright = 255; // How bright should the LED/display be.
static uint8_t basebeat = 5; // Higher = faster movement.*
* static uint8_t lastSecond = 99; // Static variable, means it's only defined once. This is our 'debounce' variable.
uint8_t secondHand = (millis() / 1000) % 30; // IMPORTANT!!! Change '30' to a different value to change duration of the loop.*
* if (lastSecond != secondHand) { // Debounce to make sure we're not repeating an assignment.*
* lastSecond = secondHand;*
* switch (secondHand) {*
* case 0: numdots = 1; basebeat = 20; hueinc = 16; faderate = 2; thishue = 0; break; // You can change values here, one at a time , or altogether.*
* case 10: numdots = 4; basebeat = 10; hueinc = 16; faderate = 8; thishue = 128; break;*
* case 20: numdots = 8; basebeat = 3; hueinc = 0; faderate = 8; thishue = random8(); break; // Only gets called once, and not continuously for the next several seconds. Therefore, no rainbows.*
* case 30: break;*
* }*
* }*
* // Several colored dots, weaving in and out of sync with each other*
* curhue = thishue; // Reset the hue values.*
* fadeToBlackBy(leds, NUM_LEDS, faderate);
_ for ( int i = 0; i < numdots; i++) {_
leds[beatsin16(basebeat + i + numdots, 0, NUM_LEDS)] += CRGB(255,255,255);
_ curhue += hueinc;_
_ }_
_ FastLED.show();_
_ }*_
void modus5()
{
leds[0] = CRGB( 255, 0, 0);
leds[1] = CRGB( 0, 255, 0);
leds[2] = CRGB( 0, 0, 255);
* FastLED.show ();*
}
void modus6()
{
fill_solid( leds, NUM_LEDS, CRGB::Blue);
* FastLED.setBrightness(10);*
* FastLED.show ();*
}
Danke schon mal!
[/quote]