Program Motor to Make One Exact Revolution

We’re using a 12V Tetrix Motor connected to a spike. Right now, we’re trying to program the motor so that it starts and ends in the exact position but it never seems to do so. Please help.

Here is the current code we’re using:

            if (leftStick.getRawButton(3))
            {
                              
                    piston.set(Relay.Value.kForward);

                    new java.util.Timer().schedule(new TimerTask() {          
   
                    public void run() {
           
                        piston.set(Relay.Value.kOff);
                            
                   }
             }, 1000L); //motor spins for one second
               
            }

I believe you will need some kind of encoder to achieve that (unless your motor has one built in).

You’ll also probably have to control it with a speed controller, not a relay.

If this is for this year’s competition–the tetrix is not legal for FRC. It seems it would be difficult to consistently get one revolution just on time. Maybe add a limit switch?