Answered: Problem with Servo Motors

I’m using the vex servo motors with a robot I’m building. The problem is, (a) They don’t work, (b) They seem to corrupt the robot, so after I plug them in, I have to redownload the firmware to upload a new software. I’m on RobotC 1.7 beta (It’s for school and the admins haven’t let me update yet) Here’s my source code

#pragma config(Sensor, in4,    rightLight,          sensorReflection)
#pragma config(Sensor, in5,    leftLight,           sensorReflection)
#pragma config(Sensor, in9,    Ultrasonic,          sensorSONAR, int1)
#pragma config(Motor,  port2,           rightMotor,    tmotorNormal, openLoop, reversed)
#pragma config(Motor,  port3,           leftMotor,     tmotorNormal, openLoop)
#pragma config(Motor,  port8,           servo,         tmotorNormal, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

//Directions:
//    1: Forward
//    2: Left
//    1: Right
//    1: Backward

int move(int timeMoving,int direction);
void turn_off();

task main () {
    
    // Starting Values
    int darkValue = 180;
    int robotMaxDistance = 20; //Robot sensed with 60"
    //Wait Seven Seconds after turned on
    turn_off();
    wait1Msec(3000);
    //Continuously Loop
    while (true) {
//Detect for Robot
if (SensorValue(Ultrasonic) < robotMaxDistance) {
//turn servo motor left
motor[port8] = -127;
} else {
//turn servo motor right
motor[port8] = 127;
}
//Detect edges of Ring
if(SensorValue[rightLight] >= darkValue || SensorValue[leftLight] >= darkValue)  {
move(80, 90);
//if both sensors are black move away
if (SensorValue[rightLight] >= darkValue && SensorValue[leftLight] >= darkValue){
turn_off();
move(600, 4);
move(800, 3);
}
//if right sensor is black move away
if(SensorValue[rightLight]  >= darkValue) {
turn_off();
move(600, 4);
move(800, 2);
}
//if left sensor is black move away
if(SensorValue[leftLight] >= darkValue) {
turn_off();
move(600, 4);
move(800, 3);
}
//// if the sonar pointed toward the left, turn right,
} else if (motor[port8] >= 50) {
move(1, 3);
//if the sonar pointed toward the left, turn left,
} else if (motor[port8] <= -50) {
move(1, 2);
//else if it's not right or left, move forward
} else {
move(1, 1);
}
    }       
}

int move(int timeMoving,int direction) {
    //beginning variables set
    int left_speed;
    int right_speed;
    int leftMotorValue = 127;
    int rightMotorValue = 100;
//if forward
    if (direction == 1) {
left_speed = leftMotorValue;
right_speed = rightMotorValue;
//if left
} else if (direction == 2) {
left_speed = leftMotorValue;
right_speed = -rightMotorValue;
//if right
} else if (direction == 3) {
left_speed = -leftMotorValue;
right_speed = rightMotorValue;
//if backward
} else if (direction == 4) {
left_speed = -leftMotorValue;
right_speed = -rightMotorValue;
}
    //move
motor[port2] = left_speed;
motor[port3] = right_speed;
    //stay moving
wait1Msec(timeMoving);
return 0;
}

void turn_off() {
    //Shut down
    motor[port3]= 0;
    motor[port2]= 0;
    //wait
    wait1Msec(100);
}

Bumped because nobody’s helped yet. I updated to RobotC 2.0 and no luck. The microcontroller won’t accept the new firmware.

Unless someone helps out, I think I’m just going to try using a quadratic encoder and a normal motor.

**We can not discuss programming questions in this section – you should repost were the VEX Community can answer if you are still having problems with code. You should download Default Code to see if they act differently. Note: VEX Servos only have about 100 degree of rotation, VEX Motor will move the full 360 degree in both directions. **