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

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

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

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

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

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

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

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

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

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

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

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

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

พื้นที่ทำงาน VEXcode V5 โดยเปิดโปรเจ็กต์ Option 2 blocks ไว้ โครงการนี้ประกอบด้วยบล็อกหลายชั้น และมีการกำหนดค่าอุปกรณ์ต่างๆ แล้ว เมนูอุปกรณ์จะเปิดขึ้นทางด้านข้างและแสดงรายการอุปกรณ์ดังต่อไปนี้: Controller1, ClawMotor บนพอร์ต 3, ArmMotor บนพอร์ต 8, LeftMotor บนพอร์ต 1 และ RightMotor บนพอร์ต 10 ในพื้นที่ทำงานจะมีบล็อกเรียงซ้อนกันอยู่เพื่อจัดการกับอินพุตของคอนโทรลเลอร์ ข้อความในสแต็กระบุว่า เมื่อเริ่มต้นทำงาน ให้ตั้งค่า ArmMotor stopping เป็น hold และตั้งค่า ClawMotor stopping เป็น hold ส่วนที่เหลือของสแต็กนั้นถูกเก็บไว้ในลูป Forever ข้อความระบุว่า "ตลอดไป ตั้งค่าความเร็วของมอเตอร์ซ้ายเป็นตำแหน่งที่ 3 ของ Controller1 หมุนมอเตอร์ซ้ายไปข้างหน้า ตั้งค่าความเร็วของมอเตอร์ขวาเป็นตำแหน่งที่ 2 ของ Controller1 และหมุนมอเตอร์ขวาไปข้างหน้า" ถัดไป หากกดปุ่มขึ้นของ Controller1 ให้หมุนมอเตอร์แขนขึ้น มิฉะนั้น หากกดปุ่มลงของ Controller1 ให้หมุนมอเตอร์แขนลง มิฉะนั้น ให้หยุดมอเตอร์แขน สุดท้ายนี้ หากกดปุ่ม Controller1 A ให้หมุนมอเตอร์กรงเล็บเปิดออก หากกดปุ่ม Controller1 B ให้หมุนมอเตอร์กรงเล็บปิดออก และหากกดปุ่มอื่น ให้หยุดมอเตอร์กรงเล็บ

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

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

โค้ดชิ้น คำอธิบาย
ภาพระยะใกล้ของบล็อกที่ซ้อนกันในโปรเจ็กต์ Option 2 VEXcode V5 บล็อกสองบล็อกถูกไฮไลต์และอยู่นอกลูป Forever ของสแต็ก โดยมีข้อความว่า set ArmMotor stopping to hold และ set ClawMotor stopping to hold ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม
ภาพระยะใกล้ของบล็อกที่ซ้อนกันในโปรเจ็กต์ Option 2 VEXcode V5 บล็อกสี่บล็อกถูกไฮไลต์อยู่ภายในลูป Forever ของสแต็ก พวกเขาอ่านข้อความว่า "ตลอดไป ตั้งค่าความเร็วของมอเตอร์ซ้ายเป็นตำแหน่งที่ 3 ของตัวควบคุมที่ 1 หมุนมอเตอร์ซ้ายไปข้างหน้า ตั้งค่าความเร็วของมอเตอร์ขวาเป็นตำแหน่งที่ 2 ของตัวควบคุมที่ 1 และหมุนมอเตอร์ขวาไปข้างหน้า"

 

ตัวควบคุม V5 เพื่อแสดงภาพเค้าโครงปุ่มต่างๆ

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

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

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

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

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

ภาพระยะใกล้ของบล็อกที่ซ้อนกันในโปรเจ็กต์ Option 2 VEXcode V5 บล็อก if, else if, else จะถูกไฮไลต์ภายในลูป Forever ของสแต็ก ข้อความนี้อ่านว่า ถ้ากดปุ่ม Controller1 Up ให้หมุนมอเตอร์แขนขึ้น ถ้ากดปุ่ม Controller1 Down ให้หมุนมอเตอร์แขนลง และถ้าไม่กดปุ่มใด ๆ ให้หยุดมอเตอร์แขน

 

ตัวอย่างโค้ดนี้ใช้ 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 พร้อมโปรเจ็กต์ Option 3 blocks ที่เปิดอยู่ โครงการนี้ประกอบด้วยบล็อกขนาดเล็ก 11 ชุด และมีการกำหนดค่าอุปกรณ์ต่างๆ ไว้แล้ว เมนูอุปกรณ์จะเปิดขึ้นทางด้านข้างและแสดงรายการอุปกรณ์ดังต่อไปนี้: Controller1, ClawMotor บนพอร์ต 3, ArmMotor บนพอร์ต 8, LeftMotor บนพอร์ต 1 และ RightMotor บนพอร์ต 10 ในพื้นที่ทำงานจะมีกลุ่มบล็อกขนาดเล็ก 11 กลุ่มที่ทำหน้าที่จัดการอินพุตของคอนโทรลเลอร์ ข้อความแรกระบุว่า เมื่อเริ่มต้น ให้ตั้งค่า ArmMotor stopping เป็น hold จากนั้นตั้งค่า ClawMotor stopping เป็น hold ข้อความชุดที่สองระบุว่า เมื่อแกนที่ 3 ของ Controller1 เปลี่ยนแปลง ให้ตั้งค่าความเร็วของมอเตอร์ซ้ายเป็นเปอร์เซ็นต์ตำแหน่งที่ 3 ของ Controller1 จากนั้นหมุนมอเตอร์ซ้ายไปข้างหน้า คำสั่งชุดที่สามระบุว่า เมื่อแกนที่ 2 ของ Controller1 เปลี่ยนแปลง ให้ตั้งค่าความเร็วของมอเตอร์ขวาเป็นเปอร์เซ็นต์ตำแหน่งที่ 2 ของ Controller1 จากนั้นหมุนมอเตอร์ขวาไปข้างหน้า ลำดับที่สี่ระบุว่า เมื่อกดปุ่มขึ้นของ Controller1 มอเตอร์แขนจะหมุนขึ้น ลำดับที่ห้าอ่านว่า เมื่อปล่อยปุ่มขึ้นของ Controller1 ให้หยุดมอเตอร์แขน ลำดับที่หกอ่านว่า เมื่อกดปุ่ม Controller1 ลง ให้หมุนมอเตอร์แขนลง ข้อความลำดับที่เจ็ดระบุว่า เมื่อปล่อยปุ่ม Controller1 ให้หยุดมอเตอร์แขน ข้อความลำดับที่แปดระบุว่า เมื่อกดปุ่ม A ของ Controller1 ให้หมุน ClawMotor เพื่อเปิดออก ข้อความลำดับที่เก้าอ่านว่า เมื่อปล่อยปุ่ม A ของ Controller1 ให้หยุด ClawMotor ข้อความลำดับที่สิบระบุว่า เมื่อกดปุ่ม B ของ Controller1 มอเตอร์กรงเล็บจะหมุนเพื่อปิด ข้อความลำดับที่สิบเอ็ดและสุดท้ายระบุว่า เมื่อปล่อยปุ่ม B ของ Controller1 ให้หยุด ClawMotor

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

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

โค้ดชิ้น คำอธิบาย
ภาพระยะใกล้ของกองบล็อกหนึ่งกองในโปรเจ็กต์ Option 3 VEXcode V5 ข้อความในสแต็กระบุว่า เมื่อเริ่มต้นทำงาน ให้ตั้งค่า ArmMotor stopping เป็น hold จากนั้นตั้งค่า ClawMotor stopping เป็น hold
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม
ภาพระยะใกล้ของบล็อกสองกองในโปรเจ็กต์ Option 3 VEXcode V5 ข้อความแรกระบุว่า เมื่อแกนที่ 3 ของ Controller1 เปลี่ยนแปลง ให้ตั้งค่าความเร็วของมอเตอร์ซ้ายเป็นเปอร์เซ็นต์ตำแหน่งที่ 3 ของ Controller1 จากนั้นหมุนมอเตอร์ซ้ายไปข้างหน้า ข้อความชุดที่สองระบุว่า เมื่อแกนที่ 2 ของ Controller1 เปลี่ยนแปลง ให้ตั้งค่าความเร็วของมอเตอร์ขวาเป็นเปอร์เซ็นต์ตำแหน่งที่ 2 ของ Controller1 จากนั้นหมุนมอเตอร์ขวาไปข้างหน้า

 

ตัวควบคุม V5 เพื่อแสดงภาพเค้าโครงปุ่มต่างๆ

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

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

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

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

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

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

 

ตัวอย่างโค้ดนี้ใช้ 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: