VEXcode Pro V5'te Temel Robot Hareketlerini Kapsülleme

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

Ana amaç, kodlayıcı hesaplaması ve hareket manipülasyonları için değil, bazı temel hareket kodlarının işlevlere nasıl dahil edileceğini size göstermektir.

Aşağıdaki örnek hareket işlevleri, temel hareket kodunuzu oluşturmanıza yardımcı olacaktır:

  • Daha organize
  • Daha okunabilir
  • Daha az hataya açık

Öncelikle aşağıdaki temel değişkenleri tanımlamanız gerekecektir:

şamandıra Çarkı = 10.16;
kayan nokta WB = 36,75; //V5 Clawbot konfigürasyonuna dayalı

Not: Dişli oranını değiştirirseniz aşağıdaki hesaplama dişli oranına bağlı olarak biraz değişebilir.

Bu konu, motor kodlayıcıya odaklanan başka bir makalede ele alınacaktır:

float EncPerCm = 360/(tekerlek* M_PI);
float EncPerDeg = WB/Tekerlek;

Bu örnek yalnızca pivot dönüşü içindir. Örneğin sağ motor = 100, sol motor = -100 vb.

İkinci olarak, aşağıdaki örnekleri incelediğinizde parametreler ve bunların spesifikasyonları için çevrimiçi API referansına bakmanız önerilir. Parametreleri daha iyi anlamak içinhttps://api.vexcode.cloud/v5/html/adresini ziyaret edin ve örneğinrotateToarayın.


Örnek 1: Çeşitli Mesafelere Göre Düz Gidiş Hareketini Kapsülleme

şamandıra Çarkı = 10.16; 
kayan nokta WB = 36,75; 
float EncPerCm = 360,0 / (Tekerlek* M_PI); 

void reportMotionValues(motor m, int line){

  Brain.Screen.printAt(5,line, "%8.2lf%8.2lf%8.2f", 
    m.position(rev), 
    m.position(deg)); 
}

// mesafe santimetre cinsindendir
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float toplamEnc = mesafe * EncPerCm;
	
	// not: “deg” vex:: isim alanından gelir. Bu nedenle “deg” olarak da adlandırılan başka bir değişken 
        // oluşturmamalısınız. 

       LeftMotor.setVelocity(50,0, yüzde);
LeftMotor.spinToPosition(totalEnc, derece, false);

RightMotor.setVelocity(50,0, yüzde);
RightMotor.spinToPosition(totalEnc, derece, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); dönüş; } int main() { vexcodeInit(); goStraight(100.0); Brain.Screen.printAt(5,60, "Bitti"); reportMotionValues(LeftMotor, 30); reportMotionValues(RightMotor, 60); }

Örnek 2: Çeşitli Derecelere Göre Sola Dönüşleri Kapsülleme

şamandıra Çarkı = 10.16; 
kayan nokta WB = 36,75; 
float EncPerCm = 360,0 / (Tekerlek* M_PI); 
şamandıra EncPerDeg = WB / Tekerlek;

void turnRight(float dereceleri){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float toplamEnc = derece * EncPerDeg;
	
       // not: bu “derece” vex ad alanındandır
       LeftMotor.setVelocity(100.0, yüzde);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100,0, yüzde);
RightMotor.spinToPosition(-totalEnc, derece, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); dönüş; } int ana(){ ... sağa dön(90.0); ... }

Örnek 3: Hem Sol hem de Sağ'ı Tek Bir İşlevde Kapsülleme

void doTurning( float Degrees ) {
	//
üzerindeki turnRight ile tamamen aynı kod }

int main() {
...
   doTurning(90.0); // Sağ pivot dönüşü
...
   doTurning(-90.0); // Sola pivot dönüşü
}

Daha gelişmiş programlama için kodunuzu daha okunabilir hale getirmek istiyorsanız aşağıdakileri deneyebilirsiniz:

#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)

int main() {
...
   doLeftTurn(90.0);  
   Sağa Dönme Yap(90.0);
...
}

#defineönişlemci makro ifadesi olarak adlandırılır. Bu ifadeye bir sembol olarak bakın. Bu sembolün kodda geçtiği her yerde,,yerinedoTurning(belirtilen değer)ifadesiyle değiştirilecektir.

Önişlemci makrosu farklı ve kapsamlı bir konudur ve bu makalede ele alınmayacaktır.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: