Blade Detect Not Functioning

So I am having an issue with blade detect on my latest install. When I power on the saber it defaults into a blade configuration and not a no_blade configuration. I have two fonts one I have used SPEAK_BLADE_ID to determine if the proffieboard is seeing a change when a blade is added or removed and not getting any changes spoken. Unfortunately since I am using a chassis PCB for a removable chassis I cannot check this in serial monitor as the saber design wont let me get to the USB while the chassis in connected and dont have a stable way to connect the chassis halfs together with USB exposed.

A weird symptom I get is for the “&style_charging” the battery indicator is only shown on the hilt PCB not the blade, which is opposite of what it does on my working sabers that have the style written the exact same way.

I have tested continuity on all wires, both sections of removable chassis and as best as I could through a chassis connection as well and all wires seem to be going where they are supposed to be.
I am doing a one button install, removable chassis using a SHTOK Rotary Chassis and using the second button pin for passthrough of the blade detect line to my SHTOK NPXL PCB, with subblades for the HILT side PCB LEDs.

I have two other installs with blade detect that worked fine, so I have an idea what I am doing and have even tried a config from one of those and still not functioning correctly on this build. So I dont think it is a config issue, but something else. I have gotten a new PC since the last build and am using a different instance of ProffieOS than I was before, I have not reloaded configs on either of the other two sabers for risk of them failing. Fairly certain they were loaded with OS6.5 and trying 6.7 for this saber.

Config to double check me in case the issue is from there.

#ifdef CONFIG_TOP
#include "proffieboard_v2_config.h"
#define NUM_BLADES 2
#define NUM_BUTTONS 1
#define VOLUME 800
const unsigned int maxLedsPerStrip = 160;
#define CLASH_THRESHOLD_G 3.0
#define ENABLE_AUDIO
#define ENABLE_MOTION
#define ENABLE_WS2811
#define ENABLE_SD
#define COLOR_CHANGE_DIRECT
#define DISABBLE_DIAGNOSTIC_COMMANDS
#define IDLE_OFF_TIME 60 * 5 * 1000
//Minutes multiplies by seconds multiplied by milliseconds.
//#define SAVE_STATE
#define SHARED_POWER_PINS
#define BLADE_DETECT_PIN 17

#endif

#ifdef CONFIG_PROP
#include"../props/saber_sa22c_buttons.h"
#endif

#ifdef CONFIG_PRESETS

Preset no_blade[] = {
   { "Batt00", "tracks/Royalty.wav",
    &style_charging},
   { "No Blade", "tracks/Royalty.wav",
    StylePtr<Cylon<DeepSkyBlue, 6, 20>>(),
    StyleNormalPtr<BLACK, BLACK, 300, 800>()},
   { "No Blade", "tracks/Royalty.wav",
    StylePtr<ColorCycle<DeepSkyBlue,6,25,GREEN,20,100,5000>>(),
    StyleNormalPtr<BLACK, BLACK, 300, 800>()},
   { "No Blade", "tracks/Royalty.wav",
    StylePtr<ColorCycle<White,6,50,DeepSkyBlue,20,100,5000>>(),    
    StyleNormalPtr<BLACK, BLACK, 300, 800>()},
   { "No Blade", "tracks/Royalty.wav",
    StylePtr<Stripes<100,1000,DeepSkyBlue,Black,Black,Black>>(),    
    StyleNormalPtr<BLACK, BLACK, 300, 800>()},
   { "No Blade", "tracks/Royalty.wav",
    StylePtr<Gradient<Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>,Pulsing<Black,DeepSkyBlue,5000>,ColorCycle<Rgb<100,100,100>,15,50,Rgb<100,100,100>,15,50,1>>>(),
    StyleNormalPtr<BLACK, BLACK, 300, 800>()},
};

Preset blade[] = {
   { "Bank15", "tracks/Royalty.wav",
    StyleNormalPtr<BLACK, BLACK, 300, 800>(),
StylePtr<Layers<RandomFlicker<RotateColorsX<Variation,DeepSkyBlue>,RotateColorsX<Variation,Rgb<0,0,128>>>,TransitionEffectL<TrConcat<TrFade<400>,RotateColorsX<Variation,Rgb<90,180,255>>,TrDelay<1500>,RotateColorsX<Variation,Rgb<90,180,255>>,TrFade<800>>,EFFECT_FORCE>,TransitionEffectL<TrConcat<TrInstant,BrownNoiseFlickerL<AlphaL<White,Int<16000>>,Int<50>>,TrSmoothFade<600>>,EFFECT_LOCKUP_END>,ResponsiveLightningBlockL<Strobe<White,AudioFlicker<White,Blue>,50,1>,TrConcat<TrInstant,AlphaL<White,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<White,Int<16000>>,30>,TrSmoothFade<600>>>,ResponsiveBlastL<White,Int<400>,Scale<SwingSpeed<200>,Int<100>,Int<400>>,Int<400>>,ResponsiveClashL<White,TrInstant,TrFade<400>,Scale<BladeAngle<0,16000>,Int<4000>,Int<26000>>,Int<6000>>,LockupTrL<AlphaL<BrownNoiseFlickerL<White,Int<300>>,SmoothStep<Int<30000>,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL<AlphaL<Mix<TwistAngle<>,Red,Orange>,SmoothStep<Int<28000>,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL<TrWipe<300>,TrWipeIn<500>,Black>>>()},
   
   { "Batt00", "tracks/cantina.wav",
    &style_charging},
};

BladeConfig blades[] = {
 { 0, SubBlade(0,15,WS281XBladePtr<160, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
    SubBlade(16,159,NULL),
   CONFIGARRAY(blade), "blade" },


 { NO_BLADE, SubBlade(0,15,WS281XBladePtr<160, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
    SubBlade(16,159,NULL),
   CONFIGARRAY(no_blade), "noblade" },
};
#endif

#ifdef CONFIG_BUTTONS
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");
#endif

First of all, I think you mixed up the “blade” and “no_blade” preset arrays, because the &style_charging preset is in “blade[]” not “no_blade[]”. You probably want to fix that first.

If that’s not the problem, then we’ll need to do some testing/checking, and not being able to use the serial monitor is going to make that harder. However, we can use a multimeter to measure AC and DC voltage between GND and pin 17 to see what that looks like. What you should see is high or low when blade is connected, and AC when it’s not.

I don’t think I have mixed them up. I use &style_charging as a way to show the battery level and that works with a blade installed just fine on my other saber written the same way.

When I turn the saber on, I only have access to the Bank15 and Batt00 fonts which are intended to be my blade fonts. I have no clash sounds in the No Blade sound folder and get clash sounds with no blade installed and the font audio file that plays when the saber turns on is the one in “Bank15” so this is how I know its turning on with the fonts in Preset blade.

Unfortunately I have the same problem trying to measure voltages across pins, I cant access the board while making connections to the upper half of the chassis.
Guess my next course of action might be trying to find a way to fit the chassis together outside of the saber.

Is there anything I can test through the board and serial monitor with jumpers without it being fully installed? Can I use a jumper on the board while connected to serial monitor to see if a “blade” is being recognized when the blade power pin and pin17 are bridged.

Yep, you could do that.
If it works, the problem would seem to be somewhere in the wiring.

What should I look for on serial monitor? I did it once before to check for the presence of a blade when I did my first install to make sure it was working, but dont recall what to look for.

It should print out a bunch of stuff when detecting a blade attach/detach.
Attach it here and we can see if there is anything that looks werd.
If blade detect isn’t working, the expectation is that you won’t see anything in the serial monitor though.

I have tried jumpering on both the saber in question, and on one that I know blade detect is working, and serial monitor is not showing anything happening for either saber before, during, or after the action.

I know the one is working because I get the audio ques that the font style changes when I bridge and unbridge.

Does it matter which version of Arduino I am using? I am using 2.0.3

Do you see anything in the serial monitor at all?
Did you select the right port in arduino → tools?

Wait…
jumpering to LED* doesn’t do anything unless the blade is on.
You’ll need to jumper to GND.

Serial Monitor detects button presses and other actions. Just nothing for jumpering led and pin17.

I tried jumpering pin17 and ground and I get the same results, one the working saber it switches between blade and noblade but does not show any actions in serial monitor.

I was able to get serial monitor to recognize the blade changes on the working saber.

I switched back to the saber in question and do not get anything recognized in serial monitor when jumpering pin 17 with GND.

That’s really weird.
It’s supposed to at least print out the blade id here:

Also, it would need to reload the font, which I think should generate more printouts.

Do you have “blade” and “noblade” directories on your SD card for save files?

Save directories on the SD card are one thing I never really got worked out. Looked into them to try to better understand them as I thought that might be my issue. But I also dont have designated ones on either of my other sabers with no issues.

Here is what Serial Monitor gave me for the working saber.

ID: 507.00
NO Blade Detected
blade= 1
WS2811 Blade with 132 leds.
WS2811 Blade with 16 leds.
Style RAM = 148
Style RAM = 44
Scanning sound font: No Blade done
Activating polyphonic font.
Activating SmoothSwing V2
Accent Swings Enabled.
Polyphonic swings: 23
Monophonic swings: 0
Accent Slashes NOT Detected: 
Unmounting SD Card.
Amplifier off.
EVENT: Select-On millis=1162506
ID: 507.00
Blade Detected
blade= 0
WS2811 Blade with 132 leds.
WS2811 Blade with 0 leds.
Style RAM = 880
Style RAM = 148
Scanning sound font: Bank02 done
Activating polyphonic font.
Activating SmoothSwing V2
Accent Swings Enabled.
Polyphonic swings: 16
Monophonic swings: 0
Accent Slashes NOT Detected: 
unit = 0 vol = 0.50, Playing Bank02/boot/boot3.wav
channels: 1 rate: 44100 bits: 16

Very clear the blade ID happening, but with the saber in question, nothing is being populated at all when bridging GND with pin 17.

I still get caught up on the fact that the no blade isnt even detected in the slightest and it just powers on with a blade recognized.

Testing with a multimeter with no power if I am getting continuity on that pin to something else right now.

Well, problem identified. Apparently I have continuity between GND and Pin17 with no battery in my removable chassis.

That is not something I would have thought to check initially. This little problem has helped me significantly in learning more about how these settings function. I never would have though blade detect functions as a latching button to determine the connection.

Hopefully I can quickly find where the connection is coming from and resolve it.

Well that drove me crazy long enough. There is an 1188 ohm resistance between pin 17 and ground. I removed all wire connections from the board and this resistance still remains, so looks like there is a fault in the board somewhere.

Now the debate turns to use the board with a different pin for blade detect, (is this possible any open data should be able to be used for blade detect correct?) or try to get a replacement for the board in case something else is a larger issue.

Any unused data, button on serial pin can be used for blade ID. Should be plenty to choose from.

Used a different pin and it is functioning as expected.

Thank you for the help getting me to that solution.