การใช้คอนโทรลเลอร์ช่วยให้ขับและเคลื่อนย้ายหุ่นยนต์ของคุณเพื่อทำงานให้เสร็จสิ้นได้ง่ายขึ้น อย่างไรก็ตาม มีข้อจำกัดในการใช้โปรแกรม Drive และขึ้นอยู่กับโครงสร้างหุ่นยนต์ของคุณหรืองานที่ทำอยู่ คุณอาจต้องการการควบคุมที่แตกต่างกัน การเขียนโค้ดคอนโทรลเลอร์ทำให้คุณสามารถเพิ่มประสิทธิภาพคอนโทรลเลอร์เพื่อให้เหมาะสมกับหุ่นยนต์และงานในมือได้ดีขึ้น มีหลายวิธีในการเขียนโค้ดคอนโทรลเลอร์ใน VEXcode IQ แต่ละวิธีมีข้อดีและข้อจำกัดของตัวเอง และบางวิธีก็เหมาะกับบางสถานการณ์มากกว่า ขึ้นอยู่กับผลลัพธ์ที่ต้องการ
บทความนี้จะแนะนำสามตัวเลือกที่แตกต่างกันสำหรับการเข้ารหัสคอนโทรลเลอร์แบบกำหนดเองใน VEXcode IQ แต่ละวิธีจะมีการอธิบายข้อดี ข้อจำกัด และกรณีการใช้งานตัวอย่างเพื่อช่วยแนะนำคุณในการเลือกวิธีการ เพื่อวัตถุประสงค์ของบทความนี้ ตัวอย่างโค้ดทั้งหมดที่แสดงถูกสร้างขึ้นสำหรับ Clawbot อย่างไรก็ตาม แนวคิดเดียวกันนี้สามารถนำไปใช้กับบิลด์อื่นๆ มากมายที่พบใน builds.vex.comและบิลด์แบบกำหนดเอง
ตัวเลือกที่ 1: การกำหนดปุ่มในการกำหนดค่าอุปกรณ์
ตัวเลือกนี้เหมาะอย่างยิ่งเมื่อคุณใช้บิลด์มาตรฐาน เช่น BaseBot หรือ Clawbot และต้องการเริ่มต้นและดำเนินการอย่างรวดเร็ว
ตัวเลือกนี้ช่วยให้คุณกำหนดมอเตอร์ ระบบขับเคลื่อน หรือกลุ่มมอเตอร์ให้กับปุ่มบนตัวควบคุมในการกำหนดค่าอุปกรณ์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการกำหนดปุ่มให้กับคอนโทรลเลอร์ในการกำหนดค่าอุปกรณ์ ดูบทความนี้
สรุปตัวเลือกที่ 1: การกำหนดปุ่มในการกำหนดค่าอุปกรณ์
ข้อดี |
ข้อจำกัด |
สถานการณ์ตัวอย่าง |
|
|
|
ตัวเลือกที่ 2: การใช้ Forever Loop
หากคุณกำลังใช้บิลด์แบบกำหนดเองแทนบิลด์มาตรฐาน หรือต้องการให้สามารถปรับแต่งเพิ่มเติมในคอนโทรลเลอร์ของคุณได้ ตัวเลือกนี้ถือเป็นตัวเลือกที่ดี การใช้วง Forever เป็นการแนะนำที่ดีในการสร้างโค้ดแบบกำหนดเองสำหรับคอนโทรลเลอร์ของคุณ
ตัวเลือกนี้จะวางเงื่อนไขทั้งหมดสำหรับคอนโทรลเลอร์และปุ่มที่เกี่ยวข้องไว้ในลูปตลอดกาล สิ่งนี้ให้ความยืดหยุ่นมากขึ้น โดยเฉพาะอย่างยิ่งกับการออกแบบบิวด์แบบกำหนดเอง แต่ยังต้องใช้ประสบการณ์การเขียนโค้ดด้วย ข้อควรพิจารณาประการหนึ่งเมื่อใช้ตัวเลือกนี้คือความยาวและความซับซ้อนของโครงการของคุณ ยิ่งมีเงื่อนไขเพิ่มเติมมากเท่าไร กองโค้ดก็จะยิ่งยาวขึ้นเท่านั้น ซึ่งหมายความว่าจะต้องดำเนินการหลายบล็อกตามลำดับ และเมื่อมีบล็อกจำนวนมาก อาจทำให้การดำเนินโครงการช้าลงได้ การดำเนินโครงการที่ช้าลงอาจสร้างความล่าช้าระหว่างการกดปุ่มตัวควบคุมและการดูพฤติกรรมของหุ่นยนต์
ตัวอย่างเฉพาะที่แสดงด้านล่างเป็นวิธีหนึ่งที่คุณสามารถใช้ Forever loop กับหุ่นยนต์ที่ออกแบบเอง (เช่น หุ่นยนต์ที่มีระบบขับเคลื่อนแบบกำหนดเอง) เพื่อขับเคลื่อนหุ่นยนต์และควบคุมกรงเล็บและแขนเพื่อโต้ตอบกับวัตถุ
ดาวน์โหลดไฟล์โครงการ "ตัวเลือก 2" VEXcode IQ (รุ่นที่ 2) >
หมายเหตุ: หากใช้ Clawbot รุ่นที่ 1 มอเตอร์แขนจะต้องกลับด้านในการกำหนดค่าอุปกรณ์เพื่อให้ทำงานตามที่ต้องการในโปรเจ็กต์ข้างต้น
คำอธิบายของรหัสตัวเลือก 2
รหัสชิ้นส่วน |
คำอธิบาย |
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม |
|
|
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม มีการใช้วง Forever เพื่อตรวจสอบอย่างต่อเนื่องว่ามีการกดปุ่มใดบนคอนโทรลเลอร์ บล็อก [ตั้งค่าความเร็วมอเตอร์] ใช้เพื่อตั้งค่าความเร็วมอเตอร์ไปที่ตำแหน่งของตัวควบคุมปัจจุบันตามแนวแกน A และ D ซึ่งเทียบเท่ากับการตั้งรถให้อยู่ในการขับขี่ นั่นไม่จำเป็นต้องทำให้รถเคลื่อนที่ แต่มันแค่ตั้งค่าไว้ แกนจอยสติ๊กแต่ละแกนจะส่งคืนค่าระหว่าง -100 ถึง +100 และส่งกลับค่าเป็นศูนย์เมื่ออยู่ตรงกลาง ซึ่งหมายความว่าแกนจอยสติ๊กเมื่อกดจะเท่ากับ -100% ถึง 100% ยิ่งผลักแกนออกไปอีก 100 หรือ -100 มอเตอร์ก็จะหมุนเร็วขึ้นเท่านั้น จากนั้นจึงใช้บล็อก [Spin] เพื่อเคลื่อนย้ายมอเตอร์อย่างแท้จริง ซึ่งเทียบเท่ากับการกดแก๊สบนรถเมื่อกำหนดทิศทางแล้ว ซึ่งช่วยให้มอเตอร์แต่ละตัวสามารถควบคุมโดยแกนตัวควบคุมหนึ่งในสี่แกนได้ |
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม บล็อก [If then else if then else] ใช้เพื่อจับคู่พฤติกรรมบางอย่างกับปุ่มที่ถูกกดหรือปล่อยบนคอนโทรลเลอร์ ในโค้ดส่วนนี้ เงื่อนไขที่ตั้งไว้คือถ้ากดปุ่ม E Up หรือ E Down หากเป็นเช่นนั้นจะมีพฤติกรรมบางอย่างเกิดขึ้น เช่น การยกแขนขึ้นและลง นอกจากนี้ยังมีส่วนอื่นของเงื่อนไขด้วย หากไม่ได้กดปุ่มใดเลย แขนก็จะถูกตั้งค่าให้หยุดเคลื่อนไหว โปรดสังเกตส่วนของโค้ดต่อไปนี้ในโครงการสำหรับ Claw ตามคำอธิบายเดียวกัน |
บทสรุปของตัวเลือกที่ 2: การใช้ Forever Loop
ข้อดี |
ข้อจำกัด |
สถานการณ์ตัวอย่าง |
|
|
|
ตัวเลือกที่ 3: การใช้เหตุการณ์
หากคุณต้องการปรับแต่งคอนโทรลเลอร์ได้มาก การใช้เหตุการณ์คือตัวเลือกที่ดีที่สุดสำหรับคุณ การกดปุ่มเพียงปุ่มเดียวสามารถกระตุ้นพฤติกรรมของหุ่นยนต์ได้หลายอย่าง เช่น การกดปุ่มเพื่อเปิดกรงเล็บ ยกแขนขึ้น และขับเคลื่อนไปข้างหน้าตามระยะทางที่กำหนด การพยายามเขียนโค้ดลักษณะการทำงานหลายอย่างต่อปุ่มภายในลูป Forever จะทำให้การดำเนินโปรเจ็กต์ช้าลงอย่างมาก การใช้เหตุการณ์ช่วยให้คุณทำสิ่งนี้ได้อย่างมีประสิทธิภาพมากขึ้น
ตัวเลือกนี้ใช้เหตุการณ์เพื่อแยกโฟลว์โปรเจ็กต์ สิ่งนี้คล้ายกับการใช้ Forever loop แต่ช่วยให้โค้ดสามารถจัดระเบียบได้มากขึ้น เพื่อให้การทำงานของปุ่มมีเวลาตอบสนองเร็วขึ้น เวลาตอบสนองที่เร็วขึ้นหมายความว่าคุณจะไม่เห็นความล่าช้าระหว่างการกดปุ่มตัวควบคุมและการมองเห็นพฤติกรรมของหุ่นยนต์ ตัวอย่างนี้แสดงลักษณะการทำงานเดียวกันกับโปรเจ็กต์ก่อนหน้า แต่เสร็จสิ้นโดยใช้เหตุการณ์แทน Forever Loop
ดาวน์โหลดไฟล์โครงการ "ตัวเลือก 3" VEXcode IQ (รุ่นที่ 2) >
หมายเหตุ: หากใช้ Clawbot รุ่นที่ 1 มอเตอร์แขนจะต้องกลับด้านในการกำหนดค่าอุปกรณ์เพื่อให้ทำงานตามที่ต้องการในโปรเจ็กต์ข้างต้น
คำอธิบายของรหัสตัวเลือก 3
รหัสชิ้นส่วน |
คำอธิบาย |
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม |
|
|
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม {When controller axis} บล็อกเหตุการณ์ใช้เพื่อกระตุ้นพฤติกรรมบางอย่างเมื่อแกนใดแกนหนึ่งในสี่แกนบนคอนโทรลเลอร์ถูกเปลี่ยนโดยใช้จอยสติ๊ก บล็อก [ตั้งค่าความเร็วมอเตอร์] ใช้เพื่อตั้งค่าความเร็วมอเตอร์ไปที่ตำแหน่งของตัวควบคุมปัจจุบันตามแนวแกน A และ D ซึ่งเทียบเท่ากับการตั้งรถให้อยู่ในการขับขี่ นั่นไม่จำเป็นต้องทำให้รถเคลื่อนที่ แต่มันแค่ตั้งค่าไว้ แกนจอยสติ๊กแต่ละแกนจะส่งคืนค่าระหว่าง -100 ถึง +100 และส่งกลับค่าเป็นศูนย์เมื่ออยู่ตรงกลาง ซึ่งหมายความว่าแกนจอยสติ๊กเมื่อกดจะเท่ากับ -100% ถึง 100% ยิ่งผลักแกนออกไปอีก 100 หรือ -100 มอเตอร์ก็จะหมุนเร็วขึ้นเท่านั้น จากนั้นจึงใช้บล็อก [Spin] เพื่อเคลื่อนย้ายมอเตอร์อย่างแท้จริง ซึ่งเทียบเท่ากับการกดแก๊สบนรถเมื่อกำหนดทิศทางแล้ว ซึ่งช่วยให้มอเตอร์แต่ละตัวสามารถควบคุมโดยแกนตัวควบคุมหนึ่งในสี่แกนได้ |
ตัวอย่างโค้ดนี้ใช้ Clawbot เมื่อใช้ปุ่มบนคอนโทรลเลอร์เพื่อยกแขนขึ้นและลดระดับลง ทันทีที่ปล่อยปุ่ม เนื่องจากแรงโน้มถ่วง แขนจะถอยกลับลงมา การตั้งค่าทั้งแขนและกรงเล็บให้ "ค้าง" จะช่วยให้แน่ใจว่าทั้งแขนและกรงเล็บจะยังคงอยู่ในตำแหน่งเดิมแม้ว่าจะปล่อยปุ่มบนคอนโทรลเลอร์แล้วก็ตาม {When controller axis} บล็อกเหตุการณ์ใช้เพื่อจับคู่พฤติกรรมบางอย่างกับปุ่มที่ถูกกดหรือปล่อยบนคอนโทรลเลอร์ ในโค้ดส่วนนี้ เงื่อนไขที่ตั้งไว้คือถ้ากดปุ่ม E Up หรือ E Down หากเป็นเช่นนั้นจะมีพฤติกรรมบางอย่างเกิดขึ้น เช่น การยกแขน ลดระดับ หรือหยุด โปรดทราบว่าส่วนสุดท้ายของโค้ดในโครงการสำหรับ Claw เป็นไปตามคำอธิบายเดียวกัน |
สรุปตัวเลือกที่ 3: การใช้เหตุการณ์
ข้อดี |
ข้อจำกัด |
สถานการณ์ตัวอย่าง |
|
|
|