주요 목표는 인코더 계산 및 모션 조작을 위한 것이 아니라 일부 기본 모션 코드를 함수로 캡슐화하는 방법을 보여주는 것입니다.
다음 샘플 모션 함수는 기본 모션 코드를 만드는 데 도움이 됩니다.
- 더 체계적으로
- 더 읽기 쉬움
- 오류 발생 가능성 감소
우선, 다음과 같은 기본 변수를 정의해야 합니다.
플로트 휠 = 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/방문하여 예를 들어을 검색하세요.
샘플 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(지정된 값)
로 대체됩니다.
전처리기 매크로는 다른 광범위한 주제이므로 이 기사에서는 다루지 않습니다.