Timer class

Hi, I have a problem, I use wait to time the motors on our robot, but then we ran into a problem where we would lose control of the robot untill it has finished the wait sequence. I have tried putting “myRobot->Drive(leftstick, rightstick)” in the function but we still would lose control. So I heard that I can use the Timer.h class to substitute for wait, I have tried this code on our bench top set up on a different cRio but it would jus run the motor non stop, when I disable it then enable, the motor starts running again. Can someone help me please?


class RobotDemo : public SimpleRobot

Timer *time;

public:

time->Reset():

Tele-op:

if (ArmStick.GetRawButton(11))
{
      time->Start();
      Carriage_motor->Set(1.0);
      if (time->Get() >= 60)
      {
         Carriage_motor->Set(0.0);
      }
}

I’ve made this mistake myself a few times. What’s happening is that it’s only checking to see if it should stop if and only if button 11 is pressed, which isn’t what you want. Another problem you’re running into is that the timer isn’t resetting after it completes it’s cycle, meaning it will only stop once and that’s it. Below is the new tele-op code:


void OperatorControl(void)
{
//this makes sure we're getting a good value from the timer
      time->Start();
      time->Reset();

      While(IsOperatorControl())
      {
            GetWatchdog().Feed();

//insert any other code you want ran during tele-op mode here

            if (ArmStick.GetRawButton(11) && time->Get() >= 60) 
            {
                  time->Reset();
                  Carriage_motor->Set(1.0);
            }
            if (time->Get() >= 60)
            {
                 Carriage_motor->Set(0.0);
            }
      }
}

One thing that you’ll notice is the second part I added to the first “if” statement. All this will do is make sure that the robot doesn’t reset it’s timer until after it’s completed it’s first cycle. Of course, you can remove it if you want.

I hope this helps!