Proffie 2-based A180 woes

So, I’ve been doing this A180 project for a while. I messed up badly the first time I wired it all up–got some wires confused and soldered them to the wrong pins, had to desolder them and start over.

Now I’ve got it all wired, and I’m 99% certain the wiring is fine. But when I turned it on, nothing happens. I think the trigger switch may have failed (as in I broke a wire, maybe?) and will have to be filed out of the epoxy holding it in place (ugh). But when I plug the board in, nothing happens except some crunchy sound.

If I plug the board into my arduino and open the serial monitor, I can see that the secondary switch works, but it doesn’t seem to actually DO anything (I’m using the config that was shared on this board by Sabersforever, with a similar neopixel setup). No LEDs light up, no sound plays; the serial monitor doesn’t show the click is being seen by the board. If I use serial monitor to send a “fire” command, nothing happens, but the SM prints out the click event.

I can get it to play specific sound files with the “Play” command, but they are crunchy and barely recognizable. The “beep” command comes through clearly and distinctly.

The “Battery” command brings me all sorts of weird readings; even when plugged in the battery never seems to collect charge over 0.25 volts.

I know it’s probably impossible to diagnose where I Effed up this time, but if anyone has ideas, I’d love to hear 'em before I tear my hair out and desolder everything again, file out the epoxy, and start over. Right now I’m just leaving the charger plugged in for a while to see if anything at all improves. But I’m pretty sure I effed up again.

The sound will be better if you have battery power while plugged into USB.
Can’t tell if you’re using a blaster prop file or not. How about post the config file?

1 Like

I left the battery “charging” all night and it seems to have nothing this morning. The “Battery” command reports 0.15 volts. I need to get a multimeter and figure out if I borked the battery wiring to the recharge port or something, I guess.

Anyway, here’s the config file (as I said, it’s cribbed from another post here):

#ifdef CONFIG_TOP
#include "proffieboard_v2_config.h"
#define NUM_BLADES 2
#define NUM_BUTTONS 2
#define VOLUME 2000
const unsigned int maxLedsPerStrip = 144;
#define CLASH_THRESHOLD_G 1.0
#define ENABLE_AUDIO
#define ENABLE_WS2811
#define ENABLE_SD
#define DELAYED_OFF
#define ENABLE_BLASTER_AUTO
#endif

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

#ifdef CONFIG_PRESETS
Preset presets[] = {

// Custom Wipe to tip blast

{ "A180", "tracks/medley1.wav",
// muzzle
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrDelay<100>,White,TrFade<200>,Red,TrFade<300>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrDelay<100>,DeepSkyBlue,TrFade<200>,Blinking<Black,Blue,100,500>,TrFade<300>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrInstant,White,TrFade<50>,Red,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>>>(),

// barrel
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrWipe<100>,White,TrWipe<100>,Red,TrWipe<200>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrWipe<100>,DeepSkyBlue,TrWipe<100>,Blinking<Black,Blue,100,500>,TrWipe<200>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrWipe<50>,Red,TrWipe<100>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<150>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<150>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<150>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,0,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>>>(),
},

{ "DL44", "tracks/medley1.wav",
// muzzle
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrDelay<100>,Red,TrFade<200>,Black,TrFade<300>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrDelay<100>,White,TrFade<200>,Blinking<Black,Red,100,500>,TrFade<300>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrInstant,White,TrFade<50>,Red,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>>>(),

// barrel
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrWipe<100>,Red,TrWipe<100>,Black,TrWipe<200>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrWipe<100>,White,TrWipe<100>,Blinking<Black,Red,100,500>,TrWipe<200>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrWipe<50>,Red,TrWipe<150>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<200>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<200>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<200>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,0,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>>>(),
},

{ "Westar", "tracks/medley1.wav",
// muzzle
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrDelay<100>,DarkOrange,TrFade<200>,Black,TrFade<300>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrDelay<100>,Green,TrFade<200>,Blinking<Black,Yellow,100,500>,TrFade<300>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrInstant,DeepSkyBlue,TrFade<50>,DarkOrange,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>>>(),

// barrel
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrWipe<100>,DarkOrange,TrWipe<100>,Black,TrWipe<200>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrWipe<100>,Green,TrWipe<100>,Blinking<Black,Yellow,100,500>,TrWipe<200>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrWipe<50>,DarkOrange,TrWipe<150>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<DeepSkyBlue,Bump<Int<0>,Int<25000>>>,TrFade<200>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<200>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<200>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,25,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>>>(),
},};

BladeConfig blades[] = {
{ 0, WS281XBladePtr<1, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
WS281XBladePtr<13, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin4, bladePowerPin3> >()
, CONFIGARRAY(presets) },
};

#endif

#ifdef CONFIG_BUTTONS
Button FireButton(BUTTON_FIRE, powerButtonPin, "fire");
Button ModeButton(BUTTON_MODE_SELECT, auxPin, "modeselect");

#endif

Several of these problems (no lights, bad sound, low voltage in the battery monitior) are pointing to the proffieboard not getting any power from the battery, so start by checking that wiring. A multimeter is your friend, measure the voltage at the battery, then move the probes one step at a time until you find out where the voltage isn’t present anymore.

Once this problem is fixed, we can try to figure out if there are additional problems to work on…

Well, that was part of the problem. The kill switch I installed failed, and no power was getting to the board. I’ve fixed that problem. I’m still getting nothing when I pull the trigger switch, so I think I’m going to have to dig that out and install a new one without breaking it, too. Ugh.

Setting that aside, I sent the “Fire” command through the serial monitor, and the click appears in the monitor as if it was done with the button, but nothing happens. Am I wrong in assuming it ought to behave as if I pushed the switch?

It should be have nearly identical to pressing the fire button, yes.
Before you dig out the button, measure it with a multimeter.
You can either measure voltage with the board ON. Or you can use the beep function with the board off to see if the button is working as expected or not.

“Beep” works whether the board is powered or not. I’m getting no reading on the multimeter from the trigger wires. However, every once in a while, if I touch the positive on the multimeter to the the Button 1 pin, and the negative to the GND, the blaster fires. Not every time, though.

Also, only the muzzle LED goes off. I’m getting current to both neopixel strips, but neither is lighting up. I’m beginning to think I’m too stupid for this.

You have two neopixel strips that are not lighting up?
Are they wired in parallel?

Yes, two strips of 13 LEDs wired in parallel on LED2 and 3; then one LED on pins LED4 and 5. All the pins (and the soldered leads on each strip) register power.

ETA: I discovered the reason for the intermittent “firing,” it’s just that the probe touched the “RESET” pin. So that’s not actually a thing; it was just an accident.

So, where I am now, as near as I can tell: I’ve got power going to the board and all parts of the electronics, except maybe the trigger. Pushing the trigger switch does nothing. Via Serial Monitor, I’ve verified the clicks of the aux switch are being received, but not the trigger’s clicks.

Okay, progress has been made:

Board is now working. Main trigger was removed and replaced; it works perfectly. Aux switch also works to change firing mode and font.

Still not working: two 13-LED neopixel strips wired in parallel. They get power, but aren’t working, so I suspect it’s something in my config, but I’m not positive.

Have you checked if they are getting data?
(You can detect if data is being send by using the AC setting on your multimeter and measuring between GND and data. If data is sending you should see something close to one volt or so.)

Also, silly question: You didn’t wire the data signal to the data OUT on either of the nepixel strips, right?

Okay. The muzzle LED is getting data, and measures at 0.7. The data pin for the neopixel strips, though, registers at only 0.2.

I do not think I wired it wrong. But it’s my turn for a silly question: Everything in the configs says WS2811, but I just realized my LED strips are WS2812B. Is that a problem? Everything I’ve found online seems to suggest not, but I’m no expert.

It’s not a problem. WS2812B uses the same protocol and should just work.
WS2811 was just the first (that I know of) that used that particular protocol, so people use WS2811 as a generic name for anything that uses that protocol.

It’s possible that the lower voltage is normal, but it sounds too low for that.
If you disconnect the strips from the board, does it still measure at 0.2 at the board?

No; once I disconnected the strips, there is no reading at all between GND and Data at the board.

That either means that that particular data pin is not working, or that the configuration is wrong.
Try blade3Pin instead of blade2Pin ?

Not sure I understand; let’s do some checking:

Currently, the non-working strips are wired into Data1 (pin 16), and LED 2 & 3 (pins 18 and 19). The working muzzle LED is wired into Data 2 (pin 1) with a 470-ohm resistor, and is on LED 4 and 5 (pins 5 and 10). (I know the config file above says differently; that was wrong).

Just to see if I’m reading right, you’re saying to try moving the data for the strips to Data 3 (pin 17)? And this would require a resistor in the data line, yes?

I was going by the config file, which explains the confusion.

Yes.
But before you do that, try updating the config and change bladePin to blade3Pin, try do something that should activate the blade and measure the data output with a multimeter. If you still don’t see anything, then there is no point in moving things over, and maybe the problem is actually with the style rather than the blade config or wiring.

Okay, I tried that. I still saw nothing in either the behavior or the multimeter reading.
Here’s the config file (verified it’s correct):

#ifdef CONFIG_TOP
// #include "proffieboard_v2_config.h"
#include "proffieboard_v2_config.h"
#define NUM_BLADES 2
#define NUM_BUTTONS 2
#define VOLUME 1400
const unsigned int maxLedsPerStrip = 144;
#define CLASH_THRESHOLD_G 1.0
#define ENABLE_AUDIO
#define ENABLE_WS2811
#define ENABLE_SD
#define DELAYED_OFF
#define ENABLE_BLASTER_AUTO
#define BLASTER_SHOTS_UNTIL_EMPTY 30
#define BLASTER_JAM_PERCENTAGE 3
#endif

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

#ifdef CONFIG_PRESETS
Preset presets[] = {

// Custom Wipe to tip blast

{ "A180", "tracks/medley1.wav",
// muzzle
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrDelay<100>,White,TrFade<200>,Red,TrFade<300>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrDelay<100>,DeepSkyBlue,TrFade<200>,Blinking<Black,Blue,100,500>,TrFade<300>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrInstant,White,TrFade<50>,Red,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>>>(),

// barrel
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrWipe<100>,White,TrWipe<100>,Red,TrWipe<200>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrWipe<100>,DeepSkyBlue,TrWipe<100>,Blinking<Black,Blue,100,500>,TrWipe<200>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrWipe<50>,Red,TrWipe<100>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<150>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<150>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<150>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,0,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>>>(),
},

{ "DL44", "tracks/medley1.wav",
// muzzle
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrDelay<100>,Red,TrFade<200>,Black,TrFade<300>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrDelay<100>,White,TrFade<200>,Blinking<Black,Red,100,500>,TrFade<300>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrInstant,White,TrFade<50>,Red,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>>>(),

// barrel
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrWipe<100>,Red,TrWipe<100>,Black,TrWipe<200>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrWipe<100>,White,TrWipe<100>,Blinking<Black,Red,100,500>,TrWipe<200>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrWipe<50>,Red,TrWipe<150>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<200>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<200>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<200>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,0,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>>>(),
},

{ "Westar", "tracks/medley1.wav",
// muzzle
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrDelay<100>,DarkOrange,TrFade<200>,Black,TrFade<300>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrDelay<100>,Green,TrFade<200>,Blinking<Black,Yellow,100,500>,TrFade<300>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrInstant,DeepSkyBlue,TrFade<50>,DarkOrange,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>>>(),

// barrel
  StylePtr<Layers<
    Black,
    TransitionEffectL<TrConcat<TrWipe<100>,DarkOrange,TrWipe<100>,Black,TrWipe<200>>,EFFECT_FIRE>,
    TransitionEffectL<TrConcat<TrWipe<100>,Green,TrWipe<100>,Blinking<Black,Yellow,100,500>,TrWipe<200>>,EFFECT_STUN>,
    LockupTrL<Layers<
      TransitionLoopL<TrConcat<TrWipe<50>,DarkOrange,TrWipe<150>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<DeepSkyBlue,Bump<Int<0>,Int<25000>>>,TrFade<200>>>,
      TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<200>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<200>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,25,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>>>(),
},};

BladeConfig blades[] = {
{ 0, WS281XBladePtr<1, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin4, bladePowerPin5> >(),
WS281XBladePtr<13, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()
, CONFIGARRAY(presets) },
};

#endif

#ifdef CONFIG_BUTTONS
Button FireButton(BUTTON_FIRE, powerButtonPin, "fire");
Button ModeButton(BUTTON_MODE_SELECT, auxPin, "modeselect");

#endif

At this point, I’m frankly pretty happy I got the muzzle light to work, and I’m considering just leaving it as-is if I can’t get it solved to the original plan. Thank you for your advice.

Did you actually change bladePin to blade3Pin?
This stuff shouldn’t be hard unless something is broken or wired wrong.