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.
A fő cél az, hogy megmutassa, hogyan lehet néhány alapvető mozgáskódot függvényekbe foglalni, nem pedig a kódoló számításaihoz és a mozgáskezeléshez.
A következő minta mozgásfüggvények segítenek az alapvető mozgáskód elkészítésében:
- Szervezettebb
- Olvashatóbb
- Kevésbé hibás
Először is meg kell határoznia a következő alapvető változókat:
úszókerék = 10,16; float WB = 36,75; //a V5 Clawbot konfigurációja alapján
Megjegyzés: Ha megváltoztatja az áttételi arányt, a következő számítás kissé módosulhat az áttétel alapján.
Erről egy másik cikkben lesz szó, amely a motorkódolóra összpontosít:
float EncPerCm = 360/(kerék* M_PI); float EncPerDeg = WB/Wheel;
Ez a minta csak forgatásra szolgál. Például jobb motor = 100, bal motor = -100 stb.
Másodszor, amikor áttekinti a következő mintákat, javasoljuk, hogy keresse meg az online API-referenciát a paraméterekhez és azok specifikációihoz. Látogassa meg:https://api.vexcode.cloud/v5/html/, és keresse meg példáulrotateTokifejezést, hogy megismerje a paramétereket.
1. példa: Különböző távolságok alapján haladó egyenes mozgás beágyazása
úszókerék = 10,16;
float WB = 36,75;
float EncPerCm = 360,0 / (kerék* M_PI);
void reportMotionValues(motor m, int line){
Brain.Screen.printAt(5,line, "%8.2lf%8.2lf%8.2f",
m.position (ford),
m.position (deg));
}
// a távolság centiméterben van megadva
void goStraight( float distance ){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = távolság * EncPerCm;
// Megjegyzés: A „deg” a vex:: névtérből származik. Ezért nem szabad
// létrehozni másik „deg” nevű változót.
LeftMotor.setVelocity(50,0, százalék);
LeftMotor.spinToPosition(totalEnc, fok, false);
RightMotor.setVelocity(50,0, százalék);
RightMotor.spinToPosition(totalEnc, fok, false);
while (LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
visszatérés;
}
int main() {
vexcodeInit();
goStraight(100.0);
Brain.Screen.printAt(5,60, "Kész");
jelentésMotionValues(LeftMotor, 30);
reportMotionValues(RightMotor, 60);
}
2. minta: Kapszulázza be a balra fordulásokat különböző fokok alapján
úszókerék = 10,16;
float WB = 36,75;
float EncPerCm = 360,0 / (kerék* M_PI);
float EncPerDeg = WB / kerék;
void turnRight( lebegő fokok){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = fok * EncPerDeg;
// Megjegyzés: ez a „deg” a vex névtérből származik
LeftMotor.setVelocity(100.0, százalék);
LeftMotor.spinToPosition(totalEnc, fok, false);
RightMotor.setVelocity(-100,0, százalék);
RightMotor.spinToPosition(-totalEnc, fok, false);
while(LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
visszatérés;
}
int main(){
...
turnRight(90.0);
...
}
3. példa: A bal és a jobb oldalt is beágyazza egyetlen függvénybe
void doTurning( float fokok ) {
// pontosan ugyanaz a kód, mint a turnRight
felett }
int main() {
...
doTurning(90.0); // Jobb forgásirány
...
doTurning(-90.0); // Balra forgatás
}
Fejlettebb programozáshoz, ha sokkal olvashatóbbá szeretné tenni kódját, próbálkozzon a következőkkel:
#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)
int main() {
...
doLeftTurn(90.0);
doRightTurning(90.0);
...
}
#defineelőfeldolgozó makrókifejezésnek nevezzük. Tekintse ezt a kifejezést szimbólumnak. Bárhol is fordul előa szimbólum a kódban, ahelyére adoTurning (a megadott érték)kerül.
Az előfeldolgozó makró egy másik kiterjedt téma, és ebben a cikkben nem tárgyaljuk.