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(ค่าที่ระบุ)
แมโครตัวประมวลผลล่วงหน้าเป็นหัวข้อที่ครอบคลุมอื่น และจะไม่กล่าวถึงในบทความนี้