2016-10-10 5 views
0

ROBOTCでコード化されたXドライブがあります。私のチームと私はすでにロボットに組み込まれたモーターエンコーダを持っています(自律的な期間)。しかし、それらを実行するためのコードが間違っています。現在の自律コードは以下のとおりです。私はそれを実行すると、それは永遠に、そして異なるスピードで前進します。ROBOTC - 統合エンコーダ付き自律プログラミング

私は複数のチュートリアルを見てきましたが、どちらも機能しません。 モーター(393モーター)を720にするコードは誰も持っていますか?


#pragma config(I2C_Usage, I2C1, i2cSensors) 
#pragma config(Sensor, I2C_1, sensorQuadEncoderOnI2CPort, AutoAssign) 
#pragma config(Motor, port2, FL, tmotorVex393_MC29, PIDControl, encoderPort, I2C_1) 
#pragma config(Motor, port3, BR, tmotorVex393_MC29, PIDControl, reversed, encoderPort, I2C_1) 
#pragma config(Motor, port8, BL, tmotorVex393_MC29, PIDControl, encoderPort, I2C_1) 
#pragma config(Motor, port9, FR, tmotorVex393_MC29, PIDControl, reversed, encoderPort, I2C_1) 
//*!!Code automatically generated by 'ROBOTC' configuration wizard    !!*// 

task main() 
{ 
// Autonomous with Integrated Encoders 
nMotorPIDSpeedCtrl[FL] = mtrSpeedReg; 
nMotorPIDSpeedCtrl[FR] = mtrSpeedReg; 
nMotorPIDSpeedCtrl[BL] = mtrSpeedReg; 
nMotorPIDSpeedCtrl[BR] = mtrSpeedReg; 

//Clears motor values 
nMotorEncoder[FL] = 0; 
nMotorEncoder[FR] = 0; 
nMotorEncoder[BL] = 0; 
nMotorEncoder[BR] = 0; 

//Forward 
motor[FL] = 63; 
motor[FR] = 63; 
motor[BL] = 63; 
motor[BR] = 63; 
    while(nMotorEncoder[FL] < 720) { 
} 

//Clears motor values 
nMotorEncoder[FL] = 0; 
nMotorEncoder[FR] = 0; 
nMotorEncoder[BL] = 0; 
nMotorEncoder[BR] = 0; 

} 
+0

エンコーダ値は減少の代わりに増加していませんか? 'while '条件を' nMotorEncoder [FL]> -720'に変更してみてください。 – qxz

答えて

3

あなたは、whileループの後に(ちょうどエンコーダをゼロではない)、明示的にモータを停止する必要があります。さもなければ、ロボットは停止することを知らない。エンコーダのターゲットを通過したことを知っているだけです。

ので、このコードは、あなたのために働く必要があります。

//Clears motor values 
nMotorEncoder[FL] = 0; 
nMotorEncoder[FR] = 0; 
nMotorEncoder[BL] = 0; 
nMotorEncoder[BR] = 0; 

motor[FL] = 63; 
motor[FR] = 63; 
motor[BL] = 63; 
motor[BR] = 63; 
//Forward 
while(nMotorEncoder[FL] < 720) { 
} 
//stops motors 
motor[FL] = 0; 
motor[FR] = 0; 
motor[BL] = 0; 
motor[BR] = 0; 
//Clears motor encoder values 
nMotorEncoder[FL] = 0; 
nMotorEncoder[FR] = 0; 
nMotorEncoder[BL] = 0; 
nMotorEncoder[BR] = 0; 
関連する問題