การห่อหุ้มการเคลื่อนไหวของหุ่นยนต์ขั้นพื้นฐานใน 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/ล้อ;

ตัวอย่างนี้ใช้สำหรับการหมุนเดือยเท่านั้น เช่น มอเตอร์ขวา = 100 มอเตอร์ซ้าย = -100 เป็นต้น

ประการที่สอง เมื่อคุณตรวจสอบตัวอย่างต่อไปนี้ ขอแนะนำให้ค้นหาการอ้างอิง API ออนไลน์เพื่อดูพารามิเตอร์และข้อมูลจำเพาะ เยี่ยมชม:https://api.vexcode.cloud/v5/html/และค้นหา เช่นrotateToเพื่อทำความคุ้นเคยกับพารามิเตอร์


ตัวอย่างที่ 1: แค็ปซูลการเคลื่อนที่แนวตรงตามระยะทางต่างๆ

ล้อลอย = 10.16; 
โฟลต WB = 36.75; 
โฟลต EncPerCm = 360.0 / (ล้อ* M_PI); 

โมฆะ reportMotionValues ​​(มอเตอร์ 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();
	มอเตอร์ซ้าย.รีเซ็ตการหมุน();
	มอเตอร์ขวา.รีเซ็ตตำแหน่ง();
	มอเตอร์ขวา.รีเซ็ตการหมุน();
  	
	float TotalEnc = ระยะทาง * EncPerCm;
	
	// หมายเหตุ: “deg” มาจาก vex:: เนมสเปซ ดังนั้นคุณไม่ควร 
        // สร้างตัวแปรอื่นชื่อ "deg" 

       LeftMotor.setVelocity (50.0 เปอร์เซ็นต์);
LeftMotor.spinToPosition (totalEnc, องศา, เท็จ);

RightMotor.setVelocity (50.0, เปอร์เซ็นต์);
RightMotor.spinToPosition(totalEnc, องศา, เท็จ); ในขณะที่ (LeftMotor.isSpinning() || RightMotor.isSpinning() ) รอ (50, มิลลิวินาที); กลับ; } int main() { vexcodeInit(); ไปตรง(100.0); Brain.Screen.printAt (5,60, "เสร็จสิ้น"); รายงานค่าการเคลื่อนไหว (มอเตอร์ซ้าย, 30); รายงานค่าการเคลื่อนไหว (มอเตอร์ขวา, 60); }

ตัวอย่างที่ 2: แค็ปซูลเลี้ยวซ้ายตามองศาต่างๆ

ล้อลอย = 10.16; 
โฟลต WB = 36.75; 
โฟลต EncPerCm = 360.0 / (ล้อ* M_PI); 
ลอย EncPerDeg = WB / ล้อ;

โมฆะเทิร์นขวา (องศาลอย){
	
	LeftMotor.resetPosition();
	มอเตอร์ซ้าย.รีเซ็ตการหมุน();
	มอเตอร์ขวา.รีเซ็ตตำแหน่ง();
	RightMotor.resetRotation();
  	
	ลอย TotalEnc = องศา * EncPerDeg;
	
       // หมายเหตุ: “deg” นี้มาจากเนมสเปซ vex
       LeftMotor.setVelocity(100.0, เปอร์เซ็นต์);
LeftMotor.spinToPosition(totalEnc, องศา, เท็จ);

RightMotor.setVelocity (-100.0, เปอร์เซ็นต์);
RightMotor.spinToPosition(-totalEnc, องศา, เท็จ); ในขณะที่ (LeftMotor.isSpinning () || RightMotor.isSpinning () ) รอ (50, มิลลิวินาที); กลับ; } int หลัก(){ ... เลี้ยวขวา(90.0); ... }

ตัวอย่างที่ 3: แค็ปซูลทั้งซ้ายและขวาในฟังก์ชันเดียว

ถือเป็นโมฆะ doTurning( องศาลอย ) {
	// เป็นโค้ดเดียวกันกับ TurnRight ที่อยู่เหนือ
}

int main() {
...
   ทำการหมุน(90.0); // หมุนเดือยขวา
...
   ทำการหมุน(-90.0); // หมุนเดือยซ้าย
}

สำหรับการเขียนโปรแกรมขั้นสูง หากคุณต้องการให้โค้ดของคุณอ่านง่ายขึ้น คุณอาจลองทำดังนี้:

#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)

int main() {
...
   ทำเลี้ยวซ้าย(90.0);  
   เลี้ยวขวา(90.0);
...
}

#defineเรียกว่านิพจน์แมโครตัวประมวลผลล่วงหน้า มองสำนวนนี้เป็นสัญลักษณ์ เมื่อใดก็ตามที่สัญลักษณ์นี้เกิดขึ้นในโค้ดจะถูกแทนที่ด้วยด้วยนิพจน์doTurning(ค่าที่ระบุ)

แมโครตัวประมวลผลล่วงหน้าเป็นหัวข้อที่ครอบคลุมอื่น และจะไม่กล่าวถึงในบทความนี้

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

Last Updated: