Motors run at an inconsistent speed when going in a specific direction

All of our motors except the ones programmed to run off the joysticks start and stop quickly when running in a certain direction. In one direction they will run flawlessly but when they go the other way they kind of kick around and start and stop.

#pragma config(Motor,  port2,           frontleft,     tmotorVex393HighSpeed_MC29, openLoop, driveLeft)
#pragma config(Motor,  port3,           backright,     tmotorVex393HighSpeed_MC29, openLoop, reversed, driveLeft)
#pragma config(Motor,  port4,           backleft,      tmotorVex393HighSpeed_MC29, openLoop, driveLeft)
#pragma config(Motor,  port5,           raiselowerclaw, tmotorVex393_MC29, openLoop, driveLeft)
#pragma config(Motor,  port6,           clawopenclose, tmotorServoStandard, openLoop)
#pragma config(Motor,  port7,           frontright,    tmotorVex393HighSpeed_MC29, openLoop, reversed, driveLeft)
#pragma config(Motor,  port8,           raiselowerlift, tmotorVex393_MC29, openLoop, driveLeft)
#pragma config(Motor,  port9,           clawpivot,     tmotorServoStandard, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

#pragma platform(VEX)

//Competition Control and Duration Settings
#pragma competitionControl(Competition)
#pragma autonomousDuration(20)
#pragma userControlDuration(120)

#include "Vex_Competition_Includes.c"   //Main competition background code...do not modify!

/////////////////////////////////////////////////////////////////////////////////////////
//
//                          Pre-Autonomous Functions
//
// You may want to perform some actions before the competition starts. Do them in the
// following function.
//
/////////////////////////////////////////////////////////////////////////////////////////

void pre_auton()
{
	// Set bStopTasksBetweenModes to false if you want to keep user created tasks running between
	// Autonomous and Tele-Op modes. You will need to manage all user created tasks if set to false.
	bStopTasksBetweenModes = true;

	// All activities that occur before the competition starts
	// Example: clearing encoders, setting servo positions, ...
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//                                 Autonomous Task
//
// This task is used to control your robot during the autonomous phase of a VEX Competition.
// You must modify the code to add your own robot specific commands here.
//
/////////////////////////////////////////////////////////////////////////////////////////

task autonomous()
{
	motor[frontleft] = 127;
	motor[frontright] = 127;
	motor[backleft] = 127;
	motor[backright] = 127;
	wait1Msec(1000);
	motor[frontleft] = 0;
	motor[frontright] = 0;
	motor[backleft] = 0;
	motor[backright] = 0;
	// .....................................................................................
	// Insert user code here.
	// .....................................................................................

	AutonomousCodePlaceholderForTesting();  // Remove this function call once you have "real" code.
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//                                 User Control Task
//
// This task is used to control your robot during the user control phase of a VEX Competition.
// You must modify the code to add your own robot specific commands here.
//
/////////////////////////////////////////////////////////////////////////////////////////

task usercontrol()
{
	while(true)
	{
		motor[backleft] = vexRT[Ch3];
		motor[frontleft] = vexRT[Ch3];
		motor[backright] = vexRT[Ch2];
		motor[backleft] = vexRT[Ch2];

		if(vexRT[Btn6U] == 1)
		{
			motor[clawopenclose] = 127;
		}
		if(vexRT[Btn6D] == 1)
		{
			motor[clawopenclose] = -127;
		}
		if(vexRT[Btn5D] == 1)
		{
			motor[raiselowerclaw] = -127;
			motor[raiselowerlift] = 127;
		}
		if(vexRT[Btn5D] == 0)
		{
			motor[raiselowerclaw] = 0;
			motor[raiselowerlift] = 0;
		}
		if(vexRT[Btn5U] == 1)
		{
			motor[raiselowerclaw] = 127;
			motor[raiselowerlift] = -127;
		}
		if(vexRT[Btn5U] == 0)
		{
			motor[raiselowerclaw] = 0;
			motor[raiselowerlift] = 0;
		}
		if(vexRT[Btn5U] == 1)
		{
			motor[raiselowerclaw] = 127;
			motor[raiselowerlift] = -127;
		}
		if(vexRT[Btn5U] == 0)
		{
			motor[raiselowerclaw] = 0;
			motor[raiselowerlift] = 0;
		}
		if(vexRT[Btn8U] == 1)
		{
			motor[clawpivot] = 127;
		}
		if(vexRT[Btn8D] == 1)
		{
			motor[clawpivot] = -127;
		}
	}
	// User control code here, inside the loop


	// This is the main execution loop for the user control program. Each time through the loop
	// your program should update motor + servo values based on feedback from the joysticks.

	// .....................................................................................
	// Insert user code here. This is where you use the joystick values to update your motors, etc.
	// .....................................................................................

	UserControlCodePlaceholderForTesting(); // Remove this function call once you have "real" code.
}

Would it help your robot if when vexRT[Btn8U] == 0, the motor[clawpivot] = 0; ?

In other words, it appears to me that your commands cause the motors to run full throttle in one direction, then the motors never stop until they are told to run full throttle in the opposite direction. Is that what you intend? or would you rather have a motor shut off when you are not pressing its particular control button? Running one direction then the other is probably hard on the motors and on your machine.

The problem is only during driver control because those motors dont even move during autonomous

That is a servo so it needs to hold the position so that is what our goal is

I have been having this issue too, and I have tried with many different programs. They all seem to break. This was the reason I didn’t do well at my last competition. My joysticks work flawlessly, but the buttons don’t work.
Can anyone help?

The way I have been doing it was:


motor[motorName] = vexRT[Btn8U]*127;

And they jump around.

I just tested this and it works flawlessly. Thank you so much you’re a life saver.

This too happened to me during driver. I added a wait1Msec(1); like this:

if(vexRT[Btn6U]==1 && SensorValue[PotencioBrazo]<2100)
{
motor[Brazo1]=motor[Brazo2]=motor[Brazo3]=motor[Brazo4]=127;
wait1Msec(1);
}

And now it works just fine:D