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

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

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

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

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

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

ตัวควบคุม VEX IQ

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

ข้อดี

ข้อจำกัด

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

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

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

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

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

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

รูปภาพของการใช้วงวนตลอดไป

ดาวน์โหลดไฟล์โครงการ "ตัวเลือก 2" VEXcode IQ (รุ่นที่ 2) >

หมายเหตุ: หากใช้ Clawbot รุ่นที่ 1 มอเตอร์แขนจะต้องกลับด้านในการกำหนดค่าอุปกรณ์เพื่อให้ทำงานตามที่ต้องการในโปรเจ็กต์ข้างต้น

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

รหัสชิ้นส่วน

คำอธิบาย

ตั้งค่าให้ ArmMotor หยุดค้างไว้ และตั้งค่าให้ ClawMotor หยุดค้างไว้

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

การตั้งค่าความเร็วและการหมุนของมอเตอร์ ตัวควบคุม VEX IQ พร้อมแผนภาพปุ่ม

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

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

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

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

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

คำสั่งแบบมีเงื่อนไขหากกดคอนโทรลเลอร์ E Up

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

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

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

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

ข้อดี

ข้อจำกัด

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

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

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

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

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

การใช้เหตุการณ์แทน Forever Loop

ดาวน์โหลดไฟล์โครงการ "ตัวเลือก 3" VEXcode IQ (รุ่นที่ 2) >

หมายเหตุ: หากใช้ Clawbot รุ่นที่ 1 มอเตอร์แขนจะต้องกลับด้านในการกำหนดค่าอุปกรณ์เพื่อให้ทำงานตามที่ต้องการในโปรเจ็กต์ข้างต้น

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

รหัสชิ้นส่วน

คำอธิบาย

ตั้งค่าให้ ArmMotor หยุดค้างไว้ และตั้งค่าให้ ClawMotor หยุดค้างไว้

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

ตั้งค่าความเร็วมอเตอร์ด้านซ้ายเป็นตำแหน่งคอนโทรลเลอร์ A % แล้วหมุนมอเตอร์ไปทางซ้ายไปข้างหน้า ตัวควบคุม VEX IQ พร้อมแผนภาพปุ่ม

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

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

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

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

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

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

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

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

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

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

ข้อดี

ข้อจำกัด

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

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

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

Last Updated: