So I was trying to swap a proffie board into a cheap LGT. It was turning on and I was getting swing effects, but I think something happened when I tried to squeeze the core and its cables back into the hilt. The led momentary switch won’t light up, the 3 channel crew won’t light (tested it by connecting the led directly to a battery and it lights fine). It does play the boot.wav of the first preset when I insert the battery, however, when push the momentary switch it plays the out1.wav and then nothing after that. Also the audio is sometimes clear and sometimes very crackly. Did I manage to short something out? This all still occurs with the core out and wires loose.
This would be the audio booster is not getting power or is bad or something is shorting.
I would suggest cleaning all solder joints to make sure they’re good. See what serial monitor says .
It could also be an SD card problem.
Try a different SD card?
Ok, so I grabbed a new sd card, formatted fat32, copied only 5 sound fonts on. When I plug the board into the usb on the computer, it plays boot.wav now with no crunchiness. However, i get these issues when using the serial monitor:
on
Ignition.
SD card is busy, flags= medium
SD card is busy, flags= medium
unit = 0 vol = 0.00, Playing CalKestis/hum01.wav
File CalKestis/hum01.wav not found.
SD card is busy, flags= medium
unit = 1 vol = 0.50, Playing CalKestis/out03.wav
File CalKestis/out03.wav not found.
humstart: 2000
Motion chip … I2C init…
105 found.
EVENT: Clash ON millis=632582
SD card is busy, flags= medium
unit = 1 vol = 0.50, Playing CalKestis/clsh04.wav
File CalKestis/clsh04.wav not found.
EVENT: Clash ON millis=633582
SD card is busy, flags= medium
unit = 1 vol = 0.50, Playing CalKestis/clsh13.wav
File CalKestis/clsh13.wav not found.
Amplifier off.
If I open up the sd card (it’s still in the proffie) on my computer, those .wav files are definitely there, named correctly, and play fine through VLC player. If I list the effects I get:
effects
Found color files: 1-1 using 2 digits in CalKestis
Found enddrag files: 1-2 using 2 digits in CalKestis
Found drag files: 1-1 using 2 digits in CalKestis
Found bgndrag files: 1-1 using 2 digits in CalKestis
Found swingh files: 1-4 using 2 digits in CalKestis
Found swingl files: 1-4 using 2 digits in CalKestis
Found swng files: 1-16 using 2 digits in CalKestis
Found lock files: 1-1 using 2 digits in CalKestis
Found out files: 1-9 using 2 digits in CalKestis
Found in files: 1-2 using 2 digits in CalKestis
Found clsh files: 1-16 using 2 digits in CalKestis
Found blst files: 1-8 using 2 digits in CalKestis
Found endlock files: 1-3 using 2 digits in CalKestis
Found bgnlock files: 1-1 using 2 digits in CalKestis
Found font files: 1-1 using 2 digits in CalKestis
Found stab files: 1-4 using 2 digits in CalKestis
Found force files: 1-12 using 2 digits in CalKestis
Found hum files: 1-1 using 2 digits in CalKestis
Found boot files: one unnumbered file in CalKestis
Done listing effects.
Now if I do an sdtest:
sdtest
SD card is busy, flags= medium
Playing CalKestis/color01.wav
Failed to open!
Playing CalKestis/enddrag01.wav
Failed to open!
… etc
Now, what I don’t understand here, is that all those files show up and are playable when either the SD card is inserted directly into the computer, or if they’re in the proffie and the sd is automatically mounted when the proffie is plugged into the usb. Also, nothing I do here turns the LED lights on at all.
If you have mass storage turned on, the board can’t use the SD card as it’s mounted to the PC. That’s why you get SD card is busy messages.
You need to safely “eject” the SD from the PC, then the Proffieboard can use it.
Also, the only reason effects
shows those files is because that list was created when ProffieOS first scanned the font folder at boot, before the PC took over.
If you had changed presets and went back with still no SD card available, effects
would be then be empty, and you would not have heard any font.wavs play during those preset changes either because again, SD card is busy (being used by the computer), like it says
Ok, thanks for the info about un-mounting. I got sdtest to work properly now. After playing the CalKestis wav files I get this result at the end:
Time to open files: Average time: 38687.04 us
I can change directory to the CalKestis and use the play command and sounds play properly through the speaker. Weird thing is that when I run the pow command I get no sound… also nothing I do seems to light up the tri-cree or even the power button. Also I get the clash sounds when I shake the proffie board around but I’m getting no blade hum either. Thanks for any help you guys are able to provide, this isn’t my first time with programming, but it is my first go with a proffie.
The config is as follows:
#ifdef CONFIG_TOP
#include "proffieboard_v2_config.h"
#define NUM_BLADES 1
#define NUM_BUTTONS 1
#define VOLUME 100
const unsigned int maxLedsPerStrip = 144;
#define CLASH_THRESHOLD_G 1.0
#define ENABLE_AUDIO
#define ENABLE_MOTION
#define ENABLE_WS2811
#define ENABLE_SD
#endif
#ifdef CONFIG_PRESETS
Preset presets[] = {
{ "CalKestis", "tracks/bgm4.wav",
StyleNormalPtr<CYAN, WHITE, 300, 800>(), "cyan"},
{ "Ahsoka", "tracks/bgm3.wav",
StylePtr<InOutSparkTip<EASYBLADE(BLUE, WHITE), 300, 800> >(), "blue"},
{ "Obiwan", "tracks/bgm1.wav",
StyleNormalPtr<RED, WHITE, 300, 800>(), "red"},
{ "Luke", "tracks/bgm3.wav",
StylePtr<InOutHelper<EASYBLADE(OnSpark<GREEN>, WHITE), 300, 800> >(), "green"},
{ "KyloRen", "tracks/bgm10.wav",
StyleNormalPtr<WHITE, RED, 300, 800, RED>(), "white"},
{ "Anakin", "tracks/bgm1.wav",
StyleNormalPtr<AudioFlicker<YELLOW, WHITE>, BLUE, 300, 800>(), "yellow"},
{ "Vader", "tracks/bgm2.wav",
StylePtr<InOutSparkTip<EASYBLADE(MAGENTA, WHITE), 300, 800> >(), "magenta"}
};
BladeConfig blades[] = {
{ 0, SimpleBladePtr<CreeXPE2RedTemplate<1000>, CreeXPE2GreenTemplate<0>, CreeXPE2BlueTemplate<240>, NoLED, bladePowerPin1, bladePowerPin2, bladePowerPin3, -1>(), CONFIGARRAY(presets) },
};
#endif
#ifdef CONFIG_BUTTONS
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");
#endif
This isn’t the most interesting part of the sdtest output.
However, it is far too high. ProffieOS only has a 11ms buffer, so if it takes 38.6ms to open a file, you get a large audio glitch every time. You probably need a new SD card.
As for “pow” not working, what does it say in the serial monitor?
Is it because it’s mounted again?
Ok, holy moly does the sd card make a difference. It looks like that card was causing 99% of the problems. The only thing now seems to be the power button led won’t light up (it’s connected to power and the LED6 pad). Do I need to do any programming to make it light up? If so can you point me towards an example? Also a side note, the tri-cree, should I solder the resistors directly into the pads and bend the leads/tuck the resistor in the heat sink crevasse? Otherwise I’m finding that it’s tight stuffing them into the button/charge port space.
yes
Use the configurator, select “single-color crystal chamber”.
The styles may be slightly different, but the blade code is the same as for a light-up button.
The resistors can go anywhere, near the LEDs, near the proffieboard, or anywhere in between. Bending this is fine, as long as nothing is touching…
Ok, so if I understand correctly, I need the following:
#define NUM_BLADES 2
...
Preset presets[] = {
{ "CalKestis", "tracks/bgm4.wav",
StyleNormalPtr<CYAN, WHITE, 300, 800>(),
StyleNormalPtr<WHITE, WHITE, 300, 800>(), "cyan"},
...
BladeConfig blades[] = {
{ 0, SimpleBladePtr<CreeXPE2RedTemplate<1000>, CreeXPE2GreenTemplate<0>, CreeXPE2BlueTemplate<240>, NoLED, bladePowerPin1, bladePowerPin2, bladePowerPin3, -1>(),
SimpleBladePtr<CreeXPE2WhiteTemplate<550>, NoLED, NoLED, NoLED, bladePowerPin6, -1, -1, -1>()
, CONFIGARRAY(presets) },
};
I’m guessing that blade 2 is the led light on the momentary switch, if it’s attached to pin 6. Now, the button led will mirror the blade effect? How would I change it to be more “useful” so that I could use it for menu settings changes? Or is that not a good use of the led? Sorry for the questions, but I’m only familiar with the lgt blinking led that you use to navigate the color/sound changes and such.
I’m familiar with what you’re saying.
To expound on it a bit for other’s understanding, the way they use the LED in the switch is to indicate time passage.
Holding the button for N milliseconds makes it blink once. If you continue to hold it, it blinks a second time, then a third, and so on.
Each time delay is tied to a different menu choice, so releasing the button at that time triggers that option.
Example:
release after 2 flashes = preon type change
release after 3 flashes = base blade style change
release after 4 flashes = sound font change
The button use in ProffieOS is dependent on which prop file you use. If none is specified (as in your case based on your basic config posted above) then you will use the default file named saber.h.
None of the current available prop files are really set up to function as that feature, where longer holds make different choices.
You can open the prop files with any text editor and you should read through the “how-to” instructions that are in the top commented section of each to get a better understanding of what “menu options” are available and how to do them.
The files are in the ProffieOS/props folder.
If one were to make a system that used a similar “follow the flashes” method, you could probably set up a bunch of USER effects in the “color when off” part of an InOutTr layer, then have the prop file listen for events of specific timings based on button timeouts and trigger those USER effects to achieve the blinking.
For example, something like:
// define button timeouts in prop file
#ifndef BUTTON_HELD_TIMEOUT
#define BUTTON_HELD_TIMEOUT 300
#endif
#ifndef BUTTON_HELD_MEDIUM_TIMEOUT
#define BUTTON_HELD_MEDIUM_TIMEOUT 800
#endif
#ifndef BUTTON_HELD_LONG_TIMEOUT
#define BUTTON_HELD_LONG_TIMEOUT 1300
#endif
// Set button events to trigger user effects
case EVENTID(BUTTON_POWER, EVENT_FIRST_HELD, MODE_OFF):
SaberBase::DoEffect(EFFECT_USER1, 0);
return true;
case EVENTID(BUTTON_POWER, EVENT_FIRST_HELD_MEDIUM, MODE_OFF):
SaberBase::DoEffect(EFFECT_USER2, 0);
return true;
case EVENTID(BUTTON_POWER, EVENT_FIRST_HELD_LONG, MODE_OFF):
SaberBase::DoEffect(EFFECT_USER3, 0);
return true;
Then the blade style could be like:
StylePtr<Layers<
White,
InOutTrL<TrInstant,TrInstant,Layers<
Black,
TransitionEffectL<TrConcat<TrDelay<300>,White,TrDelay<300>>,EFFECT_USER1>,
TransitionEffectL<TrConcat<TrDelay<800>,White,TrDelay<300>>,EFFECT_USER2>,
TransitionEffectL<TrConcat<TrDelay<1300>,White,TrDelay<300>>,EFFECT_USER3>>>>>()
This is not for the faint of heart, as editing a prop file requires careful consideration for which events you set as there are existing features that may be “in the way” because they already use the event you want to assign, and therefore need to either be moved to a different button, different timing, different mod combo etc…
For example, in my saber_BC_buttons prop file, there’s already an event for EVENT_FIRST_HELD_MEDIUM when MODE_OFF:
// Toggle Scroll Presets
case EVENTID(BUTTON_POWER, EVENT_FIRST_HELD_MEDIUM, MODE_OFF):
scroll_presets_ = !scroll_presets_;
SaberBase::DoEffect(EFFECT_NEWFONT, 0);
return true;
In this case, it’s relatively easy to ADD the button blink to that case, as in:
// Toggle Scroll Presets
case EVENTID(BUTTON_POWER, EVENT_FIRST_HELD_MEDIUM, MODE_OFF):
scroll_presets_ = !scroll_presets_;
SaberBase::DoEffect(EFFECT_NEWFONT, 0);
SaberBase::DoEffect(EFFECT_USER2, 0);
return true;
however this would mean you wanted the second button blink to do that sequence of toggling a scroll presets mode, announce the current font by playing font.wav, and show any blade effect that uses EFFECT_NEWFONT in the style.
If instead you wanted the 2nd blink to do something else, this existing event would need to be reassigned, and then you’d need to move it to an available button combo that doesn’t conflict with something else already etc…
In other words, it’s possible, but a bunch of work.
TL;DR You might be best off simply giving the button blade styles that make it blink and pulse and stuff, but not be specifically tied to visual feedback for driving controls.
OOF! Ok, I will not be trying to build any of that. On that note, I should have mentioned I’m including saber_fett263_buttons.h. I browsed the file, but am unsure if any of the one button controls are automatically ready/tied to/set up for an led status type of blink. Is this actually a good use of this button? Or should it be set just to be lit when the saber is on, and turn off when the saber fully turns off? Also, any sample code for doing this?
On a related note, I did try the fett263 style editor, and the code that it generates seems quite long for a simple RGB Tri-Cree. I get this for something very simple with almost no options selected. I really feel like I’m doing something wrong here as I’m really just wanting to have a simple color like blue for the saber, white for clash nothing fancy (at least to start). TBH, I’m not even sure what options are useful or actually work with just an RGB. I “think” that things like the ignition options wouldn’t work since there aren’t multiple LED’s to give a partially lit blade effect, but the other things there seem less obvious. I also have absolutely no idea what’s going on with the code below though. Maybe there’s a tutorial you could point me towards for detailed non pixel blade configuration?
Again, sorry for all the questions, but this is my first time trying to understand how all the programming fits together here.
/* copyright Fett263 Rotoscope (Primary Blade) OS7 Style
https://fett263.com/fett263-proffieOS7-style-library.html#Rotoscope
OS7.12 v1.017-p
This Style Contains 2 Unique Combinations
Style Options:
Default (0): Hyper Responsive Rotoscope (Original Trilogy)
1: Rotoscope - Single Color (Sequels)
Base Color: BaseColorArg (0)
--Effects Included--
Ignition Effect: Standard Ignition [Color: IgnitionColorArg]
Retraction Effect: Standard Retraction [Color: RetractionColorArg]
Lockup Effect: Intensity Lockup V1, Begin Effect: Real Clash, End Effect: Full Blade Absorb [Color: LockupColorArg]
LightningBlock Effect: Responsive Lightning Block [Color: LBColorArg]
Drag Effect: Intensity Sparking Drag [Color: DragColorArg]
Melt Effect: Intensity Melt [Color: StabColorArg]
Blast Effect: Blast Wave (Random) [Color: BlastColorArg]
Clash Effect: Real Clash V1 [Color: ClashColorArg]
*/
StylePtr<Layers<ColorSelect<IntArg<STYLE_OPTION_ARG,0>,TrInstant,Mix<HoldPeakF<SwingSpeed<250>,Scale<SwingAcceleration<100>,Int<50>,Int<500>>,Scale<SwingAcceleration<>,Int<20000>,Int<10000>>>,RandomFlicker<StripesX<Int<15000>,Scale<HoldPeakF<SwingSpeed<200>,Scale<SwingAcceleration<100>,Int<50>,Int<300>>,Scale<SwingAcceleration<100>,Int<24000>,Int<16000>>>,Int<-3200>,Int<-200>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RandomFlicker<Stripes<14000,-4000,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<16448>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,255,255>>,Scale<EffectRandomF<EFFECT_BLAST>,Int<100>,Int<400>>,Int<100>,Scale<EffectPosition<EFFECT_BLAST>,Int<100>,Int<400>>,Scale<EffectPosition<EFFECT_BLAST>,Int<28000>,Int<8000>>>,EFFECT_BLAST>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,TransitionEffectL<TrConcat<TrInstant,AlphaL<RgbArg<CLASH_COLOR_ARG,Rgb<255,255,255>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<12000>,Int<60000>>>>,TrFadeX<Scale<ClashImpactF<>,Int<200>,Int<400>>>>,EFFECT_CLASH>,TransitionEffectL<TrWaveX<RgbArg<CLASH_COLOR_ARG,Rgb<255,255,255>>,Scale<ClashImpactF<>,Int<100>,Int<400>>,Int<100>,Scale<ClashImpactF<>,Int<100>,Int<400>>,Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>>,EFFECT_CLASH>>,LockupTrL<TransitionEffect<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrJoin<TrDelay<8000>,TrInstant>,TrFade<3000>,EFFECT_LOCKUP_BEGIN>,TrConcat<TrJoin<TrDelay<50>,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrFade<300>>,TrConcat<TrInstant,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL<Strobe<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,AudioFlicker<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,Blue>,50,1>,TrConcat<TrInstant,AlphaL<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,Int<16000>>,30>,TrSmoothFade<600>>>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,255>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,255>>,Int<300>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrFade<4000>>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL<AlphaL<Remap<Scale<RampF,Int<65536>,Int<0>>,StaticFire<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>>>,Mix<TwistAngle<>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>>,RotateColorsX<Int<3000>,Mix<Int<12000>,Black,RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>>>>,0,3,5,3000,10>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrConcat<TrWipeIn<100>,AlphaL<RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrJoin<TrDelay<4000>,TrFade<300>>,AlphaL<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,68,0>>>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrFade<4000>>,TrWipe<200>,SaberBase::LOCKUP_MELT>,InOutTrL<TrWipeX<BendTimePowInvX<IgnitionTime<300>,Mult<IntArg<IGNITION_OPTION2_ARG,10992>,Int<98304>>>>,TrWipeInX<BendTimePowInvX<RetractionTime<0>,Mult<IntArg<RETRACTION_OPTION2_ARG,10992>,Int<98304>>>>,Black>>>(),
Many of these effects are definitely wasted on a tri-cree setup.
Not sure what the best setup is for a tri-cree though, just using StyleNormal with some flickering might be as good as it gets.
Use the “Accent LED/PCB” versions of the styles, they’re modified for simpler “blades”.
“Main Blade” styles are really intended for neopixels, you can use them but they expect localized effects and more support of complex animations that are not visible on a simple LED.
The effects and options on the “Accent” styles are typically set up for a single LED or small strip so they won’t contain effects that are intended for full neopixel blade.
Awesome guys, this is all starting to make sense. I also found another post of yours about the crackling sound, so I’m going to try and bridge the Batt+ and 5V pads and see if that works.