Go Down

Topic: muziek equalizer, samen voegen van 2 effecten gaat fout (Read 227 times) previous topic - next topic

Djoury

Beste allemaal,

Ik ben momenteel bezig voor mijn kamer verlichting, het leek mij leuk om daar dan ook meteen een muziek equalizer van te maken als je toch al een led strip ophangt. Ik had het eerste effect zo gemaakt, met behulp van google, wat ik de Front equalizer noemde. Maar daar wou ik nog een 2 de effect achter hebben. met heel wat gepruts heb ik ook voor het 2 de effect afgekregen wat ik de Side equalizer noemde.
Met het samenvoegen van die 2 effecten viel het effect van de Side equalizer weg. ik weet inmiddels waarom, maar weet niet hoe ik het op moet lossen. Ik heb voor verderduidelijking de 2 effecten los van elkaar gefilmd, Front: https://www.youtube.com/watch?v=pPSE9S0QmYo en Side:https://www.youtube.com/watch?v=Qa05l0fDdBk.

Ik zou graag willen dat de sides als het ware achter de front vandaan komt, heeft iemand tips hoe ik dit probleem kan oplossen.

met vriendelijke groeten,
Djoury

Code: [Select]
#include <FastLED.h>

FASTLED_USING_NAMESPACE

#define DATA_PIN    5
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS    300
#define BRIGHTNESS          50
#define FRAMES_PER_SECOND  120
CRGB leds[NUM_LEDS];

//side Equalizer
#define Min         100
#define Max         500
#define Length      2

unsigned long pos[NUM_LEDS/20];
unsigned long pos1[NUM_LEDS/20];

int analogPin = 0; // MSGEQ7 OUT
int strobePin = 2; // MSGEQ7 STROBE
int resetPin = 4; // MSGEQ7 RESET
int spectrumValue[7];

int c = 0;
int k = 0;
int h = 0;
int spectrumgem;
int basegem;

int SCROLL_SPEED;
int input = 0;
unsigned long lastUpdate;
int Random;
unsigned long now;
unsigned long last;
bool full = false;
int b;
 
// MSGEQ7 OUT pin produces values around 50-80
// when there is no input, so use this value to
// filter out a lot of the chaff.
int filterValue = 80;

void setup()
{
  delay(3000); // 3 second delay for recovery
  Serial.begin(9600);
  // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);

  // set master brightness control
  FastLED.setBrightness(BRIGHTNESS);
 
  // Read from MSGEQ7 OUT
  pinMode(analogPin, INPUT);
  // Write to MSGEQ7 STROBE and RESET
  pinMode(strobePin, OUTPUT);
  pinMode(resetPin, OUTPUT);
 
  // Set analogPin's reference voltage
  analogReference(DEFAULT); // 5V
 
  // Set startup values for pins
  digitalWrite(resetPin, LOW);
  digitalWrite(strobePin, HIGH);
}
 
void loop()
{
  int IrProgram = 0;
  if (IrProgram == 0){
    MSGEQ7();
    Side_Equalizer();
    Front_Equalizer();
  }
  if (IrProgram == 1){

  }
    // send the 'leds' array out to the actual LED strip
  FastLED.show();   
}

void MSGEQ7(){
  // Set reset pin low to enable strobe
  digitalWrite(resetPin, HIGH);
  digitalWrite(resetPin, LOW);
 
  // Get all 7 spectrum values from the MSGEQ7
  for (int i = 0; i < 7; i++)
  {
    digitalWrite(strobePin, LOW);
    delayMicroseconds(30); // Allow output to settle
 
    spectrumValue[i] = analogRead(analogPin);
 
    // Constrain any value above 1023 or below filterValue
    spectrumValue[i] = constrain(spectrumValue[i], filterValue, 1023);
    // Remove serial stuff after debugging
    //Serial.print(spectrumValue[i]);
    //Serial.print(" ");
    digitalWrite(strobePin, HIGH);
   }
   
   spectrumgem = (spectrumValue[0] + spectrumValue[1] + spectrumValue[2] + spectrumValue[3] + spectrumValue[4] + spectrumValue[5] + spectrumValue[6])/7;
}

void Side_Equalizer(){

  basegem = (spectrumValue[0] + spectrumValue[1])/2;
  basegem = map(basegem,filterValue,1023,0,350);
  SCROLL_SPEED = 350-basegem;
  Serial.print(SCROLL_SPEED);
  Serial.print(" ");
  Serial.println(basegem); 
  if(full == true){
    input = LOW;
  }
  if (now - last >= Random){
    Random = random16( Min, Max);
    last = millis();
    input = HIGH;
  }
 
  if (input == HIGH){   
    leds[NUM_LEDS/2-1] = CRGB::Blue;
  }
  else{
    leds[NUM_LEDS/2-1] = CRGB::Black;
  }
 
  if (millis() - lastUpdate > SCROLL_SPEED) {
    if (input == HIGH ){
    b = b + 1;
    }
    if(b >= Length){
      full = true;
      b = 0;
    }
    else{
      full = false;
    }
    lastUpdate += SCROLL_SPEED;
    for (int i = 0; i < NUM_LEDS/2-1; i++)
      leds[i] = leds[i + 1];
    for (int i = NUM_LEDS-1; i > NUM_LEDS/2-1 ; i--)
      leds[i] = leds[i - 1]; 
  }
  now = millis();
}
 
void Front_Equalizer(){

    for (int d = 0; d < 7; d++){
      // Remap the value to a number between 0 and NUM_LEDS/20
      spectrumValue[d] = map(spectrumValue[d], filterValue, 1023, 0, NUM_LEDS/20);
    }
    int start = 0;
    int mid = NUM_LEDS/2;
    //set pos for all collors
    fadeToBlackBy( leds, NUM_LEDS, 192);
    for (int a = 0; a < 7; a++){
     
      for (int b = 0; b <= spectrumValue[a]; b++){
          pos[b] = mid + spectrumValue[a] + start - b;
          pos1[b]= mid - spectrumValue[a] - start + b;
         
          if (a ==0){
            leds[pos[b]] = CHSV(HUE_BLUE,255,255);
            leds[pos1[b]] = CHSV(HUE_BLUE,255,255);
          }
          if (a ==1){
            leds[pos[b]] = CHSV(HUE_AQUA,255,255);
            leds[pos1[b]] = CHSV(HUE_AQUA,255,255);
          }
          if (a ==2){
            leds[pos[b]] = CHSV(HUE_GREEN,255,255);
            leds[pos1[b]] = CHSV(HUE_GREEN,255,255);
          }
          if (a ==3){
            leds[}
          if (a ==5){
            leds[pos[b]] = CHSV(HUE_RED,255,255);
            leds[pos1[b]] = CHSV(HUE_RED,255,255);
          }
          if (a ==6){
            leds[pos[b]] = CHSV(HUE_PINK,255,255);
            leds[pos1[b]] = CHSV(HUE_PINK,255,255);
          }
      }
      start = spectrumValue[a] + start;
     
    }
  // insert a delay to keep the framerate modest
  FastLED.delay(1000/FRAMES_PER_SECOND);       
}

Go Up