How about this refactoring?
class CandleRack
{
public:
enum status_t
{
inactive = 0,
candlesOn = 1,
rewardAnimation = 2,
tweetArrived = 3,
partyMode = 4,
};
CandleRack(status_t status = inactive);
~CandleRack();
void begin();
void pushButton();
void selectRandomCandle();
void turnOnCandle(byte candlePosition);
void burnCandlesForMs();
void fadeOutCandle(byte candlePosition);
private:
Bounce *_debouncePushButton;
byte _pushButtonPin;
status_t _candleRackStatus;
byte _candlePosition;
byte _candleStatus[NUM_LEDS];
elapsedMillis _candleTimeElapsed[NUM_LEDS];
unsigned int _candleOnForMs;
};
And in a sketch with either the default setting (inactive)
CandleRack MyCandleRack;
or explicit
CandleRack MyCandleRack(CandleRack::candlesOn);
Cheers!