VEXcode Pro V5 жүйесіндегі негізгі робот қозғалыстарын инкапсуляциялау

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препроцессордың макро өрнегі деп аталады. Бұл өрнекті символ ретінде қарастырыңыз. Бұл таңба кодта қай жерде кездессе де, олкөрсетілген мән)өрнегімен ауыстырылады.

Препроцессор макросы - бұл басқа кең тақырып және бұл мақалада талқыланбайды.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: