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. Bezoek:https://api.vexcode.cloud/v5/html/en zoek bijvoorbeeld naarroterenTo
om 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); ... }
#define
wordt 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.