Encapsulando movimentos básicos do robô no 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.

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,rotateTopara 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.

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

Last Updated: