Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Verschillende effec...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Verschillende effecten Neopixel, stoppen van Sparkle

44 Berichten
2 Gebruikers
0 Reactions
4,176 Bekeken
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

Natuurlijk

// gaat hier om type leonardo arduino
#define FASTLED_INTERNAL // just used to mute the Pragma messages when compiling
#include "FastLED.h"

const int ledPin4 =  4;// pin nummer voor breakdance leds1
const int ledPin5 =  5;// pin nummer voor breakdance leds2
int ledState4 = LOW;
int ledState5 = LOW;
unsigned long previousMillis = 0;
const long interval = 1500;


#define PIN_STRIP1 6 //dit is strip 1 op de diamant
#define PIN_STRIP2 7 //dit is strip 2 op de diamant
#define PIN_STRIP3 8 //dit zijn de leds onder de kop
#define PIN_STRIP4 9 //dit zijn de leds op de kop
#define LED_COUNT1 26 //aantal leds op de diamant in strip 1
#define LED_COUNT2 26 //aantal leds op de diamant in strip 2
#define LED_COUNT3 10 //aantal leds onder de kop
#define LED_COUNT4 31 //aantal leds op de kop
#define LED_TYPE     WS2812
#define NUM_LEDS    28

CRGBPalette16 firePalette = HeatColors_p;
CRGB leds_strip1[LED_COUNT1];
CRGB leds_strip2[LED_COUNT2];
CRGB leds_strip3[LED_COUNT3];
CRGB leds_strip4[LED_COUNT4];

unsigned long currentMillis = 0;
unsigned long startMillis = 0;

void setup() {
  FastLED.addLeds<LED_TYPE, PIN_STRIP1, GRB>(leds_strip1, LED_COUNT1).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, PIN_STRIP2, GRB>(leds_strip2, LED_COUNT2).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, PIN_STRIP3, RGB>(leds_strip3, LED_COUNT3).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, PIN_STRIP4, RGB>(leds_strip4, LED_COUNT4).setCorrection(TypicalLEDStrip);
  FastLED.clear(true); // clear alle LEDs
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);

}


void purpleBlackGreen() {
  uint16_t sinBeat   = beatsin16(20, 0, LED_COUNT1 - 1, 0, 0);
  uint16_t sinBeat2  = beatsin16(20, 0, LED_COUNT1 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(20, 0, LED_COUNT1 - 1, 0, 43690);
  leds_strip1[sinBeat]   = CRGB::Purple;
  leds_strip1[sinBeat2]  = CRGB::Black;
  leds_strip1[sinBeat3]  = CRGB::Green;
  fadeToBlackBy(leds_strip1, LED_COUNT1, 12);
}

void purpleBlackGreen1() {
  uint16_t sinBeat   = beatsin16(20, 0, LED_COUNT2 - 0, 0, 0);
  uint16_t sinBeat2  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 43690);
  leds_strip2[sinBeat]   = CRGB::Purple;
  leds_strip2[sinBeat2]  = CRGB::Black;
  leds_strip2[sinBeat3]  = CRGB::Green;
  fadeToBlackBy(leds_strip2, LED_COUNT2, 12);
}

void Sparkle(CRGB ledstrip[], int ledcount, byte red, byte green, byte blue, int SpeedDelay) {
  int Pixel = random(ledcount);
  ledstrip[Pixel] = CRGB(red, green, blue);
  FastLED.show();
  delay(70);
  ledstrip[Pixel] = CRGB(0, 0, 0);
}

void juggle() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds_strip4, LED_COUNT4, 20);
  byte dothue = 0;
  for ( int i = 0; i < 8; i++) {
    leds_strip4[beatsin16( i + 7, 0, LED_COUNT4 - 1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}

void juggle1() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds_strip1, LED_COUNT1, 20);
  byte dothue = 0;
  for ( int i = 0; i < 10; i++) {
    leds_strip1[beatsin16( i + 7, 0, LED_COUNT1 - 1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}

void juggle2() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds_strip2, LED_COUNT2, 22);
  byte dothue = 0;
  for ( int i = 0; i < 5; i++) {
    leds_strip2[beatsin16( i + 7, 0, LED_COUNT2 - 1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}

void runFire1() {
  int  a = millis();
  for (int i = 0; i < NUM_LEDS; i++) {
    uint8_t noise = inoise8 (0 , i * 70 - a , a / 3);
    uint8_t math = abs8(i - (NUM_LEDS - 26)) * 255 / (NUM_LEDS - 0);
    uint8_t index = qsub8 (noise, math);
    leds_strip1[i] = ColorFromPalette (firePalette, index, 255);
  }
}

void runFire2() {
  int  a = millis();
  for (int i = 0; i < NUM_LEDS; i++) {
    uint8_t noise = inoise8 (0 , i * 30 - a , a / 3);
    uint8_t math = abs8(i - (NUM_LEDS - 26)) * 255 / (NUM_LEDS - 0);
    uint8_t index = qsub8 (noise, math);
    leds_strip2[i] = ColorFromPalette (firePalette, index, 255);
  }
}

void redWhiteBlue1() {
  uint16_t sinBeat   = beatsin16(30, 0, LED_COUNT1 - 1, 0, 0);
  uint16_t sinBeat2  = beatsin16(30, 0, LED_COUNT1 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(30, 0, LED_COUNT1 - 1, 0, 43690);
  leds_strip1[sinBeat]   = CRGB::Blue;
  leds_strip1[sinBeat2]  = CRGB::Red;
  leds_strip1[sinBeat3]  = CRGB::White;
  fadeToBlackBy(leds_strip1, LED_COUNT1, 5);
}

void redWhiteBlue2() {
  uint16_t sinBeat   = beatsin16(20, 0, LED_COUNT2 - 1, 0, 0);
  uint16_t sinBeat2  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 43690);
  leds_strip2[sinBeat]   = CRGB::Blue;
  leds_strip2[sinBeat2]  = CRGB::Red;
  leds_strip2[sinBeat3]  = CRGB::White;
  fadeToBlackBy(leds_strip2, LED_COUNT2, 5);
}

void loop()
{
  currentMillis = millis(); // haal de tijd op
  unsigned long SinceStartTime = currentMillis - startMillis;

  if (SinceStartTime < 10000)
  {
    Sparkle(leds_strip1, LED_COUNT1, 0xff, 0xff, 0xff, 180);
    Sparkle(leds_strip2, LED_COUNT2, 0xff, 0xff, 0xff, 0);
    Sparkle(leds_strip3, LED_COUNT3, 0xff, 0xff, 0xff, 0);
    Sparkle(leds_strip4, LED_COUNT4, 0xff, 0xff, 0xff, 0);
    FastLED.setBrightness(250);
    FastLED.show();
  }


  else if (SinceStartTime < 20000)
  {
    EVERY_N_MILLISECONDS(50) {
      runFire1();
      runFire2();
      FastLED.setBrightness(100);
      FastLED.show();
    }
    fill_solid( leds_strip3, LED_COUNT3, CRGB(225, 0, 0));
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 112, 0));
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      if (ledState4 == LOW) {
        ledState4 = HIGH;
      } else {
        ledState4 = LOW;
      }
      digitalWrite(ledPin4, ledState4);
    }
    if (ledState4 == LOW) {
      digitalWrite (ledPin5, HIGH);
    } else {
      digitalWrite (ledPin5, LOW);
    }
  }


  else if (SinceStartTime < 30000)
  {
    purpleBlackGreen();
    purpleBlackGreen1();
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= 1500) {
      previousMillis = currentMillis;
      if (ledState4 == LOW) {
        ledState4 = HIGH;
        fill_solid( leds_strip3, LED_COUNT3, CRGB (0, 255, 0));
      } else {
        ledState4 = LOW;
        fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 255));
      }
      digitalWrite(ledPin4, ledState4);
    }
    if (ledState4 == LOW) {
      digitalWrite (ledPin5, HIGH);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 255, 0));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 255));
    } else {
      digitalWrite (ledPin5, LOW);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 255));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 255, 0));
    }
    FastLED.setBrightness(100);
    FastLED.show();
  }


  else if (SinceStartTime < 40000)
  {
    digitalWrite (ledPin4, LOW);
    digitalWrite (ledPin5, LOW);
    juggle();
    juggle1();
    juggle2();
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 0));
    FastLED.setBrightness(150);
    FastLED.show();
  }


  else if (SinceStartTime < 50000)
  {
    redWhiteBlue1();
    redWhiteBlue2();
    FastLED.setBrightness(100);
    FastLED.show();
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= 1000) {
      previousMillis = currentMillis;
      if (ledState4 == LOW) {
        ledState4 = HIGH;
        fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 0));
      } else {
        ledState4 = LOW;
        fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 255));
      }
      digitalWrite(ledPin4, ledState4);
    }
    if (ledState4 == LOW) {
      digitalWrite (ledPin5, HIGH);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 0));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 255));
    } else {
      digitalWrite (ledPin5, LOW);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 255));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 0));
    }
  }


  else if (SinceStartTime < 53000)
  {
    digitalWrite (ledPin4, LOW);
    digitalWrite (ledPin5, LOW);
    fill_solid( leds_strip1, LED_COUNT1, CRGB(255, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(255, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 56000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 255)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 59000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 255, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 62000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(255, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(255, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 255, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 65000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 255, 255)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 68000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(255, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(255, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 255)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 71000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 73000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else // >= 71000
  {
    startIme = millis(); //start opnieuw door de start tijd op nu te zetten
  }

}

   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Twee dingen die ik even niet helemaal bergijp;

1) Volgens mij kun je dit stukje code

  else if (SinceStartTime < 73000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else // >= 71000
  {
    startIme = millis(); //start opnieuw door de start tijd op nu te zetten
  }

 

Schrijven als (gebaseerd op jouw vorige code):

  else//  if (SinceStartTime < 73000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
    startIme = millis(); //start opnieuw door de start tijd op nu te zetten
  }

 

2) Je gebruikt startIme in die laatste regel, moest dat niet startMillis zijn?


   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

Als Arduino gestart wordt, dan gaat het prima, hij loopt netjes alle lichteffecten af en aan het einde, bij 71000 begint hij weer bij 0, alleen dan gaan alle effecten door elkaar heen, dat probleem hadden we in begin ook, da hadden we opgelost door een strakke start en stop moment te kiezen

als voorbeeld:

if ( currentMillis - startMillis > 0 && currentMillis - startMillis < 15000)

 

alleen lijkt het erop dat het in de 2e ronde wel op tijd wil starten maar de vorige effect niet meer stopt

kom er zelf niet achter vermoed dat het hier aan ligt, hij krijg geen stop moment mee om de huidige te stoppen en na zoveel sec door te gaan naar de volgende


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Ik denk dat we elkaar net hebben gemist 😜 


   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

@hans ja klopt dat is correct, er staat in de skech

startMillis = millis(); //start opnieuw door de start tijd op nu te zetten


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

OK omdat het in je code hier als dit staat:

startIme = millis(); //start opnieuw door de start tijd op nu te zetten

 

Maakte dit veranderen naar startMillis uit? Of was dit een glitch tijdens het plakken in het forum? 😜 

Heb je ook geprobeerd of dat stukje code rond "EVERY_N_MILLISECONDS" uitschakelen iets uitmaakt?


   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

Hans, nou wat jou vermoede was klopte hoor, er iets in de runfire wat niet lekker werkt. ik heb eerst de EVERY_N_MILLISECONDS uitgzet maar daarmee liep het echt vast, vervolgens heb ik de gehele runfire eruit gehaald en toen liep alles goed door. Op zoek gegaan naar een andere fire void en die is gevonden. Zal de code updaten en nog de VU erin zetten. Als dat klaar is kom ik met een filmpje. Tot zover ontzetten bedankt Hans!!! 👍 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Ik ben benieuwd of het de "EVERY_N_MILLISECONDS" iets met de timing verpest.

Maar goed, je hebt een alternatief gevonden, dus het werkt.

Ben benieuwd naar jouw VU meter implementatie 😊 👍 


   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

Ha ja het werkt, althans ook hier hangt een dingetje aan, misschien kan jij dat zien Hans? Er zijn vele VU code's en best wel uitgebreid maar wil het simpel en klein mogelijk houden ivm opslag en doorlopen van Ardiuno. Ik vond deze sketch, vrij klein en goed beheersbaar, echter de eigennaar hiervan is spoorloos kennelijk, het staat op youtube maar al jaren geen enkele response op zijn code. wat we hier zien een stukje code waarvan de leds, afhankelijk van de input waarde, microfoon in dit geval de aantal leds doen oplichten, net al een VU meter zijn deze groen, echter voor het mooie zou de laatste 3 of misschien wel 4 leds, als ze gaan branden, voor het mooie de kleur rood kunnen hebben, is dit zo aan te passen? dus als led 12, 13, 14 en 15 gaan branden, zet deze in de kleur rood.

#include <FastLED.h>

#define LED_PIN_LEFT     3
#define LED_PIN_RIGHT     4
#define NUM_LEDS    15
#define CHIPSET     WS2811
#define COLOR_ORDER GRB
CRGBArray<NUM_LEDS> ledsLeft;
CRGBArray<NUM_LEDS> ledsRight;

#define BRIGHTNESS  128

int leftChannel = 1; //analog pin
int rightChannel = 2; //analog pin

int volume = 150; //0 to 1023 - high value = lower volume
int addLedsConstant = 2 ; //how fast are LEDS added to bar
int removeLedsTimeConstant = 100; //how fast are LEDS removed from bar
int middleColorLED = 200;
int combineChannels = true; //if true channels are combined and input is only LEFT channel

int numLedsToLightLeft;
int numLedsToLightRight;

long lastRefreshTime1;
long lastRefreshTime2;

void setup() {
  FastLED.addLeds<CHIPSET, LED_PIN_LEFT, COLOR_ORDER>(ledsLeft, NUM_LEDS).setCorrection( TypicalSMD5050 );
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.addLeds<CHIPSET, LED_PIN_RIGHT, COLOR_ORDER>(ledsRight, NUM_LEDS).setCorrection( TypicalSMD5050 );
  FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
  int ledsToLightLeft = map(analogRead(leftChannel), 0, volume, 0, NUM_LEDS);
  int ledsToLightRight = map(analogRead(rightChannel), 0, volume, 0, NUM_LEDS);
  
  if (combineChannels) {
    ledsToLightRight = ledsToLightLeft;
  }
  
  if (ledsToLightLeft > numLedsToLightLeft) {
    numLedsToLightLeft += addLedsConstant;
  } else if (ledsToLightLeft < numLedsToLightLeft) {
    if(millis() - lastRefreshTime1 >= removeLedsTimeConstant) {
      lastRefreshTime1 += removeLedsTimeConstant;
      numLedsToLightLeft -= 1;
    }
  }
      
  if (numLedsToLightLeft < 1) {
    numLedsToLightLeft = 0;
  }
  if (numLedsToLightLeft > NUM_LEDS) {
    numLedsToLightLeft = NUM_LEDS;
  }

  if (ledsToLightRight > numLedsToLightRight) {
    numLedsToLightRight += addLedsConstant;
  } else if (ledsToLightRight < numLedsToLightRight) {
    if(millis() - lastRefreshTime2 >= removeLedsTimeConstant) {
      lastRefreshTime2 += removeLedsTimeConstant;
      numLedsToLightRight -= 1;
    }
  }
      
  if (numLedsToLightRight < 1) {
    numLedsToLightRight = 0;
  }
  if (numLedsToLightRight > NUM_LEDS) {
    numLedsToLightRight = NUM_LEDS;
  }
  

  for(int led = 0; led < numLedsToLightLeft; led++) {
    if (led < middleColorLED) {
      ledsLeft[led] = CRGB(map(led, 0, middleColorLED - 25, 0, 255) ,255,0);
    } else {
      ledsLeft[led] = CRGB(255, map(led, middleColorLED, NUM_LEDS, 255, 0),0);
    }
  }
  for(int led = NUM_LEDS; led >= numLedsToLightLeft; led--) {
    ledsLeft[led] = CRGB(0, 0, 0);
  }

  for(int led = 0; led < numLedsToLightRight; led++) {
    if (led < middleColorLED) {
      ledsRight[led] = CRGB(map(led, 0, middleColorLED - 25, 0, 255) ,255,0);
    } else {
      ledsRight[led] = CRGB(255, map(led, middleColorLED, NUM_LEDS, 255, 0),0);
    }
  }
  for(int led = NUM_LEDS; led >= numLedsToLightRight; led--) {
    ledsRight[led] = CRGB(0, 0, 0);
  }
  
  FastLED.show();
}

Het zit volgens mij dan in stukje waar die waarde in zou moeten, als ik het goed heb hoor

ledsLeft[led] = CRGB(map(led, 0, middleColorLED - 25, 0, 255) ,255,0);

 

 

er zit ook de optie middleColorLED in maar hoe ik die ook in stel, daar veranderd weinig mee, maar dit is even ter zijde


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Wat je zou kunnen proberen is de LEDs 12 t/m 15 controleren of ze niet zwart zijn, net voor we FastLED.show() aanroepen.
Zijn ze niet zwart? Maak ze dan rood.

Dus aan het einde van de void loop, zoiets:

// helemaal aan het begin definieren
#define NUM_LEDS_RED 3

...

  for(int i= NUM_LEDS-NUM_LEDS_RED; i<= NUM_LEDS; i++) {

    if (ledsRight[i] != CRGB(0,0,0)) {
      ledsRight[i]=CRGB::Red;
    }

    if (ledsLeft[i] != CRGB(0,0,0)) {
      ledsLeft[i]=CRGB::Red;
    }

  }

  FastLED.show();
}

Nu heb ik dit niet getest, maar in principe is ledsLeft een array van elementen van het type CRGB. Dus die zouden gewoon te vergelijken moeten zijn.

Mocht dit een foutmelding geven of niet werken dan kun je het ook zo doen door de individuele kleur componenten te vergelijken:

// helemaal aan het begin definieren
#define NUM_LEDS_RED 3

...

  for(int i= NUM_LEDS-NUM_LEDS_RED; i<= NUM_LEDS; i++) {

    if ( (ledsRight[i].r != 0) && (ledsRight[i].g != 0) && (ledsRight[i].b != 0) ) {
      ledsRight[i]=CRGB::Red;
    }

    if ( (ledsLeft[i].r != 0) && (ledsLeft[i].g != 0) && (ledsLeft[i].b != 0) ) {
      ledsLeft[i]=CRGB::Red;
    }

  }

  FastLED.show();
}

 

Misschien niet de meest elegante oplossing ... maar ik denk dat het kan werken 😊 

note: Ik gebruikte expres NUM_LEDS en NUM_LEDS_RED zodat de code werkt voor verschillende instellingen (aantal rode LEDs) en LED strip lengtes.


   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

Jaja het werkt, als hij de sketch afloopt gaat het prima, aangekomen bij de 2e ronde slaat hij vast, hij doet de leds nog wel aanzetten maar in zijn geheel slaat hij vast.

Dus eerste ronde gaat prima, bij 2e rond stop hij bij het aankomen van de VU gedeelde, nu denk ik, maar misschien zie jij dat anders, er word in deze skecht ook gewerkt met Millis, dan zou opzich geen probleem moet geven denk ik, maar als hij voor de 2 ronde langs het VU gedeelde komt, zou het dan kunnen zijn dat daar iets niet goed gaat?

 

daar staat oa: if (millis() - lastRefreshTime2 >= removeLedsTimeConstant) {

tot nu toe

// gaat hier om type leonardo arduino
#define FASTLED_INTERNAL // just used to mute the Pragma messages when compiling
#include "FastLED.h"

const int ledPin4 =  4;// pin nummer voor breakdance leds1
const int ledPin5 =  5;// pin nummer voor breakdance leds2
int ledState4 = LOW;
int ledState5 = LOW;
unsigned long previousMillis = 0;
const long interval = 1500;


#define PIN_STRIP1 6 //dit is strip 1 op de diamant
#define PIN_STRIP2 7 //dit is strip 2 op de diamant
#define PIN_STRIP3 8 //dit zijn de leds onder de kop
#define PIN_STRIP4 9 //dit zijn de leds op de kop
#define LED_COUNT1 26 //aantal leds op de diamant in strip 1
#define LED_COUNT2 26 //aantal leds op de diamant in strip 2
#define LED_COUNT3 10 //aantal leds onder de kop
#define LED_COUNT4 31 //aantal leds op de kop
#define LED_TYPE     WS2812
#define NUM_LEDS    29


#define LED_PIN_LEFT     6
#define LED_PIN_RIGHT     7
CRGBArray<LED_COUNT1> ledsLeft;
CRGBArray<LED_COUNT2> ledsRight;
#define NUM_LEDS_RED 8
int leftChannel = 1; //analog pin
int rightChannel = 2; //analog pin
int volume = 140; //0 to 1023 - high value = lower volume
int addLedsConstant = 6 ; //how fast are LEDS added to bar
int removeLedsTimeConstant = 15; //how fast are LEDS removed from bar
int middleColorLED = 200;
int combineChannels = true; //if true channels are combined and input is only LEFT channel
int numLedsToLightLeft;
int numLedsToLightRight;
long lastRefreshTime1;
long lastRefreshTime2;


CRGBPalette16 firePalette = HeatColors_p;
CRGB leds_strip1[LED_COUNT1];
CRGB leds_strip2[LED_COUNT2];
CRGB leds_strip3[LED_COUNT3];
CRGB leds_strip4[LED_COUNT4];

unsigned long currentMillis = 0;
unsigned long startMillis = 0;

void setup() {
  FastLED.addLeds<LED_TYPE, PIN_STRIP1, GRB>(leds_strip1, LED_COUNT1).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, PIN_STRIP2, GRB>(leds_strip2, LED_COUNT2).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, PIN_STRIP3, RGB>(leds_strip3, LED_COUNT3).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, PIN_STRIP4, RGB>(leds_strip4, LED_COUNT4).setCorrection(TypicalLEDStrip);
  FastLED.clear(true); // clear alle LEDs
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);

}


void purpleBlackGreen() {
  uint16_t sinBeat   = beatsin16(20, 0, LED_COUNT1 - 1, 0, 0);
  uint16_t sinBeat2  = beatsin16(20, 0, LED_COUNT1 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(20, 0, LED_COUNT1 - 1, 0, 43690);
  leds_strip1[sinBeat]   = CRGB::Purple;
  leds_strip1[sinBeat2]  = CRGB::Black;
  leds_strip1[sinBeat3]  = CRGB::Green;
  fadeToBlackBy(leds_strip1, LED_COUNT1, 12);
}

void purpleBlackGreen1() {
  uint16_t sinBeat   = beatsin16(20, 0, LED_COUNT2 - 0, 0, 0);
  uint16_t sinBeat2  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 43690);
  leds_strip2[sinBeat]   = CRGB::Purple;
  leds_strip2[sinBeat2]  = CRGB::Black;
  leds_strip2[sinBeat3]  = CRGB::Green;
  fadeToBlackBy(leds_strip2, LED_COUNT2, 12);
}

void Sparkle(CRGB ledstrip[], int ledcount, byte red, byte green, byte blue, int SpeedDelay) {
  int Pixel = random(ledcount);
  ledstrip[Pixel] = CRGB(red, green, blue);
  FastLED.show();
  delay(70);
  ledstrip[Pixel] = CRGB(0, 0, 0);
}

void juggle() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds_strip4, LED_COUNT4, 20);
  byte dothue = 0;
  for ( int i = 0; i < 8; i++) {
    leds_strip4[beatsin16( i + 7, 0, LED_COUNT4 - 1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}

void juggle1() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds_strip1, LED_COUNT1, 20);
  byte dothue = 0;
  for ( int i = 0; i < 10; i++) {
    leds_strip1[beatsin16( i + 7, 0, LED_COUNT1 - 1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}

void juggle2() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds_strip2, LED_COUNT2, 22);
  byte dothue = 0;
  for ( int i = 0; i < 5; i++) {
    leds_strip2[beatsin16( i + 7, 0, LED_COUNT2 - 1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}


#define FRAMES_PER_SECOND 30
bool gReverseDirection = false;
#define COOLING  55
#define SPARKING 120
void Fire2012()
{
  // Array of temperature readings at each simulation cell
  static byte heat[LED_COUNT1];
  // Step 1.  Cool down every cell a little
  for ( int i = 0; i < LED_COUNT1; i++) {
    heat[i] = qsub8( heat[i],  random8(0, ((COOLING * 10) / LED_COUNT1) + 2));
  }
  // Step 2.  Heat from each cell drifts 'up' and diffuses a little
  for ( int k = LED_COUNT1 - 1; k >= 2; k--) {
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3;
  }
  // Step 3.  Randomly ignite new 'sparks' of heat near the bottom
  if ( random8() < SPARKING ) {
    int y = random8(7);
    heat[y] = qadd8( heat[y], random8(160, 255) );
  }
  // Step 4.  Map from heat cells to LED colors
  for ( int j = 0; j < LED_COUNT1; j++) {
    CRGB color = HeatColor( heat[j]);
    int pixelnumber;
    if ( gReverseDirection ) {
      pixelnumber = (LED_COUNT1 - 1) - j;
    } else {
      pixelnumber = j;
    }
    leds_strip1[pixelnumber] = color;
  }
}





void Fire2013()
{
  // Array of temperature readings at each simulation cell
  static byte heat[LED_COUNT2];
  // Step 1.  Cool down every cell a little
  for ( int i = 0; i < LED_COUNT2; i++) {
    heat[i] = qsub8( heat[i],  random8(0, ((COOLING * 10) / LED_COUNT2) + 2));
  }
  // Step 2.  Heat from each cell drifts 'up' and diffuses a little
  for ( int k = LED_COUNT2 - 1; k >= 2; k--) {
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3;
  }
  // Step 3.  Randomly ignite new 'sparks' of heat near the bottom
  if ( random8() < SPARKING ) {
    int y = random8(7);
    heat[y] = qadd8( heat[y], random8(160, 255) );
  }
  // Step 4.  Map from heat cells to LED colors
  for ( int j = 0; j < LED_COUNT2; j++) {
    CRGB color = HeatColor( heat[j]);
    int pixelnumber;
    if ( gReverseDirection ) {
      pixelnumber = (LED_COUNT2 - 1) - j;
    } else {
      pixelnumber = j;
    }
    leds_strip2[pixelnumber] = color;
  }
}


void redWhiteBlue1() {
  uint16_t sinBeat   = beatsin16(30, 0, LED_COUNT1 - 1, 0, 0);
  uint16_t sinBeat2  = beatsin16(30, 0, LED_COUNT1 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(30, 0, LED_COUNT1 - 1, 0, 43690);
  leds_strip1[sinBeat]   = CRGB::Blue;
  leds_strip1[sinBeat2]  = CRGB::Red;
  leds_strip1[sinBeat3]  = CRGB::White;
  fadeToBlackBy(leds_strip1, LED_COUNT1, 5);
}

void redWhiteBlue2() {
  uint16_t sinBeat   = beatsin16(20, 0, LED_COUNT2 - 1, 0, 0);
  uint16_t sinBeat2  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 21845);
  uint16_t sinBeat3  = beatsin16(20, 0, LED_COUNT2 - 1, 0, 43690);
  leds_strip2[sinBeat]   = CRGB::Blue;
  leds_strip2[sinBeat2]  = CRGB::Red;
  leds_strip2[sinBeat3]  = CRGB::White;
  fadeToBlackBy(leds_strip2, LED_COUNT2, 5);
}

void loop()
{
  currentMillis = millis(); // haal de tijd op
  unsigned long SinceStartTime = currentMillis - startMillis;

  if (SinceStartTime < 10000)
  {
    Sparkle(leds_strip1, LED_COUNT1, 0xff, 0xff, 0xff, 180);
    Sparkle(leds_strip2, LED_COUNT2, 0xff, 0xff, 0xff, 0);
    Sparkle(leds_strip3, LED_COUNT3, 0xff, 0xff, 0xff, 0);
    Sparkle(leds_strip4, LED_COUNT4, 0xff, 0xff, 0xff, 0);
    FastLED.setBrightness(250);
    FastLED.show();
  }


  else if (SinceStartTime < 20000)
  {
    Fire2012();
    Fire2013();
    fill_solid( leds_strip3, LED_COUNT3, CRGB(202, 0, 93)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 112, 0)); //Let op NEO_GRB
    FastLED.setBrightness(105);
    FastLED.show();
    FastLED.delay(2000 / FRAMES_PER_SECOND);
  }


  else if (SinceStartTime < 30000)
  {
    purpleBlackGreen();
    purpleBlackGreen1();
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= 1500) {
      previousMillis = currentMillis;
      if (ledState4 == LOW) {
        ledState4 = HIGH;
        fill_solid( leds_strip3, LED_COUNT3, CRGB (0, 255, 0));
      } else {
        ledState4 = LOW;
        fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 255));
      }
      digitalWrite(ledPin4, ledState4);
    }
    if (ledState4 == LOW) {
      digitalWrite (ledPin5, HIGH);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 255, 0));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 255));
    } else {
      digitalWrite (ledPin5, LOW);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 255));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 255, 0));
    }
    FastLED.setBrightness(100);
    FastLED.show();

  }


  else if (SinceStartTime < 40000)
  {
    digitalWrite (ledPin4, LOW);
    digitalWrite (ledPin5, LOW);
    juggle();
    juggle1();
    juggle2();
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 0));
    FastLED.setBrightness(150);
    FastLED.show();
  }


  else if (SinceStartTime < 50000)
  {
    redWhiteBlue1();
    redWhiteBlue2();
    FastLED.setBrightness(100);
    FastLED.show();
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= 1000) {
      previousMillis = currentMillis;
      if (ledState4 == LOW) {
        ledState4 = HIGH;
        fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 0));
      } else {
        ledState4 = LOW;
        fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 255));
      }
      digitalWrite(ledPin4, ledState4);
    }
    if (ledState4 == LOW) {
      digitalWrite (ledPin5, HIGH);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 0));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 255));
    } else {
      digitalWrite (ledPin5, LOW);
      fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 255));
      fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 0));
    }
  }


  else if (SinceStartTime < 53000)
  {
    digitalWrite (ledPin4, LOW);
    digitalWrite (ledPin5, LOW);
    fill_solid( leds_strip1, LED_COUNT1, CRGB(255, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(255, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 56000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 255)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 59000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 255, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 62000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(255, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(255, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 255, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 255, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 65000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 255, 255)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 68000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(255, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(255, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 255)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }
  else if (SinceStartTime < 71000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 255)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(255, 255, 255)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(255, 0, 0)); //Let op NEO_GRB
    FastLED.setBrightness(100);
    FastLED.show();
  }

  else if (SinceStartTime < 80000)
  {

    int ledsToLightLeft = map(analogRead(leftChannel), 0, volume, 0, LED_COUNT1);
    int ledsToLightRight = map(analogRead(rightChannel), 0, volume, 0, LED_COUNT2);

    if (combineChannels) {
      ledsToLightRight = ledsToLightLeft;
    }

    if (ledsToLightLeft > numLedsToLightLeft) {
      numLedsToLightLeft += 3;
    } else if (ledsToLightLeft < numLedsToLightLeft) {
      if (millis() - lastRefreshTime1 >= 80) {
        lastRefreshTime1 += 80;
        numLedsToLightLeft -= 1;
      }
    }

    if (numLedsToLightLeft < 1) {
      numLedsToLightLeft = 0;
    }
    if (numLedsToLightLeft > LED_COUNT1) {
      numLedsToLightLeft = LED_COUNT1;
    }

    if (ledsToLightRight > numLedsToLightRight) {
      numLedsToLightRight += addLedsConstant;
    } else if (ledsToLightRight < numLedsToLightRight) {
      if (millis() - lastRefreshTime2 >= removeLedsTimeConstant) {
        lastRefreshTime2 += removeLedsTimeConstant;
        numLedsToLightRight -= 1;
      }
    }

    if (numLedsToLightRight < 1) {
      numLedsToLightRight = 0;
    }
    if (numLedsToLightRight > LED_COUNT2) {
      numLedsToLightRight = LED_COUNT2;
    }
    for (int led = 0; led < numLedsToLightLeft; led++) {
      if (led < middleColorLED) {
        leds_strip1[led] = CRGB(map(led, 0, middleColorLED - 25, 0, 255) , 255, 0);
      } else {
        leds_strip1[led] = CRGB(255, map(led, middleColorLED, LED_COUNT1, 255, 0), 0);
      }
    }
    for (int led = LED_COUNT1; led >= numLedsToLightLeft; led--) {
      leds_strip1[led] = CRGB(0, 0, 0);
    }

    for (int led = 0; led < numLedsToLightRight; led++) {
      if (led < middleColorLED) {
        leds_strip2[led] = CRGB(map(led, 0, middleColorLED - 25, 0, 255) , 255, 0);
      } else {
        leds_strip2[led] = CRGB(255, map(led, middleColorLED, LED_COUNT2, 255, 0), 0);
      }
    }
    for (int led = LED_COUNT2; led >= numLedsToLightRight; led--) {
      leds_strip2[led] = CRGB(0, 0, 0);
    }
    for (int i = LED_COUNT2 - NUM_LEDS_RED; i <= LED_COUNT2; i++) {

      if (leds_strip2[i] != CRGB(0, 0, 0)) {
        leds_strip2[i] = CRGB::Red;
      }
      if (leds_strip1[i] != CRGB(0, 0, 0)) {
        leds_strip1[i] = CRGB::Red;
      }
    }
    FastLED.show();
  }
  else if (SinceStartTime < 95000)
  {
    fill_solid( leds_strip1, LED_COUNT1, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip2, LED_COUNT2, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip3, LED_COUNT3, CRGB(0, 0, 0)); //Let op NEO_GRB
    fill_solid( leds_strip4, LED_COUNT4, CRGB(0, 0, 0)); //Let op NEO_GRB
    FastLED.show();
    startMillis = millis(); //start opnieuw door de start tijd op nu te zetten
  }
}

   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  

Nu probeer ik er achter te komen, eigenlijk met een monitor, waarom hij niet meer doorloopt, met

  Serial.println( millis() );

Zie ik wel dat de millis gewoon doorlopen eigenlijk zou je willen zien wat de VU en startMillis uitspoken op het moment dat ze voor de 2e ronde lags VU meter komen.

Heb je daar een tip voor Hans?


   
BeantwoordenCiteren
(@djdeeno)
Eminent Member
Deelgenomen: 4 jaar geleden
Berichten: 27
Topic starter  
Geplaatst door: @djdeeno

Nu probeer ik er achter te komen, eigenlijk met een monitor, waarom hij niet meer doorloopt, met

  Serial.println( millis() );

Zie ik wel dat de millis gewoon doorlopen eigenlijk zou je willen zien wat de VU en startMillis uitspoken op het moment dat ze voor de 2e ronde lags VU meter komen.

Heb je daar een tip voor Hans?

Oke, ik heb nu hier en daar tussen de regels door (in het VU gedeelde) een stukje code tussen de regels gezet zoals, Serial.println("stopt bij 1"); en een regel verder Serial.println("stopt bij 2"); ect en wat ik zie is dat hij de eerste ronde de gehele sketch prima doorloopt, bij de 2e ronde en aangekomen bij het VU meter gedeelde, deze VU loopt hij 1 keer door en daarna blijft de millis doorlopen maar vermoed dat hij de tel kwijt is geraakt door dat stukje millis wat er in zit. nu heb deze proberen te vervangen.

      if (millis() - lastRefreshTime2 >= removeLedsTimeConstant) {

en dan millis vervangen door SinceStartTime en dat ook voor 

if (millis() - lastRefreshTime1 >= 80) {

Ook deze vervangen door SinceStartTime, echter doet hij ook zijn ding niet.

 

Heb ik het juist dat hier het probleem ligt?


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Het nadeel van stukjes code bij elkaar rapen (en dat doen we allemaal wel) is dat er soms onverwachte dingen gebeuren.

Ik neem even aan dat als je alleen de VU meter sketch gebruikt, dus het origineel en zonder jouw code, dat alles werkt?

Wat ik dan vaak doe, is proberen de code in een functie te gooien zodat ik die snel in m'n eigen code kan invoegen.
Maar om de code te begrijpen moet ook ik het steeds in m'n hoofd uit elkaar halen in stappen.

En hierbij moet ik zeggen dat de VU meter code wat lastig te lezen is, dus ik zou overwegen een eigen VU meter functie te maken.
Zo zie ik de waarde middleColorLED (200?) gebruiken, en deze wordt vergeleken met de led positie (die maar tot 26 gaat?).
Een beetje maf om dat zo te lezen.

 

Een suggestie;

De audio wordt gemeten en geconverteerd met de map functie:

map(value, fromLow, fromHigh, toLow, toHigh)

 

Dus in de VU meter code, converteren we de analog pin data (0-1024) voor de waarden 0 tot 140 naar 0 tot het aantal LEDs (26).

int ledsToLightLeft = map(analogRead(leftChannel), 0, volume, 0, LED_COUNT1);
int ledsToLightRight = map(analogRead(rightChannel), 0, volume, 0, LED_COUNT2);

 

Als dus de analog pin een waarde van 140 terug geeft, dan resulteert dat in een waarde 26.
Als de analoge pin 0 geeft dan resulteert dat in 0. Zo ook met de waarden daar tussen in.

Dan neem ik even voorzichtig aan dat de kleuren in 2 blokken zijn verdeeld: tot LED 22 zijn de LEDs groen, en 22-26 is rood.

Als we er vanuit gaan dat er geen "fade" effect in de VU meter zit, dan zouden we aan de hand van ledsToLightLeft en ledsToLightRight het volgende kunnen doen:

1. Maak alle LEDs zwart.
2. Tel van 0 tot ledsToLightLeft, en zet deze op de gewenste kleur. (ditto voor rechts natuurlijk)

In een niet geteste functie zou dat er dus zo uit kunnen zien (ik neem aan dat leds_strip1 en leds_strip2 hiervoor worden gebruikt:

#define VUGreenMax 22

....

void SetVULEDs() {
  // Lees en converteer de analoog waarden
  int ledsToLightLeft = map(analogRead(leftChannel), 0, volume, 0, LED_COUNT1);
  int ledsToLightRight = map(analogRead(rightChannel), 0, volume, 0, LED_COUNT2);

  // Alles op zwart zetten (niet zichtbaar maken)
  fill_solid( leds_strip1, LED_COUNT1, CRGB::Black); //Let op NEO_GRB
  fill_solid( leds_strip2, LED_COUNT2, CRGB::Black); //Let op NEO_GRB

  // Links
  for(int i=0; i<=ledsToLightLeft; i++) {
    if(i<VUGreenMax) {
      led_strip1[i] = CRGB::Green;
    } else {
      led_strip1[i] = CRGB::Red;
    }
  }

  // Rechts
  for(int i=0; i<=ledsToLightReight; i++) {
    if(i<VUGreenMax) {
      led_strip2[i] = CRGB::Green;
    } else {
      led_strip2[i] = CRGB::Red;
    }
  }

  FastLED.show();
}

 

Stukken eenvoudiger natuurlijk, maar misschien mis ik wat effecten van jouw VU code.
B.v. kleurverloop, fade out etc...


   
BeantwoordenCiteren
Pagina 3 / 3
Deel: