รับมากขึ้นด้วย VEXcode
เราขอแนะนำให้คุณเปลี่ยนไปใช้ซอฟต์แวร์ใหม่ของเรา VEXcode มีทั้งตัวเลือกแบบบล็อกและแบบข้อความ ซึ่งทำงานบน Chromebook, iPads, แท็บเล็ต Android, Windows และ Mac ไปที่ code.vex.com สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการดาวน์โหลด VEXcode
VEX Coding studio ถูกยกเลิกและไม่สามารถดาวน์โหลดได้อีกต่อไป ดาวน์โหลดแล้ว? โปรแกรมจะยังคงทำงานต่อไป แต่จะไม่ได้รับการสนับสนุนอีกต่อไป
ผู้ใช้ที่เปลี่ยนไปใช้ VEXcode สามารถย้ายโปรเจ็กต์ C++/C++ Pro ไปยัง VEXcode Pro V5 ได้โดยทำตาม บทความนี้

ขั้นตอนที่ 1: รู้ว่ารหัสกำลังบล็อกหรือไม่บล็อก

  • ดูคำสั่ง Motor.spin สองคำสั่งที่อยู่ถัดจากลูกศรสีเขียว ลูกศรสีเขียวแสดงถึงคำสั่งที่ไม่ปิดกั้น
  • สังเกตว่าไม่มีสถานะเป้าหมายรวมอยู่ในคำสั่งการดำเนินการเหล่านั้น - เพียงหมุนมอเตอร์ขวาไปข้างหน้าและมอเตอร์ซ้ายในทางกลับกัน เป็นคำสั่งที่ไม่บล็อกซึ่งจะยังคงทำงานต่อไปเมื่อโปรแกรมทำงานต่อด้วยคำสั่งถัดไป
  • ดูคำสั่ง Motor.rotateFor และ Motor.rotateTo ข้างลูกศรสีแดง ลูกศรสีแดงแสดงถึงคำสั่งบล็อก
  • สังเกตว่ามีสถานะเป้าหมายรวมอยู่ในคำสั่งการกระทำเหล่านั้น - เพื่อหมุน 270 องศาหรือหมุนเป็น 270 องศา พวกเขากำลังบล็อกคำสั่งเนื่องจากโปรแกรมจะทำสิ่งนี้จนกว่าจะเสร็จสิ้นก่อนที่จะดำเนินการคำสั่งต่อไป
  • ดูคำสั่ง Motor.rotateFor และ Motor.rotateTo ข้างลูกศรสีเขียว
  • โปรดสังเกตว่ามีพารามิเตอร์ waitForCompletion Boolean รวมอยู่ในคำสั่งเหล่านั้น และถูกตั้งค่าเป็นเท็จ นั่นหมายถึงการตั้งค่าเริ่มต้นของการให้คำสั่งรอจนกว่าจะเสร็จสิ้น (เนื่องจากคำสั่งบล็อก) ถูกปิด (ตั้งค่าเป็นเท็จ) และขณะนี้คำสั่งเหล่านี้จะไม่ถูกบล็อก โปรแกรมจะเริ่มต้นและดำเนินการตามคำสั่งถัดไป

หมายเหตุ: อีกครั้ง คำสั่งของ Left Motor (rotateTo และ rotationFor) ถัดจากลูกศรสีเขียวด้านล่างถูกตั้งค่าเป็น non - การบล็อกโดยการตั้งค่าพารามิเตอร์ waitForCompletion เป็นเท็จ แต่คุณสามารถใช้ startRotateTo หรือ startRotateFor แทนสิ่งเหล่านั้นได้ คำสั่ง startRotate ทั้งสองคำสั่งไม่มีการบล็อก และให้โปรแกรมดำเนินการต่อไปยังคำสั่งถัดไปก่อนที่จะเสร็จสิ้น

หมายเหตุ: มีตัวอย่างอื่นๆ มากมายของการบล็อกและคำสั่งที่ไม่บล็อกใน VCS ตัวอย่างเหล่านี้ได้รับการคัดเลือกเพื่อความเรียบง่าย

หมายเหตุ: คำสั่งบางคำสั่งสามารถระบุได้ง่ายว่าเป็นการบล็อกหรือไม่บล็อกตามรหัส ตัวอย่างเช่น Motor.startRotateTo และ Motor.startRotateFor เป็นคำสั่งที่ไม่บล็อกโดยการออกแบบเนื่องจากการดำเนินการเริ่มต้นขึ้น แต่ไม่จำเป็นต้องเสร็จสิ้นก่อนที่โปรแกรมจะย้ายไปที่คำสั่งถัดไป

ขั้นตอนที่ 2: ใช้รหัสที่ไม่บล็อกเพื่อเริ่มต้นคำสั่งและดำเนินการต่อ

  • ดูคำสั่ง Motor.spin ที่ไม่ปิดกั้นสองคำสั่ง ถัดจากลูกศรสีเขียวด้านบน
  • ขอให้สังเกตว่าคำสั่ง LeftMotor.spin เริ่มต้นขึ้น จากนั้นโปรแกรมจะดำเนินการต่อในทันทีไปยังคำสั่ง RightMotor.spin นี่เป็นสิ่งสำคัญเพื่อให้มอเตอร์ทั้งสองหมุนพร้อมกัน

หมายเหตุ: หากกำลังบล็อกคำสั่งอยู่ อันดับแรก มอเตอร์ด้านซ้ายจะหมุนไปข้างหน้าจนเสร็จ จากนั้นมอเตอร์ขวาจะหมุนถอยหลังจนเสร็จ จากนั้นโปรแกรมก็จะดำเนินต่อไป

  • ดูคำสั่ง Motor.rotateFor และ Motor.rotateTo ข้างลูกศรสีเขียวด้านล่าง
  • โปรดสังเกตว่าพารามิเตอร์ waitForCompletion Boolean ที่รวมอยู่ในคำสั่งเหล่านั้นถูกตั้งค่าเป็นเท็จ และทำให้ทั้งคู่ไม่บล็อก

ขั้นตอนที่ 3: ใช้รหัสที่ไม่บล็อกและบล็อกร่วมกันเพื่อให้มีกระบวนการแบบขนาน

  • ดูอีกครั้งที่คำสั่ง Motor.rotateFor และ Motor.rotateTo ถัดจากลูกศรสีน้ำเงิน ลูกศรสีน้ำเงินใช้เพื่อระบุคำสั่งคู่ขนาน
  • โปรดสังเกตว่า เนื่องจากพารามิเตอร์ waitForCompletion ของคำสั่ง Left Motor ถูกตั้งค่าเป็นเท็จ มอเตอร์ด้านขวาจะเริ่มหมุนทันทีหลังจากมอเตอร์ด้านซ้าย นี่เป็นสิ่งสำคัญสำหรับการให้หุ่นยนต์เคลื่อนที่ไปข้างหน้าหรือข้างหลังเป็นเส้นตรง

หมายเหตุ: เหตุผลที่คำสั่งของ Left Motor ถูกกำหนดให้เป็น non-blocking เนื่องจากคำสั่งของมันมาก่อน Right Motor's คำสั่ง เพื่อให้คำสั่งมอเตอร์คู่หนึ่งทำงานพร้อมกัน คำสั่งแรกไม่ควรบล็อกและคำสั่งที่สองควรบล็อก 

ขั้นตอนที่ 4: ใช้รหัสบล็อกเพื่อดำเนินการคำสั่งจนเสร็จสิ้น

  • สังเกตว่าเพื่อให้โปรแกรมทำงานเสร็จก่อนดำเนินการต่อ คำสั่งของ Right Motor กำลังบล็อกอยู่

หมายเหตุ: เป็นเพียงคำสั่งบล็อกของ Right Motor เท่านั้นที่มีโปรแกรมรอจนกว่าคำสั่งนั้นจะเสร็จสมบูรณ์ก่อนดำเนินการต่อการบล็อกนั้นทำให้โปรแกรมเมอร์เห็นหุ่นยนต์หยุดก่อนที่จะดำเนินการคำสั่งถัดไป

ขั้นตอนที่ 5: ทำความเข้าใจว่าคำสั่ง non-blocking และ blocking ทำงานอย่างไรกับคำสั่งอื่นๆ

หมายเหตุ: คำสั่ง Motor.spin จะสตาร์ทมอเตอร์ด้านซ้ายและมอเตอร์ด้านขวาจะหมุนไปในทิศทางตรงกันข้ามงานสลีปช่วยให้มอเตอร์หมุนแบบนั้นเป็นเวลา 3 วินาทีก่อนที่ทั้งมอเตอร์ซ้ายและขวาจะหยุดโดยคำสั่ง Motor.stop จากนั้นมอเตอร์ด้านซ้ายและมอเตอร์ด้านขวาจะหมุนไปข้างหน้า 270 องศาแล้วเบรกก่อนจะเคลื่อนที่ต่อไปเนื่องจากคำสั่งของมอเตอร์ขวากำลังขวางอยู่ จากนั้นมอเตอร์ด้านซ้ายและมอเตอร์ด้านขวาจะหมุนย้อนกลับเป็น 270 องศาโดยสมบูรณ์แล้วเบรกก่อนสิ้นสุดโปรแกรมเนื่องจากคำสั่งของมอเตอร์ขวากำลังบล็อกอยู่

 

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