DC Motors and Motor Control

Overview

DC motors drive wheels, arms, and other moving parts. Access motors through the hardwareMap—an FTC SDK object that provides references to configured devices. Declare motors as member variables and initialize them in runOpMode().

Initialization and Basic Control

private DcMotor leftDrive, rightDrive;

@Override
public void runOpMode() {
    leftDrive = hardwareMap.get(DcMotor.class, "left_drive");
    rightDrive = hardwareMap.get(DcMotor.class, "right_drive");
    
    leftDrive.setDirection(DcMotor.Direction.REVERSE); // Adjust for motor mounting
    leftDrive.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
    
    waitForStart();
    while (opModeIsActive()) {
        leftDrive.setPower(-gamepad1.left_stick_y);
        rightDrive.setPower(-gamepad1.right_stick_y);
        telemetry.update();
    }
    leftDrive.setPower(0);
    rightDrive.setPower(0);
}

Run Modes and Encoders

Use RUN_WITHOUT_ENCODER for basic power control. Use RUN_USING_ENCODER when you need position feedback. Use RUN_TO_POSITION for moving to a target. Reset encoders before use.

Encoder-Based Movement

leftDrive.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
leftDrive.setMode(DcMotor.RunMode.RUN_USING_ENCODER);

int target = 1000;
leftDrive.setPower(0.5);
while (opModeIsActive() && leftDrive.getCurrentPosition() < target) {
    telemetry.addData("Position", leftDrive.getCurrentPosition());
    telemetry.update();
}
leftDrive.setPower(0);

Troubleshooting

If a motor does not move: verify the configuration name matches exactly, check wiring, and ensure power is nonzero. For encoders, confirm the motor supports them and reset before use.

Further Reading

Open full interactive app