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.
El objetivo principal es mostrarle cómo encapsular algunos de los códigos de movimiento fundamentales en funciones, no para el cálculo del codificador y las manipulaciones de movimiento.
Las siguientes funciones de movimiento de muestra le ayudarán a crear su código de movimientos básicos:
- Más organizado
- Más legible
- Menos propenso a errores
En primer lugar, deberá definir las siguientes variables básicas:
rueda flotante = 10,16; flotante WB = 36,75; //basado en la configuración de V5 Clawbot
Nota: Si cambia la relación de transmisión, el siguiente cálculo puede cambiar ligeramente según la relación de transmisión.
Esto se discutirá en otro artículo centrado en el codificador del motor:
float EncPerCm = 360/(rueda* M_PI); float EncPerDeg = WB/Rueda;
Esta muestra es solo para giro de pivote. P.ej motor derecho = 100, motor izquierdo = -100, etc.
En segundo lugar, cuando revise los siguientes ejemplos, le recomendamos que busque la referencia de API en línea para conocer los parámetros y sus especificaciones. Visite:https://api.vexcode.cloud/v5/html/y busque, por ejemplo,rotarA
para familiarizarse con los parámetros.
Ejemplo 1: encapsular el movimiento recto en función de varias distancias
rueda flotante = 10,16; flotante WB = 36,75; flotador EncPerCm = 360,0 / (Rueda* 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)); } // la distancia está en centímetros void goStraight( distancia flotante ){ LeftMotor.resetPosition(); MotorIzquierdo.resetRotation(); MotorDerecho.resetPosition(); MotorDerecho.resetRotation(); float totalEnc = distancia * EncPerCm; // nota: “deg” proviene del espacio de nombres vex::. Por lo tanto, no debe // crear otra variable también denominada “deg”. LeftMotor.setVelocity(50,0, porcentaje);
LeftMotor.spinToPosition(totalEnc, grados, falso);
RightMotor.setVelocity(50,0, porcentaje);
RightMotor.spinToPosition(totalEnc, grados, falso); mientras (LeftMotor.isSpinning() || RightMotor.isSpinning() ) esperar(50, mseg); volver; } int principal() { vexcodeInit(); ir recto(100.0); Brain.Screen.printAt(5,60, "Listo"); reportMotionValues(LeftMotor, 30); reportMotionValues(MotorDerecho, 60); }
Ejemplo 2: encapsular giros a la izquierda según varios grados
rueda flotante = 10,16; flotante WB = 36,75; flotador EncPerCm = 360,0 / (Rueda* M_PI); flotador EncPerDeg = WB / Rueda; void turnRight(grados flotantes){ LeftMotor.resetPosition(); Motor izquierdo.resetRotation(); MotorDerecho.resetPosition(); MotorDerecho.resetRotation(); float totalEnc = grados * EncPerDeg; // nota: este “grado” es del espacio de nombres vex LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, grados, falso);
RightMotor.setVelocity(-100,0, porcentaje);
RightMotor.spinToPosition(-totalEnc, grados, falso); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) esperar(50, mseg); regreso; } int principal(){ ... girar a la derecha (90.0); ... }
Ejemplo 3: encapsule tanto la izquierda como la derecha en una sola función
void doTurning (grados flotantes) { // exactamente el mismo código que turnRight arriba de } int main() { ... hacerGiro(90.0); // Giro de pivote derecho ... hacerGiro(-90.0); // Giro de pivote izquierdo }
Para una programación más avanzada, si desea que su código sea mucho más legible, puede intentar lo siguiente:
#define hacerGiroIzquierda(d) hacerGiro(d) #define hacerGiroDerecha(d) hacerGiro(-d) int main() { ... hacerGiro a la izquierda(90.0); hacerGiroDerecho(90.0); ... }
#define
se denomina expresión de macro de preprocesador. Mira esta expresión como un símbolo. Siempre que aparezca este símbolo en el código,se reemplazarácon la expresióndoTurning(el valor especificado)
.
La macro del preprocesador es un tema extenso diferente y no se tratará en este artículo.