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.
O objetivo principal é mostrar como encapsular alguns dos códigos fundamentais de movimento em funções, não para cálculo de codificadores e manipulações de movimento.
Os seguintes exemplos de funções de movimento ajudarão a criar seu código básico de movimentos:
- Mais organizado
- Mais legível
- Menos sujeito a erros
Primeiro de tudo, você precisará definir as seguintes variáveis básicas:
roda flutuante = 10,16; flutuante WB = 36,75; //baseado na configuração do V5 Clawbot
Nota: Se você alterar a relação de transmissão, o cálculo a seguir poderá mudar ligeiramente com base na relação de transmissão.
Isso será discutido em outro artigo com foco no codificador do motor:
float EncPerCm = 360/(roda* M_PI); float EncPerDeg = WB/Roda;
Este exemplo é apenas para giro de pivô. Por exemplo motor direito = 100, motor esquerdo = -100, etc.
Em segundo lugar, ao revisar os exemplos a seguir, recomendamos que você consulte a referência on-line da API para obter os parâmetros e suas especificações. Visite:https://api.vexcode.cloud/v5/html/e pesquise, por exemplo,rotateTo
para se familiarizar com os parâmetros.
Amostra 1: Encapsular movimento reto com base em várias distâncias
roda flutuante = 10,16; flutuante WB = 36,75; float EncPerCm = 360,0 / (Roda* 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)); } // a distância está em centímetros void goStraight( float distance ){ LeftMotor.resetPosition(); LeftMotor.resetRotation(); RightMotor.resetPosition(); RightMotor.resetRotation(); float totalEnc = distância * EncPerCm; // nota: “deg” vem do namespace vex::. Portanto, você não deve // criar outra variável também chamada “deg”. LeftMotor.setVelocity(50,0, por cento);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(50,0, por cento);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, mseg); retorno; } int main() { vexcodeInit(); vá em linha reta (100,0); Brain.Screen.printAt(5,60, "Concluído"); reportMotionValues (Motor Esquerdo, 30); reportMotionValues(RightMotor, 60); }
Amostra 2: Encapsular curvas à esquerda com base em vários graus
roda flutuante = 10,16; flutuante WB = 36,75; float EncPerCm = 360,0 / (Roda* M_PI); float EncPerDeg = WB/Roda; void turnRight( graus flutuantes){ LeftMotor.resetPosition(); LeftMotor.resetRotation(); RightMotor.resetPosition(); RightMotor.resetRotation(); float totalEnc = graus * EncPerDeg; // nota: este “deg” é do namespace vex LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(-100,0, por cento);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, mseg); retorno; } int principal(){ ... virar à direita(90,0); ... }
Amostra 3: encapsular esquerda e direita em uma única função
void doTurning( float Degrees ) { // exatamente o mesmo código do turnRight acima } int main() { ... doTurning(90.0); //Pivot direito vira ... doTurning(-90.0); // Giro do pivô esquerdo }
Para uma programação mais avançada, se quiser tornar seu código muito mais legível, você pode tentar o seguinte:
#define doLeftTurn(d) doTurning(d) #define doRigtTurn(d) doTurning(-d) int main() { ... doLeftTurn(90.0); doRightTurning(90.0); ... }
#define
é chamada de expressão de macro de pré-processador. Veja esta expressão como um símbolo. Onde quer que este símbolo ocorra no código, eleserá substituídopela expressãodoTurning(o valor especificado)
.
A macro do pré-processador é um tópico extenso e diferente e não será discutido neste artigo.