/// <summary> /// Transforms the input values from controller to left and right speed /// values for the motors /// </summary> /// <param name="controller"></param> /// <returns>A Tuple(int, int) with left and right speed values</int></returns> private Tuple <int, int> CalculateSpeedValues(IRemoteController controller) { controller.Update(); float rightTrigger = controller.RightTrigger; float leftTrigger = controller.LeftTrigger; double rightThumbX = controller.RightThumb.X; int leftspeed = 0; int rightspeed = 0; // calculate speed based on left and right triggers (right trigger forward, left trigger backward) int tempSpeed = (int)((rightTrigger - leftTrigger));// / 255 * 100); if (rightThumbX > 0) { double multiplier = rightThumbX / 100; leftspeed = (int)(tempSpeed + multiplier * 255); rightspeed = (int)(tempSpeed - multiplier * 255); } else if (rightThumbX < 0) { double multiplier = rightThumbX / -100; leftspeed = (int)(tempSpeed - multiplier * 255); rightspeed = (int)(tempSpeed + multiplier * 255); } else { rightspeed = leftspeed = tempSpeed; } return(Tuple.Create(leftspeed, rightspeed)); }