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.
Pagrindinis tikslas yra parodyti jums, kaip kai kuriuos pagrindinius judesio kodus įtraukti į funkcijas, o ne kodavimo įrenginiui apskaičiuoti ir manipuliuoti judesiais.
Šios pavyzdinės judesio funkcijos padės sukurti pagrindinį judesių kodą:
- Labiau organizuota
- Skaitomesnis
- Mažiau klaidų
Visų pirma, turėsite apibrėžti šiuos pagrindinius kintamuosius:
plūduriuojantis ratas = 10,16; plūduriuojantis WB = 36,75; //remiantis V5 Clawbot konfigūracija
Pastaba: jei pakeisite pavaros santykį, šis skaičiavimas gali šiek tiek pasikeisti, atsižvelgiant į perdavimo skaičių.
Tai bus aptarta kitame straipsnyje, kuriame pagrindinis dėmesys skiriamas variklio kodavimo įrenginiui:
float EncPerCm = 360/(ratas* M_PI); float EncPerDeg = WB/ratas;
Šis pavyzdys skirtas tik sukimuisi. Pvz dešinysis variklis = 100, kairysis variklis = -100 ir kt.
Antra, kai peržiūrite toliau pateiktus pavyzdžius, rekomenduojame ieškoti parametrų ir jų specifikacijų internetinėje API nuorodoje. Apsilankykite adresu:https://api.vexcode.cloud/v5/html/ir ieškokite, pvz.,rotateTo, kad susipažintumėte su parametrais.
1 pavyzdys: Įtraukite tiesioginį judesį pagal įvairius atstumus
plūduriuojantis ratas = 10,16;
plūduriuojantis WB = 36,75;
float EncPerCm = 360,0 / (ratas* M_PI);
void reportMotionValues(motor m, int line){
Brain.Screen.printAt(5,line, "%8.2lf%8.2lf%8.2f",
m.position (aps.),
m.position (deg));
}
// atstumas nurodytas centimetrais
void goStraight( float distance ){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = atstumas * EncPerCm;
// pastaba: „deg“ yra iš vex:: vardų erdvės. Todėl neturėtumėte
// sukurti kito kintamojo, taip pat pavadinto „deg“.
LeftMotor.setVelocity(50,0, proc.);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(50.0, proc.);
RightMotor.spinToPosition(totalEnc, deg, false);
while (LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
grąžinimas;
}
int main() {
vexcodeInit();
goStraight(100.0);
Brain.Screen.printAt(5,60, "Atlikta");
reportMotionValues(LeftMotor, 30);
reportMotionValues(RightMotor, 60);
}
2 pavyzdys: Įtraukite posūkius į kairę pagal įvairius laipsnius
plūduriuojantis ratas = 10,16;
plūduriuojantis WB = 36,75;
float EncPerCm = 360,0 / (ratas* M_PI);
plūduriuoti EncPerDeg = WB / Ratas;
void posūkis į dešinę( plūduriavimo laipsniai){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = laipsniai * EncPerDeg;
// pastaba: šis „deg“ yra iš vex vardų erdvės
LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(-100,0, proc.);
RightMotor.spinToPosition(-totalEnc, deg, false);
while(LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
grąžinimas;
}
int main(){
...
pasukti į dešinę(90.0);
...
}
3 pavyzdys: kairę ir dešinę įterpkite į vieną funkciją
void doTurning( float laipsniai ) {
// lygiai toks pat kodas kaip turnRight virš
}
int main() {
...
doTurning(90.0); // Dešinysis sukimosi posūkis
...
doTurning(-90.0); // Suka į kairę
}
Jei norite, kad programavimas būtų sudėtingesnis, jei norite, kad jūsų kodas būtų daug lengviau skaitomas, galite išbandyti šiuos veiksmus:
#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)
int main() {
...
doLeftTurn(90.0);
doRightTurning(90.0);
...
}
#definevadinama išankstinio procesoriaus makro išraiška. Pažvelkite į šią išraišką kaip į simbolį. Kad ir kur būtų šis simbolis kode, jisbus pakeistasišraiškadoTurning (nurodyta reikšmė).
Išankstinio procesoriaus makrokomanda yra kita plati tema ir šiame straipsnyje ji nebus aptariama.