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