Alapvető robotmozgások beágyazása a VEXcode Pro V5-be

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.

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

Last Updated: