Quantcast
Channel: Tweaking4All.com » All Posts
Viewing all articles
Browse latest Browse all 142

LED Effects – Star Trek Phaser Array

$
0
0

Hi Hans, I hope your busy week isn’t too stressful and the solution for my “steady color with pulsing meteor effect” problem is not too difficult.
I was trying some stuff but had no luck. So I spend some time on another effect.

I used your New-KITT sketch to make something like this:
Phaser effect

The only thing missing is the pulsing effect (pulsing again :D ) when the phaser is firing like here 0:02 , 0:06 , 0:10.
If it is easier to achieve, the pulsing effect could affect the entire sketch, instead of only when the light is still.
Also it would be great to have a fade to black after each fire impulse. But thats not necessary.

Here is the modified New-KITT sketch:

void loop() {
  PhaserBank(0xff, 0x3c, 0x00, 1, 15, 2000);
}
void PhaserBank(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay){
  PhaserBank1(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  PhaserBank2(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  PhaserBank3(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  PhaserBank4(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  }
void PhaserBank1(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for(int i = 0; i<=((60-EyeSize)/2); i++) {
    setAll(0,0,0);
    FastLED.setBrightness(10);
   
    setPixel(i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(i+j, red, green, blue);
    if (i > 28) {
      FastLED.setBrightness(80);  
      
    }
    
  }
       
    setPixel(60-i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(60-i-j, red, green, blue);
    
   }
    showStrip();
    
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
  
}
void PhaserBank2(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for(int i = 0; i<=((30-EyeSize)/2); i++) {
    setAll(0,0,0);
    FastLED.setBrightness(10);
   
    setPixel(i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(i+j, red, green, blue);
    if (i > 13) {
      FastLED.setBrightness(80);  
    }
    
  }
     
    setPixel(30-i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(30-i-j, red, green, blue);
    }
   
    showStrip();
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
  
}

void PhaserBank3(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for(int i = 0; i<=((80-EyeSize)/2); i++) {
    setAll(0,0,0);
    FastLED.setBrightness(10);
   
    setPixel(i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(i+j, red, green, blue);
    if (i > 38) {
      FastLED.setBrightness(80);  
    }
    
  }
     
    setPixel(80-i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(80-i-j, red, green, blue);
    }
   
    showStrip();
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
  
}

void PhaserBank4(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for(int i = 0; i<=((100-EyeSize)/2); i++) {
    setAll(0,0,0);
    FastLED.setBrightness(10);
   
    setPixel(i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(i+j, red, green, blue);
    if (i > 48) {
      FastLED.setBrightness(80);  
    }
    
  }
      
    setPixel(100-i, red/10, green/10, blue/10);
    for(int j = 1; j <= EyeSize; j++) {
      setPixel(100-i-j, red, green, blue);
    }
   
    showStrip();
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
  
}
// *** REPLACE TO HERE ***
void showStrip() {
 #ifdef ADAFRUIT_NEOPIXEL_H
   // NeoPixel
   strip.show();
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H
   // FastLED
   FastLED.show();
 #endif
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
 #ifdef ADAFRUIT_NEOPIXEL_H
   // NeoPixel
   strip.setPixelColor(Pixel, strip.Color(red, green, blue));
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H
   // FastLED
   leds[Pixel].r = red;
   leds[Pixel].g = green;
   leds[Pixel].b = blue;
 #endif
}
void setAll(byte red, byte green, byte blue) {
  for(int i = 0; i < NUM_LEDS; i++ ) {
    setPixel(i, red, green, blue);
  }
  showStrip();
}

As I said before, take your time, no need to hurry. And a happy new year!!!

PS: I hope the code is not too long to be posted here


Viewing all articles
Browse latest Browse all 142

Trending Articles