Can continuously Motor running after its stop?

Hi , I meet a problem. can anyone finger out which wrong.

Enviroement: V5
Motor: 4-wheel
My code:

main.cpp

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();
 .....
  main_brain.Screen.print("Main function running...");

  //print all sensor value
  task displayTaskInstance(displayTask);


  repeat(2) {
    
    drive_train.driveFor(1000, mm);
    wait(1, sec);

    drive_train.setDriveVelocity(30, percent);

    
    drive_train.turnFor(90, degrees);
    wait(1, seconds);

   
    drive_train.turnFor(-90, degrees);
    wait(1, seconds);

    //stop
    drive_train.stop();
  }

  while (true) {

    //joystick 4 forword & back
    int axis_forward_back_value = main_controller.Axis3.value();
    drive_train.drive(direct(axis_forward_back_value),
                      abs(axis_forward_back_value), velocityUnits::pct);

    //joystick 4 turn left & right
    int axis_left_right_value = main_controller.Axis4.value();
    drive_train.turnFor(axis_left_right_value, degrees, false);
  }
  return 0;
}

Problem:
1.drive_train.stop(); invoked , the joystick will not work.
2.if i comment drive_train.stop(); the joystick can controller forword & back ,but not turn left & right.

thanks.

image

Hm, so drive_train.turnFor is not designed to be used with a continuously variable input such as controller joystick values. drive_train. drive should work, but that was not a use case we tested. Generally, to control the drive train with a controller, access the motors (or motor groups) directly.

I’ll check tomorrow why drive_train.stop would have any impact, it really shouldn’t.

3 Likes

Thanks lots 4 quick reply.

I guess turnFor does not work cause of drive_train. drive always act. tonight i will try .

drive_train.drive is basically a wrapper that sends a spin command to left and right motors.
drive_train.turnFor is a wrapper that uses motor.spinFor on left and right motors (or motor groups). spinFor uses the motor’s internal PID code to move the motor to a new position, it doesn’t like to be repeatedly called with new values in a tight loop.

We do have a drive_train.arcade method available in text, it has code that looks like (more or less, not exactly) this.

void
drivetrain::arcade( double drivePower, double turnPower, percentUnits units ) {
    lm.spin( directionType::fwd, drivePower + turnPower, units );
    rm.spin( directionType::fwd, drivePower - turnPower, units );
}

but you can find the left and right motor instances and do the same thing in your own code.,

3 Likes

thanks again.

i can not found any arcade function desc from VEX Help

and there is not any brief doc in …/include/vex_drivertrain.h

would u kindly post the arcade function implements here ?

Hi Jpearman ,

could you show me code how to use joystick controller the drive turn angle ?thanks.