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.
主要目标是向您展示如何将一些基本运动代码封装到函数中,而不是用于编码器计算和运动操作。
以下示例运动函数将帮助您编写基本运动代码:
- 更有条理
- 更具可读性
- 不易出错
首先,您需要定义以下基本变量:
浮轮=10.16; 浮动WB = 36.75; //基于V5 Clawbot配置
注意:如果更改齿轮比,则以下计算可能会根据齿轮比略有变化。
这将在另一篇关注电机编码器的文章中讨论:
浮动EncPerCm = 360/(轮* M_PI); float EncPerDeg = WB/车轮;
该示例仅适用于旋转。 例如 右电机 = 100,左电机 = -100,依此类推。
其次,当您查看以下示例时,建议您查找在线 API 参考以获取参数及其规格。 访问:https://api.vexcode.cloud/v5/html/并搜索,例如以熟悉参数。
示例1:封装基于不同距离的直线运动
浮轮=10.16; 浮动WB = 36.75; 浮点数 EncPerCm = 360.0 / (车轮* 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)); } // 距离以厘米为单位 void goStraight( float distance ){ LeftMotor.resetPosition(); 左电机.resetRotation(); 右电机.resetPosition(); RightMotor.resetRotation(); float TotalEnc = 距离 * EncPerCm; // 注意:“deg”来自 vex:: 命名空间。 因此,您不应该 // 创建另一个也命名为“deg”的变量。 LeftMotor.setVelocity(50.0, 百分比);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(50.0, 百分比);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, 毫秒); 返回; } int main() { vexcodeInit(); 直行(100.0); Brain.Screen.printAt(5,60, "完成"); 报告运动值(左电机,30); 报告运动值(RightMotor, 60); }
示例2:根据不同度数封装左转
浮轮=10.16; 浮动WB = 36.75; 浮点数 EncPerCm = 360.0 / (车轮* M_PI); float EncPerDeg = WB / 轮; void TurnRight( float Degrees){ LeftMotor.resetPosition(); LeftMotor.resetRotation(); RightMotor.resetPosition(); RightMotor.resetRotation(); float TotalEnc = 度 * EncPerDeg; // 注意:这个“deg”来自vex命名空间 LeftMotor.setVelocity(100.0,%);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(-100.0, 百分比);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, 毫秒); 返回; } int main(){ ... 右转(90.0); ... }
示例 3:将 Left 和 Right 封装在一个函数中
void doTurning( float Degrees ) { // 与上面的turnRight 完全相同的代码 } int main() { ... doTurning(90.0); // 右枢轴转动 ... doTurning(-90.0); // 左枢转 }
对于更高级的编程,如果您想让代码更具可读性,您可以尝试以下操作:
#define doLeftTurn(d) doTurning(d) #define doRigtTurn(d) doTurning(-d) int main() { ... 左转(90.0); doRightTurning(90.0); ... }
#define
称为预处理器宏表达式。 将此表达式视为一个符号。 无论此符号出现在代码中的何处,它都将被表达式doTurning(指定的值)
替换。
预处理器宏是一个不同的广泛主题,本文不会讨论。