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(指定的值)替换。
预处理器宏是一个不同的广泛主题,本文不会讨论。