2017-04-14 98 views
0

我目前在RobotC中爲Vex 2.0 Cortex編程。我使用編碼器使我的機器人直行。爲什麼我的嵌套while循環不工作?

這是我的代碼:

void goforwards(int time) 
{ 
    int Tcount = 0; 
    int speed1 = 40; 
    int speed2 = 40; 
    int difference = 10; 


    motor[LM] = speed1; 
    motor[RM] = speed2; 
    while (Tcount < time) 
    { 
     nMotorEncoder[RM] = 0; 
     nMotorEncoder[LM] = 0; 

     while(nMotorEncoder[RM]<1000) 
     { 
      int REncoder = -nMotorEncoder[RM]; 
      int LEncoder = -nMotorEncoder[LM]; 

      if (LEncoder > REncoder) 
      { 
       motor[LM] = speed1 - difference; 
       motor[RM] = speed2 + difference; 
       if (motor[RM]<= 0) 
       { 
        motor[RM] = 40; 
        motor[LM] = 40; 
       } 
      } 
      if (LEncoder < REncoder) 
      { 
       motor[LM] = speed1 + difference; 
       motor[RM] = speed2 - difference; 
       if (motor[RM]<= 0) 
       { 
        motor[RM] = 40; 
        motor[LM] = 40; 
       } 
       Tcount ++; 
      } 
     } 
    } 
} 


task main() 
{ 

    goforwards(10); 
} 

供參考,這些都是我的附註設置:

#pragma config(I2C_Usage, I2C1, i2cSensors) 
#pragma config(Sensor, dgtl2, ,    sensorDigitalIn) 
#pragma config(Sensor, dgtl7, ,    sensorDigitalOut) 
#pragma config(Sensor, I2C_1, ,    sensorQuadEncoderOnI2CPort, , AutoAssign) 
#pragma config(Sensor, I2C_2, ,    sensorQuadEncoderOnI2CPort, , AutoAssign) 
#pragma config(Motor, port1,   RM,   tmotorVex393_HBridge, openLoop, reversed, encoderPort, I2C_2) 
#pragma config(Motor, port10,   LM,   tmotorVex393_HBridge, openLoop, encoderPort, I2C_1) 

當我excecute代碼,機器人的編碼器值非常接近,但機器人停止在達到1000時移動。我認爲我寫的代碼應該在編碼器的值達到1千之後將編碼器的值返回到0,從而代碼應該在shell循環中重複迭代10次(在這種情況下)。我做錯了什麼?

+0

RobotC是**不是C **! – Olaf

回答

1

您正在更新Tcount錯誤的地方。這樣做只是在外部循環的末尾。

你現在寫的東西讓Tcount每次都有所增加。當它達到1000步時,Tcount已經是1000.

你的times是10.所以`Tcount> = time並且它不會再次進入outer while循環。

0

似乎內部循環的控制變量(即nMotorEncoder [RM])從不更新,這意味着內部循環將永遠迭代。也就是說,你永遠不會回到外部循環的身體