รหัสคอนโทรลเลอร์แบบกำหนดเองใน VEXcode EXP

การใช้คอนโทรลเลอร์ช่วยให้ขับและเคลื่อนย้ายหุ่นยนต์ของคุณเพื่อทำงานให้เสร็จสิ้นได้ง่ายขึ้น อย่างไรก็ตาม มีข้อจำกัดในการใช้โปรแกรม Drive และขึ้นอยู่กับโครงสร้างหุ่นยนต์ของคุณหรืองานที่ทำอยู่ คุณอาจต้องการการควบคุมที่แตกต่างกัน การเขียนโค้ดคอนโทรลเลอร์ทำให้คุณสามารถเพิ่มประสิทธิภาพคอนโทรลเลอร์เพื่อให้เหมาะสมกับหุ่นยนต์และงานในมือได้ดีขึ้น มีหลายวิธีในการเขียนโค้ดคอนโทรลเลอร์ใน VEXcode EXP แต่ละวิธีมีข้อดีและข้อจำกัดของตัวเอง และบางวิธีก็เหมาะกับบางสถานการณ์มากกว่า ขึ้นอยู่กับผลลัพธ์ที่ต้องการ

บทความนี้จะแนะนำสามตัวเลือกที่แตกต่างกันสำหรับการเข้ารหัสคอนโทรลเลอร์แบบกำหนดเองใน VEXcode EXP แต่ละวิธีจะมีการอธิบายข้อดี ข้อจำกัด และกรณีการใช้งานตัวอย่างเพื่อช่วยแนะนำคุณในการเลือกวิธีการ เพื่อวัตถุประสงค์ของบทความนี้ ตัวอย่างโค้ดทั้งหมดที่แสดงถูกสร้างขึ้นสำหรับ Clawbot อย่างไรก็ตาม แนวคิดเดียวกันนี้สามารถนำไปใช้กับรุ่นอื่นๆ มากมายที่พบใน builds.vex.comและรุ่นที่กำหนดเองได้

ตัวเลือกที่ 1: การกำหนดปุ่มในการกำหนดค่าอุปกรณ์

ตัวเลือกนี้เหมาะอย่างยิ่งเมื่อคุณใช้บิลด์มาตรฐาน เช่น BaseBot หรือ Clawbot และต้องการเริ่มต้นและดำเนินการอย่างรวดเร็ว

ตัวเลือกนี้ช่วยให้คุณกำหนดมอเตอร์ ระบบขับเคลื่อน หรือกลุ่มมอเตอร์ให้กับปุ่มบนตัวควบคุมในการกำหนดค่าอุปกรณ์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการกำหนดปุ่มให้กับตัวควบคุมในการกำหนดค่าอุปกรณ์ ดูบทความนี้

เมนูอุปกรณ์ VEXcode EXP พร้อมตัวเลือกตัวควบคุมที่แสดงไว้ แผนภาพของการควบคุมปุ่มแสดงให้เห็นว่าจอยสติ๊กทั้งสองตัวขับเคลื่อนหุ่นยนต์ในรูปแบบขับเคลื่อนถัง ปุ่มขึ้นและลงควบคุม ArmMotorGroup และปุ่มแกน R ควบคุม ClawMotor

สรุปตัวเลือกที่ 1: การกำหนดปุ่มในการกำหนดค่าอุปกรณ์

ข้อดี

ข้อจำกัด

สถานการณ์ตัวอย่าง

  • ตั้งค่าอย่างรวดเร็วโดยไม่จำเป็นต้องเขียนโค้ด
  • วิธีที่ง่ายที่สุด
  • ปรับได้อย่างง่ายดาย
  • สามารถกำหนดมอเตอร์แต่ละตัว ระบบขับเคลื่อนมาตรฐาน และกลุ่มมอเตอร์ให้กับปุ่มต่างๆ ได้
  • การกำหนดปุ่มจะจำกัดจำนวนปุ่มบนคอนโทรลเลอร์
  • ระบบขับเคลื่อนต้องไม่เกิน 4 มอเตอร์หรือปรับแต่งได้ (รองรับเฉพาะไดรฟ์มาตรฐานเท่านั้น ไม่ใช่ไดรฟ์ H, โฮโลโนมิก หรือระบบขับเคลื่อนแบบกำหนดเองอื่นๆ)
  • การจัดการบิลด์มาตรฐาน เช่น BaseBot, Clawbot หรือการแก้ไขบิลด์มาตรฐานเหล่านั้นอย่างง่ายๆ ตัวอย่างเช่น BaseBot ที่มีท่อไอดีติดอยู่ที่ด้านหน้าซึ่งควบคุมโดยกลุ่มมอเตอร์
  • การควบคุมปุ่มที่สอดคล้องกับพฤติกรรมที่แตกต่างกันบนหุ่นยนต์อย่างรวดเร็วโดยไม่ต้องเขียนโค้ดมากนัก

ตัวเลือกที่ 2: การใช้ Forever Loop

หากคุณกำลังใช้บิลด์แบบกำหนดเองแทนบิลด์มาตรฐาน หรือต้องการให้สามารถปรับแต่งเพิ่มเติมในคอนโทรลเลอร์ของคุณได้ ตัวเลือกนี้ถือเป็นตัวเลือกที่ดี การใช้วง Forever เป็นการแนะนำที่ดีในการสร้างโค้ดแบบกำหนดเองสำหรับคอนโทรลเลอร์ของคุณ

ตัวเลือกนี้จะวางเงื่อนไขทั้งหมดสำหรับคอนโทรลเลอร์และปุ่มที่เกี่ยวข้องไว้ในลูปตลอดกาล สิ่งนี้ให้ความยืดหยุ่นมากขึ้น โดยเฉพาะอย่างยิ่งกับการออกแบบบิวด์แบบกำหนดเอง แต่ยังต้องใช้ประสบการณ์การเขียนโค้ดด้วย ข้อควรพิจารณาประการหนึ่งเมื่อใช้ตัวเลือกนี้คือความยาวและความซับซ้อนของโครงการของคุณ ยิ่งมีเงื่อนไขเพิ่มเติมมากเท่าไร กองโค้ดก็จะยิ่งยาวขึ้นเท่านั้น ซึ่งหมายความว่าจะต้องดำเนินการหลายบล็อกตามลำดับ และเมื่อมีบล็อกจำนวนมาก อาจทำให้การดำเนินโครงการช้าลงได้ การดำเนินโครงการที่ช้าลงอาจสร้างความล่าช้าระหว่างการกดปุ่มตัวควบคุมและการดูพฤติกรรมของหุ่นยนต์

ตัวอย่างเฉพาะที่แสดงด้านล่างเป็นวิธีหนึ่งที่คุณสามารถใช้ Forever loop กับหุ่นยนต์ที่ออกแบบเอง (เช่น หุ่นยนต์ที่มีระบบขับเคลื่อนแบบกำหนดเอง) เพื่อขับเคลื่อนหุ่นยนต์และควบคุมกรงเล็บและแขนเพื่อโต้ตอบกับวัตถุ

เปิดโครงการ VEXcode EXP Workspace พร้อมบล็อกตัวเลือก 2 แล้ว โครงการนี้มีบล็อกซ้อนกันและมีการกำหนดค่าอุปกรณ์แล้ว เมนูอุปกรณ์จะเปิดขึ้นด้านข้างและแสดงรายการอุปกรณ์ต่อไปนี้: ArmMotor บนพอร์ต 3, ClawMotor บนพอร์ต 4, ตัวควบคุม, LeftMotor บนพอร์ต 6 และ RightMotor บนพอร์ต 10 สุดท้ายมีสแต็กของบล็อกสำหรับจัดการอินพุตของตัวควบคุม สแต็กจะอ่านว่า เมื่อเริ่มต้น ให้ตั้งค่า ArmMotor ให้หยุดเพื่อยึดไว้ และตั้งค่า ClawMotor ให้หยุดเพื่อยึดไว้ ส่วนที่เหลือของสแต็กจะอยู่ในลูป Forever อ่านว่าตลอดไป ตั้งค่าความเร็วของ LeftMotor เป็นตัวควบคุมที่ 3 ตำแหน่ง % หมุน LeftMotor ไปข้างหน้า ตั้งค่าความเร็วของ RightMotor เป็นตัวควบคุมที่ 2 ตำแหน่ง % และหมุน RightMotor ไปข้างหน้า ขั้นต่อไป หากกดปุ่ม Controller ขึ้น จากนั้นหมุน ArmMotor ขึ้น มิฉะนั้น หากกดปุ่ม Controller E ลง จากนั้นหมุน ArmMotor ลง มิฉะนั้น ให้หยุด ArmMotor สุดท้าย หากกดปุ่ม Controller A แล้วหมุน ClawMotor ให้เปิด มิฉะนั้น หากกดปุ่ม Controller B แล้วหมุน ClawMotor ให้ปิด มิฉะนั้นจะหยุด ClawMotor

ดาวน์โหลดไฟล์โครงการ "ตัวเลือก 2" VEXcode EXP >

คำอธิบายรหัสตัวเลือก 2

โค้ดชิ้น

คำอธิบาย

ภาพระยะใกล้ของสแต็กบล็อกในโครงการ Option 2 VEXcode EXP บล็อกสองบล็อกถูกเน้นและอยู่ภายนอกลูป Forever ของสแต็ก โดยจะอ่านว่าให้ ArmMotor หยุดค้างไว้ และตั้งค่า ClawMotor หยุดค้างไว้

ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม

ภาพระยะใกล้ของสแต็กบล็อกในโครงการ Option 2 VEXcode EXP บล็อกทั้งสี่ถูกเน้นไว้ภายในลูป Forever ของสแต็ก พวกเขาอ่านตลอดไป ตั้งค่าความเร็วของ LeftMotor ไปที่ตัวควบคุมที่ 3 ตำแหน่ง % หมุน LeftMotor ไปข้างหน้า ตั้งค่าความเร็วของ RightMotor ไปที่ตัวควบคุมที่ 2 ตำแหน่ง % และหมุน RightMotor ไปข้างหน้า แผนผังของตัวควบคุม EXP พร้อมปุ่มและจอยสติ๊กที่มีป้ายกำกับ มุมมองนี้คือจากด้านหน้าของตัวควบคุม แกนของจอยสติ๊กด้านซ้ายมีหมายเลข 3 และ 4 ปุ่มตรงกลางของจอยสติ๊กด้านซ้ายมีฉลากว่า L3 ปุ่มกลมสองปุ่มด้านล่างจอยสติ๊กด้านซ้ายมีป้ายกำกับว่าขึ้นและลง แกนของจอยสติ๊กด้านขวามีป้ายกำกับเป็น 1 และ 2 ปุ่มตรงกลางของจอยสติ๊กด้านขวามีฉลากชื่อว่า R3 ปุ่มกลมสองปุ่มด้านล่างจอยสติ๊กด้านขวามีฉลากว่า A และ B

ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนตัวควบคุมเพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม

มีการใช้วง Forever เพื่อตรวจสอบอย่างต่อเนื่องว่ามีการกดปุ่มใดบนคอนโทรลเลอร์

บล็อก [ตั้งค่าความเร็วมอเตอร์] ใช้เพื่อตั้งค่าความเร็วมอเตอร์ไปที่ตำแหน่งของตัวควบคุมปัจจุบันตามแกน 2 และ 3 ซึ่งเทียบเท่ากับการตั้งรถให้อยู่ในการขับขี่ นั่นไม่จำเป็นต้องทำให้รถเคลื่อนที่ แต่มันแค่ตั้งค่าไว้

แกนจอยสติ๊กแต่ละแกนจะส่งคืนค่าระหว่าง -100 ถึง +100 และส่งกลับค่าเป็นศูนย์เมื่ออยู่ตรงกลาง ซึ่งหมายความว่าแกนจอยสติ๊กเมื่อกดจะเท่ากับ -100% ถึง 100% ยิ่งผลักแกนออกไปอีก 100 หรือ -100 มอเตอร์ก็จะหมุนเร็วขึ้นเท่านั้น

จากนั้นจึงใช้บล็อก [Spin] เพื่อเคลื่อนย้ายมอเตอร์อย่างแท้จริง ซึ่งเทียบเท่ากับการกดแก๊สบนรถเมื่อกำหนดทิศทางแล้ว ซึ่งช่วยให้มอเตอร์แต่ละตัวสามารถควบคุมโดยแกนตัวควบคุมหนึ่งในสี่แกนได้

ภาพระยะใกล้ของสแต็กบล็อกในโครงการ Option 2 VEXcode EXP บล็อก if, else if, else จะถูกเน้นไว้ภายในลูป Forever ของสแต็ก อ่านว่าหากกดปุ่ม Controller Up แล้วหมุน ArmMotor ขึ้น มิฉะนั้น หากกดปุ่ม Controller Down แล้วหมุน ArmMotor ลง มิฉะนั้นจะหยุด ArmMotor

ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนตัวควบคุมเพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม

บล็อก [If then else if then else] ใช้เพื่อจับคู่พฤติกรรมบางอย่างกับปุ่มที่ถูกกดหรือปล่อยบนคอนโทรลเลอร์ ในโค้ดส่วนนี้ เงื่อนไขที่ตั้งไว้คือหากกดปุ่มขึ้นหรือลง หากเป็นเช่นนั้นจะมีพฤติกรรมบางอย่างเกิดขึ้น เช่น การยกแขนขึ้นและลง นอกจากนี้ยังมีส่วนอื่นของเงื่อนไขด้วย หากไม่ได้กดปุ่มใดเลย แขนก็จะถูกตั้งค่าให้หยุดเคลื่อนไหว

โปรดสังเกตส่วนของโค้ดต่อไปนี้ในโครงการสำหรับ Claw ตามคำอธิบายเดียวกัน

สรุปตัวเลือกที่ 2: การใช้ Forever Loop

ข้อดี

ข้อจำกัด

สถานการณ์ตัวอย่าง

  • สามารถรองรับงานประกอบแบบกำหนดเองได้ โดยเฉพาะระบบขับเคลื่อนที่มีมอเตอร์มากกว่า 4 ตัว
  • สามารถกำหนดพฤติกรรมหลายอย่างให้กับปุ่มเดียวได้
  • สามารถกำหนดพฤติกรรมให้กับแกนต่างๆ บนคอนโทรลเลอร์ได้ (ซึ่งตรงข้ามกับตัวเลือกเดียวของ Left Arcade, Right Arcade, Split Arcade และ Tank Drive ในการกำหนดค่าอุปกรณ์)
  • ต้องใช้ความรู้การเขียนโค้ดในระดับหนึ่ง (เงื่อนไข ลูป และความรู้เกี่ยวกับปุ่ม/จอยสติ๊กบนคอนโทรลเลอร์)
  • ศักยภาพในการดำเนินโครงการช้าลงหรือเวลาตอบสนองของปุ่มล่าช้า เนื่องจากคำสั่งทั้งหมดอยู่ในลูป Forever เดียว การเรียกใช้โค้ดจึงอาจทำงานช้าขึ้นอยู่กับเงื่อนไขที่ตั้งไว้และความยาวของโค้ด
  • การใช้คอนโทรลเลอร์กับหุ่นยนต์ที่สร้างขึ้นโดยเฉพาะ โดยเฉพาะอย่างยิ่งกับระบบขับเคลื่อนที่ไม่ได้มาตรฐาน
  • เมื่อต้องการกำหนดพฤติกรรมหลายอย่างให้กับปุ่มเดียว ตัวอย่างเช่น เมื่อกดปุ่มขึ้น Claw จะสามารถเปิด ขับไปข้างหน้า จากนั้นปิดรอบๆ วัตถุได้

ตัวเลือกที่ 3: การใช้เหตุการณ์

หากคุณต้องการปรับแต่งคอนโทรลเลอร์ได้มาก การใช้เหตุการณ์คือตัวเลือกที่ดีที่สุดสำหรับคุณ การกดปุ่มเพียงปุ่มเดียวสามารถกระตุ้นพฤติกรรมของหุ่นยนต์ได้หลายอย่าง เช่น การกดปุ่มเพื่อเปิดกรงเล็บ ยกแขนขึ้น และขับเคลื่อนไปข้างหน้าตามระยะทางที่กำหนด การพยายามเขียนโค้ดลักษณะการทำงานหลายอย่างต่อปุ่มภายในลูป Forever จะทำให้การดำเนินโปรเจ็กต์ช้าลงอย่างมาก การใช้เหตุการณ์ช่วยให้คุณทำสิ่งนี้ได้อย่างมีประสิทธิภาพมากขึ้น

ตัวเลือกนี้ใช้เหตุการณ์เพื่อแยกโฟลว์โปรเจ็กต์ สิ่งนี้คล้ายกับการใช้ Forever loop แต่ช่วยให้โค้ดสามารถจัดระเบียบได้มากขึ้น เพื่อให้การทำงานของปุ่มมีเวลาตอบสนองเร็วขึ้น เวลาตอบสนองที่เร็วขึ้นหมายความว่าคุณจะไม่เห็นความล่าช้าระหว่างการกดปุ่มตัวควบคุมและการมองเห็นพฤติกรรมของหุ่นยนต์ ตัวอย่างนี้แสดงลักษณะการทำงานเดียวกันกับโปรเจ็กต์ก่อนหน้า แต่เสร็จสิ้นโดยใช้เหตุการณ์แทน Forever Loop

เปิดโครงการ VEXcode EXP Workspace พร้อมบล็อกตัวเลือก 3 แล้ว โครงการนี้ประกอบด้วยบล็อกสแต็กเล็ก 11 สแต็กและมีอุปกรณ์ที่กำหนดค่าไว้ เมนูอุปกรณ์จะเปิดขึ้นด้านข้างและแสดงรายการอุปกรณ์ต่อไปนี้: ArmMotor บนพอร์ต 3, ClawMotor บนพอร์ต 4, ตัวควบคุม, LeftMotor บนพอร์ต 6 และ RightMotor บนพอร์ต 10 สุดท้ายมีบล็อกสแต็กเล็ก 11 สแต็กที่ทำหน้าที่จัดการอินพุตของตัวควบคุม สแต็กแรกอ่านว่า เมื่อเริ่มต้น ให้ตั้งค่า ArmMotor ให้หยุดเพื่อคงสถานะเดิม จากนั้นตั้งค่า ClawMotor ให้หยุดเพื่อคงสถานะเดิม สแต็กที่สองอ่านว่า เมื่อเปลี่ยนแกนตัวควบคุม 3 ให้ตั้งค่าความเร็วของ LeftMotor ไปที่ตำแหน่งตัวควบคุม 3 เป็น % จากนั้นหมุน LeftMotor ไปข้างหน้า สแต็กที่สามอ่านว่า เมื่อแกนตัวควบคุม 2 มีการเปลี่ยนแปลง ให้ตั้งค่าความเร็วของ RightMotor ไปที่ตำแหน่งตัวควบคุม 2 เป็น % จากนั้นหมุน RightMotor ไปข้างหน้า สแต็กที่สี่อ่านว่า เมื่อกดปุ่มคอนโทรลเลอร์ขึ้น ให้หมุน ArmMotor ขึ้น สแต็กที่ห้าอ่านว่า เมื่อปล่อยปุ่มคอนโทรลเลอร์ขึ้น ให้หยุด ArmMotor สแต็กที่ 6 อ่านว่า เมื่อกดปุ่ม Controller ลง ให้หมุน ArmMotor ลง สแต็กที่เจ็ดอ่านว่า เมื่อปล่อยปุ่มคอนโทรลเลอร์ลง ArmMotor จะหยุด สแต็กที่แปดอ่านว่า เมื่อกดปุ่มควบคุม A ให้หมุน ClawMotor ให้เปิด สแต็กที่เก้าอ่านว่า เมื่อปล่อยปุ่มคอนโทรลเลอร์ A ให้หยุด ClawMotor สแต็กที่สิบอ่านว่า เมื่อกดปุ่มควบคุม B ให้หมุน ClawMotor ปิด สแต็กที่สิบเอ็ดและสแต็กสุดท้ายอ่านว่า เมื่อปล่อยปุ่มควบคุม B ให้หยุด ClawMotor

ดาวน์โหลดไฟล์โครงการ "ตัวเลือก 3" VEXcode EXP >

คำอธิบายรหัสตัวเลือก 3

โค้ดชิ้น

คำอธิบาย

ภาพระยะใกล้ของบล็อกหนึ่งกองในโครงการ Option 3 VEXcode EXP สแต็กจะอ่านว่า เมื่อเริ่มต้น ให้ตั้งค่า ArmMotor ให้หยุดเพื่อคงสถานะเดิม จากนั้นจึงตั้งค่า ClawMotor ให้หยุดเพื่อคงสถานะเดิม

ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนตัวควบคุมเพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม

ภาพระยะใกล้ของบล็อกสองกองในโครงการ Option 3 VEXcode EXP สแต็กแรกจะอ่านว่า เมื่อเปลี่ยนแกนตัวควบคุม 3 ให้ตั้งค่าความเร็วของมอเตอร์ด้านซ้ายเป็นตำแหน่งตัวควบคุม 3 เป็น % จากนั้นจึงหมุนมอเตอร์ด้านซ้ายไปข้างหน้า สแต็กที่สองอ่านว่า เมื่อแกนตัวควบคุม 2 มีการเปลี่ยนแปลง ให้ตั้งค่าความเร็วของ RightMotor ไปที่ตำแหน่งตัวควบคุม 2 เป็น % จากนั้นหมุน RightMotor ไปข้างหน้า แผนผังของตัวควบคุม EXP พร้อมปุ่มและจอยสติ๊กที่มีป้ายกำกับ มุมมองนี้คือจากด้านหน้าของตัวควบคุม แกนของจอยสติ๊กด้านซ้ายมีหมายเลข 3 และ 4 ปุ่มตรงกลางของจอยสติ๊กด้านซ้ายมีฉลากว่า L3 ปุ่มกลมสองปุ่มด้านล่างจอยสติ๊กด้านซ้ายมีป้ายกำกับว่าขึ้นและลง แกนของจอยสติ๊กด้านขวามีป้ายกำกับเป็น 1 และ 2 ปุ่มตรงกลางของจอยสติ๊กด้านขวามีฉลากชื่อว่า R3 ปุ่มกลมสองปุ่มด้านล่างจอยสติ๊กด้านขวามีฉลากว่า A และ B

ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม

{When controller axis} บล็อกเหตุการณ์ใช้เพื่อกระตุ้นพฤติกรรมบางอย่างเมื่อแกนใดแกนหนึ่งในสี่แกนบนคอนโทรลเลอร์ถูกเปลี่ยนโดยใช้จอยสติ๊ก

บล็อก [ตั้งค่าความเร็วมอเตอร์] ใช้เพื่อตั้งค่าความเร็วมอเตอร์ไปที่ตำแหน่งของตัวควบคุมปัจจุบันตามแนวแกน A และ D ซึ่งเทียบเท่ากับการตั้งรถให้อยู่ในการขับขี่ นั่นไม่จำเป็นต้องทำให้รถเคลื่อนที่ แต่มันแค่ตั้งค่าไว้

แกนจอยสติ๊กแต่ละแกนจะส่งคืนค่าระหว่าง -100 ถึง +100 และส่งกลับค่าเป็นศูนย์เมื่ออยู่ตรงกลาง ซึ่งหมายความว่าแกนจอยสติ๊กเมื่อกดจะเท่ากับ -100% ถึง 100% ยิ่งผลักแกนออกไปอีก 100 หรือ -100 มอเตอร์ก็จะหมุนเร็วขึ้นเท่านั้น

จากนั้นจึงใช้บล็อก [Spin] เพื่อเคลื่อนย้ายมอเตอร์อย่างแท้จริง ซึ่งเทียบเท่ากับการกดแก๊สบนรถเมื่อกำหนดทิศทางแล้ว ซึ่งช่วยให้มอเตอร์แต่ละตัวสามารถควบคุมโดยแกนตัวควบคุมหนึ่งในสี่แกนได้

ภาพระยะใกล้ของบล็อกสี่กองในโครงการ Option 3 VEXcode EXP สแต็กแรกอ่านว่า เมื่อกดปุ่ม Controller ขึ้น ให้หมุน ArmMotor ขึ้น สแต็กที่สองอ่านว่า เมื่อปล่อยปุ่มคอนโทรลเลอร์ขึ้น ให้หยุด ArmMotor สแต็กที่สามอ่านว่า เมื่อกดปุ่ม Controller ลง ให้หมุน ArmMotor ลง สแต็กที่สี่อ่านว่า เมื่อปล่อยปุ่มคอนโทรลเลอร์ลง ให้หยุด ArmMotor

ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนตัวควบคุมเพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม

{When controller axis} บล็อกเหตุการณ์ใช้เพื่อจับคู่พฤติกรรมบางอย่างกับปุ่มที่ถูกกดหรือปล่อยบนคอนโทรลเลอร์ ในโค้ดส่วนนี้ เงื่อนไขที่ตั้งไว้คือหากกดปุ่มขึ้นหรือลง หากเป็นเช่นนั้นจะมีพฤติกรรมบางอย่างเกิดขึ้น เช่น การยกแขน ลดระดับ หรือหยุด

โปรดทราบว่าส่วนสุดท้ายของโค้ดในโครงการสำหรับ Claw เป็นไปตามคำอธิบายเดียวกัน

สรุปตัวเลือกที่ 3: การใช้เหตุการณ์

ข้อดี

ข้อจำกัด

สถานการณ์ตัวอย่าง

  • สามารถรองรับงานประกอบแบบกำหนดเองได้ โดยเฉพาะระบบขับเคลื่อนที่มีมอเตอร์มากกว่า 4 ตัว
  • สามารถกำหนดพฤติกรรมหลายอย่างให้กับปุ่มเดียวได้
  • สามารถกำหนดพฤติกรรมให้กับแกนต่างๆ บนคอนโทรลเลอร์ได้ (ซึ่งตรงข้ามกับตัวเลือกเดียวของ Left Arcade, Right Arcade, Split Arcade และ Tank Drive ในการกำหนดค่าอุปกรณ์)
  • การเรียกใช้โค้ดที่เร็วขึ้นและการตอบสนองของปุ่ม (เนื่องจากแต่ละเงื่อนไขถูกเรียกใช้แยกกันและไม่ได้ฝังอยู่ในโค้ดสแต็กเดียว)
  • ต้องการความรู้ด้านการเขียนโค้ดเกี่ยวกับตัวเลือกต่างๆ มากที่สุด (เงื่อนไข ลูป เหตุการณ์ และความรู้เกี่ยวกับปุ่ม/จอยสติ๊กบนคอนโทรลเลอร์)
  • การใช้คอนโทรลเลอร์กับหุ่นยนต์ที่สร้างขึ้นโดยเฉพาะ โดยเฉพาะอย่างยิ่งกับระบบขับเคลื่อนที่ไม่ได้มาตรฐาน
  • เมื่อต้องการกำหนดลักษณะการทำงานหลายอย่างให้กับปุ่มเดียวโดยไม่มีความล่าช้า ตัวอย่างเช่น เมื่อกดปุ่มขึ้น Claw จะสามารถเปิด ขับไปข้างหน้า จากนั้นปิดรอบๆ วัตถุได้

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

Last Updated: