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 구성 기반
참고: 기어비를 변경하면 기어비에 따라 다음 계산이 약간 변경될 수 있습니다.
이에 대해서는 모터 인코더에 초점을 맞춘 다른 기사에서 논의할 것입니다.
float EncPerCm = 360/(wheel* M_PI); float EncPerDeg = WB/휠;
이 샘플은 피벗 회전에만 사용됩니다. 예: 오른쪽 모터 = 100, 왼쪽 모터 = -100 등
둘째, 다음 샘플을 검토할 때 매개변수 및 해당 사양에 대한 온라인 API 참조를 찾아보는 것이 좋습니다. 방문:https://api.vexcode.cloud/v5/html/그리고rotateTo등을 검색하여 매개변수에 익숙해지세요.
샘플 1: 다양한 거리를 기반으로 직선 운동 캡슐화
플로트 휠 = 10.16;
플로트 WB = 36.75;
float EncPerCm = 360.0 / (Wheel* 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();
오른쪽모터.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, msec);
반환;
}
int main() {
vexcodeInit();
직진(100.0);
Brain.Screen.printAt(5,60, "완료");
보고MotionValues(LeftMotor, 30);
보고MotionValues(RightMotor, 60);
}
샘플 2: 다양한 각도에 따라 좌회전 캡슐화
플로트 휠 = 10.16;
플로트 WB = 36.75;
float EncPerCm = 360.0 / (Wheel* M_PI);
float EncPerDeg = WB / 휠;
voidturnRight(부동 각도){
LeftMotor.resetPosition();
왼쪽모터.resetRotation();
오른쪽모터.resetPosition();
오른쪽모터.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, msec);
반환;
}
int 메인(){
...
TurnRight(90.0);
...
}
샘플 3: 왼쪽과 오른쪽을 단일 함수로 캡슐화
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() {
...
doLeftTurn(90.0);
do우회전(90.0);
...
}
#define은 전처리기 매크로 표현식이라고 합니다. 이 표현을 상징으로 보세요. 코드에서 이 기호가 나타날 때마다는표현식doTurning(지정된 값)로 대체됩니다.
전처리기 매크로는 다른 광범위한 주제이므로 이 기사에서는 다루지 않습니다.