I'm guessing that the issue is that both your start/stop commands terminate immediately. So, the following sequence occurs:
1. You press the button to start the shooter.
2. The command runs and turns on the shooter and then is finished.
3. The default command associated with your subsystem then runs (the one you defined in initDefaultCommand()).
This results in the motor being turned off almost instantaneously.
To see the difference, try commenting out your default command:
Code:
public void initDefaultCommand(){
// setDefaultCommand(new ShooterStop());
}
Alternatively, you could set your stop/start commands to be interruptible and update the isFinished() method to return false. In this case, they will both run until interrupted.
Hope that helps.