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.
Het belangrijkste doel is om u te laten zien hoe u enkele van de fundamentele bewegingscodes in functies kunt inkapselen, niet voor encoderberekeningen en bewegingsmanipulaties.
De volgende voorbeeldbewegingsfuncties helpen u bij het maken van uw basisbewegingscode:
- Meer georganiseerd
- Leesbaarder
- Minder foutgevoelig
Allereerst moet u de volgende basisvariabelen definiëren:
zweefwiel = 10,16; vlotter WB = 36,75; //gebaseerd op de V5 Clawbot-configuratie
Opmerking: Als u de overbrengingsverhouding wijzigt, kan de volgende berekening enigszins veranderen op basis van de overbrengingsverhouding.
Dit zal worden besproken in een ander artikel dat zich richt op de motor-encoder:
vlotter EncPerCm = 360/(wiel* M_PI); vlotter EncPerDeg = WB/wiel;
Dit voorbeeld is alleen bedoeld voor draaibewegingen. Bijv rechtermotor = 100, linkermotor = -100, enz.
Ten tweede wordt u aangemoedigd om, wanneer u de volgende voorbeelden bekijkt, de online API-referentie op te zoeken voor de parameters en hun specificaties. Ga naar:https://api.vexcode.cloud/v5/html/en zoek bijvoorbeeld naarrotateToom vertrouwd te raken met de parameters.
Voorbeeld 1: kapsel een rechte beweging in op basis van verschillende afstanden
zweefwiel = 10,16;
vlotter WB = 36,75;
vlotter EncPerCm = 360,0 / (wiel* 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));
}
// afstand is in centimeters
void goStraight( float distance ){
LeftMotor.resetPosition();
Linkermotor.resetRotation();
Rechtermotor.resetPosition();
Rechtermotor.resetRotation();
float totaalEnc = afstand * EncPerCm;
// opmerking: “deg” komt uit de vex:: naamruimte. Daarom moet u
andere variabele maken die ook wel “deg” wordt genoemd.
LeftMotor.setVelocity(50,0, procent);
LeftMotor.spinToPosition(totalEnc, graden, false);
Rechtermotor.instelsnelheid(50,0, procent);
RightMotor.spinToPosition(totalEnc, deg, false);
while (LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
retour;
}
int main() {
vexcodeInit();
goStraight(100,0);
Brain.Screen.printAt(5,60, "Gereed");
rapportMotionValues(Linkermotor, 30);
rapportMotionValues(RightMotor, 60);
}
Voorbeeld 2: Kapseleer bochten naar links op basis van verschillende graden
zweefwiel = 10,16;
vlotter WB = 36,75;
vlotter EncPerCm = 360,0 / (wiel* M_PI);
vlotter EncPerDeg = WB / Wiel;
void turnRight( zwevende graden){
LeftMotor.resetPosition();
Linkermotor.resetRotation();
Rechtermotor.resetPosition();
Rechtermotor.resetRotation();
float totaalEnc = graden * EncPerDeg;
// opmerking: deze “deg” komt uit vex naamruimte
LeftMotor.setVelocity(100.0, procent);
LeftMotor.spinToPosition(totalEnc, graden, false);
Rechtermotor.instelsnelheid(-100,0, procent);
RightMotor.spinToPosition(-totalEnc, deg, false);
while(LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, msec);
retour;
}
int hoofd(){
...
draaiRechts(90.0);
...
}
Voorbeeld 3: Kapsel zowel links als rechts in één enkele functie
void doTurning( float graden ) {
// exact dezelfde code als de turnRight hierboven
}
int main() {
...
doTurning(90.0); // Draai naar rechts
...
doTurning(-90,0); // Draai naar links
}
Voor meer geavanceerde programmering kunt u, als u uw code veel leesbaarder wilt maken, het volgende proberen:
#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)
int main() {
...
doLinksTurn(90,0);
doRightTurning(90,0);
...
}
#definewordt een preprocessormacro-expressie genoemd. Beschouw deze uitdrukking als een symbool. Waar dit symbool ook voorkomt in de code, wordt hetvervangendoor de uitdrukkingdoTurning(de opgegeven waarde).
Preprocessor-macro is een ander uitgebreid onderwerp en zal in dit artikel niet worden besproken.