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.