تغليف حركات الروبوت الأساسية في 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

ملاحظة: إذا قمت بتغيير نسبة التروس، فقد تتغير الحسابات التالية قليلاً بناءً على نسبة التروس.

سيتم مناقشة ذلك في مقال آخر يركز على تشفير المحرك:

تعويم EncPerCm = 360/(wheel* 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( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float TotalEnc = distance * EncPerCm;
	
	// ملاحظة: كلمة "deg" مأخوذة من مساحة الاسم vex::. لذلك، لا ينبغي عليك 
        // إنشاء متغير آخر يسمى أيضًا "deg". 

       LeftMotor.setVelocity(50.0, بالمائة);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(50.0, بالمائة);
RightMotor.spinToPosition(totalEnc, deg, false); بينما (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); عودة؛ } int main() { vexcodeInit(); اذهب ستريت (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 / العجلة؛

void TurnRight(float Degrees){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float TotalEnc = Degrees * EncPerDeg;
	
       // ملاحظة: هذه "الدرجة" مأخوذة من مساحة الاسم 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); عودة؛ } إنت الرئيسي(){ ... 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);  
   doRightTurning(90.0);
...
}

#defineيسمى تعبير ماكرو للمعالج المسبق. انظر إلى هذا التعبير كرمز. أينما يظهر هذا الرمز في الكود، سيتم استبدالهبالتعبيرdoTurning(القيمة المحددة).

يعد ماكرو المعالج المسبق موضوعًا شاملاً مختلفًا ولن يتم مناقشته في هذه المقالة.

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

Last Updated: