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/(дөңгелегі* M_PI); float EncPerDeg = WB/Wheel;
Бұл үлгі тек бұрылысқа арналған. Мысалы оң мотор = 100, сол мотор = -100, т.б.
Екіншіден, келесі үлгілерді қарап шыққан кезде параметрлер мен олардың сипаттамалары үшін онлайн API анықтамасын іздеу ұсынылады. Мына мекенжайға кіріңіз:https://api.vexcode.cloud/v5/html/және параметрлермен танысу үшін, мысалы,rotateToдеп іздеңіз.
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( қалқымалы қашықтық ){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.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() )
күту(50, мсек);
қайтару;
}
int main() {
vexcodeInit();
goStraight(100,0);
Brain.Screen.printAt(5,60, "Дайын");
reportMotionValues(LeftMotor, 30);
reportMotionValues(RightMotor, 60);
}
2-үлгі: Әртүрлі дәрежелер негізінде солға бұрылуларды инкапсуляциялау
қалқымалы дөңгелек = 10,16;
қалқымалы WB = 36,75;
қалқымалы EncPerCm = 360,0 / (Дөңгелегі* M_PI);
қалқымалы EncPerDeg = WB / Wheel;
жарамсыз бұрылысОңға( қалқымалы градус){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = градус * EncPerDeg;
// ескертпе: бұл “deg” ыңғайсыз аттар кеңістігінен алынған
LeftMotor.setVelocity(100,0, пайыз);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity(-100,0, пайыз);
RightMotor.spinToPosition(-totalEnc, градус, жалған);
while(LeftMotor.isSpinning() || RightMotor.isSpinning() )
күту(50, мсек);
қайтару;
}
int main(){
...
оңға бұру(90,0);
...
}
3-үлгі: сол және оң жақтарды бір функцияға инкапсуляциялау
void doTurning( float градус ) {
// дәл сол код
үстіндегі оңға бұрылу }
int main() {
...
doTurning(90.0); // Оңға бұрылу
...
doTurning(-90,0); // Солға бұрылу
}
Неғұрлым жетілдірілген бағдарламалау үшін, егер сіз кодты оқуға ыңғайлы еткіңіз келсе, келесі әрекеттерді орындауға болады:
#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)
int main() {
...
doLeftTurn(90,0);
doRightTurning(90,0);
...
}
#defineпрепроцессордың макро өрнегі деп аталады. Бұл өрнекті символ ретінде қарастырыңыз. Бұл таңба кодта қай жерде кездессе де, олкөрсетілген мән)өрнегімен ауыстырылады.
Препроцессор макросы - бұл басқа кең тақырып және бұл мақалада талқыланбайды.