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.