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.