Hallo, ich arbeite gerade an einem Musik reaktiven LED Streifen. Dafür nutze ich einen msgeq7 und einen ws2812b LED Streifen. Mein Ziel ist es gerade jede sechste LED zur Lautstärke des Basses blinken zu lassen. Wenn ich das mit allen LEDs versuche funktioniert alles problemlos, bei jeder sechsten ändert sich die Helligkeit der LEDs aber nur im Sekundentakt und es sieht so aus, als ob alles zeitverzögert geschieht.
Meine Vermutung ist, dass die von mir verwendete for Schleife zur Ansteuerung jeder sechsten LED jedes mal durchgegangen werden muss, was viel Zeit kostet. Allerdings fällt mir nicht ein, wie ich sonst jede sechste LED ansteuern kann. Vielleicht mit einem Array?
Ich würde mich sehr freuen, falls ihr mir helfen könnt!
Mein Code:
#include <FastLED.h>
// How many leds are in the strip?
#define NUM_LEDS 294
// Data pin that led data will be written out over
#define DATA_PIN 6
int strobePin = 13; // Strobe Pin on the MSGEQ7
int resetPin = 12; // Reset Pin on the MSGEQ7
int outPin = A0; // Output Pin on the MSGEQ7
// This is an array of leds. One item for each led in your strip.
CRGB leds[NUM_LEDS];
// This function sets up the ledsand tells the controller about them
void setup() {
// sanity check delay - allows reprogramming if accidently blowing power w/leds
delay(2000);
Serial.begin (9600);
// Define our pin modes
pinMode (strobePin, OUTPUT);
pinMode (resetPin, OUTPUT);
pinMode (outPin, INPUT);
// Create an initial state for our pins
digitalWrite (resetPin, LOW);
digitalWrite (strobePin, LOW);
delay (1);
// Reset the MSGEQ7 as per the datasheet timing diagram
digitalWrite (resetPin, HIGH);
delay (1);
digitalWrite (resetPin, LOW);
digitalWrite (strobePin, HIGH);
delay (1);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
digitalWrite (resetPin, HIGH);
delay (1);
digitalWrite (resetPin, LOW);
digitalWrite (strobePin, HIGH);
delay (1);
digitalWrite(strobePin, LOW); // output each DC value for each freq band
delayMicroseconds(35); // to allow the output to settle
int spectrumRead = analogRead(outPin);
int PWMvalue = map(spectrumRead, 0, 1024, 0, 255); // scale analogRead's value to Write's 255 max
if (PWMvalue < 20)
PWMvalue = PWMvalue / 10000; // bit of a noise filter, so the LEDs turn off at low levels
digitalWrite(strobePin, HIGH);
Serial.println (PWMvalue);
for(int R = 0; // Eigentlich erst ab hier relevant
R < NUM_LEDS;
R = R + 7)
{
leds[R] = CRGB (250,0,0);
FastLED.show();
}
if (PWMvalue>50)
{
FastLED.setBrightness (PWMvalue);
FastLED.show ();
}
else
{
FastLED.setBrightness (20);
FastLED.show ();
}
}