Inkapsling av grundläggande robotrörelser i VEXcode Pro V5

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.

Huvudmålet är att visa dig hur man kapslar in några av de grundläggande rörelsekoderna i funktioner, inte för kodareberäkning och rörelsemanipulationer.

Följande exempel på rörelsefunktioner hjälper dig att skapa din grundläggande rörelsekod:

  • Mer organiserat
  • Mer läsbar
  • Mindre felbenägen

Först och främst måste du definiera följande grundläggande variabler:

float Wheel = 10.16;
float WB = 36.75; //baserat på V5 Clawbot-konfigurationen

Obs: Om du ändrar utväxlingsförhållandet kan följande beräkning ändras något baserat på utväxlingsförhållandet.

Detta kommer att diskuteras i en annan artikel med fokus på motorkodaren:

flyttal EncPerCm = 360/(hjul* M_PI);
flyttal EncPerDeg = WB/Hjul;

Detta exempel är endast för pivotvridning. Till exempel höger motor = 100, vänster motor = -100, etc.

För det andra, när du granskar följande exempel, uppmanas du att söka upp online-API-referensen för parametrarna och deras specifikationer. Besök:https://api.vexcode.cloud/v5/html/och sök efter t.ex.rotateToför att bekanta dig med parametrarna.


Exempel 1: Inkapsla rak rörelse baserat på olika avstånd

float Wheel = 10.16; 
float WB = 36.75; 
float EncPerCm = 360.0 / (Wheel* 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)); 
}

// avståndet är i centimeter
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = distance * EncPerCm;
	
	// observera: “deg” kommer från vex:: namnrymden. Därför bör du inte 
        // skapa en annan variabel som också heter "deg". 

       LeftMotor.setVelocity(50.0, procent);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(50.0, procent);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); return; } int main() { vexcodeInit(); goStraight(100.0); Brain.Screen.printAt(5,60, "Klar"); reportMotionValues(LeftMotor, 30); reportMotionValues(RightMotor, 60); }

Exempel 2: Inkapsla vänstersvängar baserat på olika grader

float Wheel = 10.16; 
float WB = 36.75; 
float EncPerCm = 360.0 / (Wheel* M_PI); 
float EncPerDeg = WB / Wheel;

void turnRight( float degrees){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = degrees * EncPerDeg;
	
       // observera: denna “deg” är från vex namespace
       LeftMotor.setVelocity(100.0, procent);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100.0, procent);
HögerMotor.spinToPosition(-totalEnc, deg, false); medan(VänsterMotor.isSpinning() || HögerMotor.isSpinning() ) vänta(50, msec); returnera; } int main(){ ... svängHöger(90.0); ... }

Exempel 3: Kapsla in både vänster och höger i en enda funktion

void doTurning( float degrees ) {
	// exakt samma kod som turnRight ovanför
}

int main() {
...
   doTurning(90.0); // Höger pivot
...
   doTurning(-90.0); // Vänster pivot
}

För mer avancerad programmering, om du vill göra din kod mycket mer läsbar, kan du prova följande:

#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)

int main() {
...
   doVänstersväng(90.0);  
   doHögersväng(90.0);
...
}

#definekallas ett preprocessor-makrouttryck. Se detta uttryck som en symbol. Överallt där denna symbol förekommer i koden kommer denatt ersättasmed uttrycketdoTurning(det angivna värdet).

Förprocessormakro är ett annat omfattande ämne och kommer inte att diskuteras i den här artikeln.

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

Last Updated: