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.
Päätavoitteena on näyttää, kuinka jotkin perusliikekoodit voidaan kapseloida funktioiksi, ei kooderin laskentaa ja liikemanipulaatioita varten.
Seuraavat esimerkkiliiketoiminnot auttavat tekemään perusliikekoodisi:
- Järjestäytyneempi
- Luettavampi
- Vähemmän virhealttiita
Ensinnäkin sinun on määritettävä seuraavat perusmuuttujat:
kelluva pyörä = 10,16; kelluva WB = 36,75; //perustuu V5 Clawbot -kokoonpanoon
Huomautus: Jos muutat välityssuhdetta, seuraava laskelma saattaa muuttua hieman välityssuhteen perusteella.
Tätä käsitellään toisessa artikkelissa, joka keskittyy moottorien kooderiin:
float EncPerCm = 360/(pyörä* M_PI); float EncPerDeg = WB/Wheel;
Tämä näyte on tarkoitettu vain kääntymistä varten. Esim oikea moottori = 100, vasen moottori = -100 jne.
Toiseksi, kun tarkastelet seuraavia näytteitä, sinua kehotetaan etsimään online-sovellusliittymäviittauksista parametrit ja niiden tekniset tiedot. Käy osoitteessa:https://api.vexcode.cloud/v5/html/ja etsi esim.rotateTotutustuaksesi parametreihin.
Esimerkki 1: Kapseloi Going Straight Motion eri etäisyyksien perusteella
kelluva pyörä = 10,16;
kelluva WB = 36,75;
float EncPerCm = 360,0 / (pyörä* M_PI);
void reportMotionValues(motor m, int line){
Brain.Screen.printAt(5,line, "%8.2lf%8.2lf%8.2f",
m.position (kierros),
m.position (deg));
}
// etäisyys on senttimetreinä
void goStraight( float distance ){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = etäisyys * EncPerCm;
// huomautus: “deg” on nimiavaruudesta vex::. Siksi sinun ei pitäisi
// luoda toista muuttujaa, jonka nimi on myös "deg".
LeftMotor.setVelocity(50,0, prosenttia);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(50,0, prosenttia);
RightMotor.spinToPosition(totalEnc, deg, false);
while (LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
paluu;
}
int main() {
vexcodeInit();
goStraight(100.0);
Brain.Screen.printAt(5,60, "Valmis");
reportMotionValues(LeftMotor, 30);
reportMotionValues(RightMotor, 60);
}
Esimerkki 2: Kapseloi vasemmanpuoleiset käännökset eri asteiden perusteella
kelluva pyörä = 10,16;
kelluva WB = 36,75;
float EncPerCm = 360,0 / (pyörä* M_PI);
float EncPerDeg = WB / Wheel;
void turnRight( float asteet){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = astetta * EncPerDeg;
// huomautus: tämä "deg" on peräisin vex-nimiavaruudesta
LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(-100,0, prosenttia);
RightMotor.spinToPosition(-totalEnc, deg, false);
while(LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
paluu;
}
int main(){
...
turnRight(90.0);
...
}
Esimerkki 3: Kapseloi sekä vasen että oikea yhdeksi funktioksi
void doTurning( float asteet ) {
// täsmälleen sama koodi kuin turnRight arvon
yläpuolella }
int main() {
...
doTurning(90.0); // Kääntö oikealle
...
doTurning(-90.0); // Kääntö vasemmalle
}
Edistyneempää ohjelmointia varten, jos haluat tehdä koodistasi paljon luettavamman, voit kokeilla seuraavaa:
#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)
int main() {
...
doLeftTurn(90.0);
doRightTurning(90.0);
...
}
#definekutsutaan esiprosessorin makrolausekkeeksi. Katso tätä ilmaisua symbolina. Aina kun tämä symboli esiintyy koodissa, sekorvataanlausekkeelladoTurning (määritetty arvo).
Esikäsittelymakro on erilainen laaja aihe, eikä sitä käsitellä tässä artikkelissa.