Skip to main content

บทที่ 2: การใช้บล็อก [รอจนกว่า]

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

มุมมองด้านข้างของ Wall Maze Playground ที่มีหุ่นยนต์ VR อยู่ด้านหน้ากำแพงโดยตรงแสดงให้เห็นว่ากำแพงมีสามมิติและหุ่นยนต์สามารถชนกับพวกมันได้

ผลการเรียนรู้

  • ระบุว่าบล็อกที่ไม่รอให้สแต็คดำเนินการต่อแม้ว่าพฤติกรรมของบล็อกจะยังไม่เสร็จสมบูรณ์ก็ตาม
  • ระบุว่าบล็อกรอหยุดสแต็กชั่วคราวจนกว่าพฤติกรรมของบล็อกนั้นจะเสร็จสมบูรณ์
  • ระบุว่าการเน้นการดำเนินการของโครงการจะแสดงภาพบล็อกการรอเทียบกับการไม่รอ
  • ระบุว่าบล็อก [รอจนกว่า] เป็นบล็อกควบคุมที่ยอมรับค่าบูลีน
  • ระบุว่าบล็อก [รอจนกว่า] จะตรวจสอบเงื่อนไขบูลีนซ้ำๆและจะไม่ย้ายไปยังบล็อกถัดไปจนกว่าเงื่อนไขจะรายงานเป็นจริง
  • ระบุว่าบล็อก [รอจนกว่า] ถูกใช้กับบล็อกที่ไม่มีการรอ (เช่นไดรฟ์) เพื่อตรวจสอบสภาพเซ็นเซอร์
  • ระบุว่า <Pressing bumper> บล็อกรายงานค่าจริงหรือเท็จในบล็อก [รอจนกว่า]
  • ระบุว่าบล็อก [Drive for] และ [Turn for] เป็นบล็อกพิเศษที่สามารถรอหรือไม่รอได้อย่างไร
  • อธิบายวิธีสร้างโปรเจกต์ที่มี VR Robot ขับไปข้างหน้าจนกว่าจะกด Bumper Sensor

ตั้งชื่อและบันทึกโครงการ

  • เริ่มโครงการใหม่ใน VEXcode VR และตั้งชื่อ โครงการUnit4Lesson2
กล่องชื่อโปรเจกต์ที่อยู่ตรงกลางของ VEXcode VR Toolbar ที่เน้นด้วยกล่องสีแดงทางด้านซ้ายของปุ่มเลือกสนามเด็กเล่น

[รอจนกว่า] บล็อก

บล็อก [รอจนกว่า] เป็นบล็อกควบคุมที่ยอมรับเงื่อนไขบูลีน [รอจนกว่า] บล็อกตรวจสอบเงื่อนไขบูลีนซ้ำๆและควบคุมการไหลของโครงการ โปรเจกต์จะไม่ย้ายไปยังบล็อกถัดไปในสแต็กจนกว่าเงื่อนไขในรายงานบล็อก [รอจนกว่า] จะเป็นจริง บล็อก [รอจนกว่า] จะถูกใช้ร่วมกับบล็อกที่ไม่ต้องรอเช่น [Drive] หรือ [Turn]

สำหรับข้อมูลของคุณ

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

บางช่วงตึกเช่น [Drive for] และ [Turn for] อาจเป็นช่วงตึกที่รอหรือไม่รอก็ได้ การเลือกลูกศรบนบล็อกจะเปลี่ยนบล็อกจากการรอเป็นบล็อกที่ไม่ต้องรอ

ไดรฟ์สำหรับบล็อกจะแสดงโดยมีลูกศรที่ด้านขวาของบล็อกปิดและเปิด ด้านบนไดรฟ์สำหรับบล็อกจะอ่านไดรฟ์ไปข้างหน้า 200 มม. ที่ด้านล่างบล็อกเดียวกันจะขยายออกเพื่ออ่าน Drive forward เป็น 200 มม. และอย่ารอช้า

การใช้สวิทช์บล็อก

บล็อกสวิตช์ที่ไม่รอจะเพิ่มพารามิเตอร์ "wait=False" ที่ส่วนท้ายของบล็อก "wait = False" เป็นคำสั่ง Python ที่บอกบล็อกไม่ให้รอและย้ายไปยังบล็อกถัดไปในกองซ้อน

บล็อกสวิตช์ที่เทียบเท่าจะแสดงพร้อมกับไดรฟ์สำหรับคำสั่งเป็นคำสั่งรอและไม่รอ ด้านบนคำสั่ง Python ในบล็อก Switch อ่าน Drivetrain DOT DRIVE_FOR (FORWARD, 200, MM).. ที่ด้านล่างคำสั่งเดียวกันจะถูกขยายเพื่ออ่าน DRIVETRAIN DOT DRIVE_FOR (FORWARD, 200, MM, Wait = FALSE)

  • ลากบล็อก [ไดรฟ์] ที่ไม่ต้องรอลงในพื้นที่ทำงาน

    โครงการ VEXcode VR ใหม่ที่มีบล็อกเริ่มต้นเมื่อใดพร้อมกับบล็อกไดรฟ์ที่แนบมาและตั้งค่าเป็นส่งต่อ
  • ติดบล็อค [รอจนกว่า] ใต้บล็อค [ไดรฟ์]

    โปรเจกต์เดียวกันที่มีการรอจนกว่าจะมีการเพิ่มบล็อกที่ด้านล่างของกองซ้อน พารามิเตอร์ของรอจนกว่าบล็อกจะว่างเปล่า
  • บล็อก [รอจนกว่า] ยอมรับเงื่อนไขบูลีน โปรเจกต์นี้จะใช้ Bumper Sensor เพื่อขับผ่าน Wall Maze Playground ลากบล็อก <Pressing bumper> บูลีนไปยังบล็อก [รอจนกว่า]

    โปรเจกต์เดียวกับที่มีการเพิ่มบล็อคกดกันชนลงในพารามิเตอร์ของ Wait until block ตอนนี้โปรเจกต์อ่านว่าเมื่อเริ่มต้นให้ขับไปข้างหน้ารอจนกว่ากันชนซ้ายจะกด
  • ลากในบล็อค [หยุดขับ] และเพิ่มลงในโปรเจกต์

    โปรเจกต์เดียวกันที่มีการเพิ่มบล็อคหยุดขับภายใต้การรอจนกว่าจะบล็อค ตอนนี้โปรเจกต์อ่านว่าเมื่อเริ่มต้นให้ขับไปข้างหน้ารอจนกระทั่งกันชนซ้ายกดแล้วหยุดขับ
  • เปิด Wall Maze Playground หากยังไม่ได้เปิดและดำเนินโครงการ
  • ดู VR Robot ขับรถจากจุดเริ่มต้นของ Wall Maze และหยุดเมื่อมีการกด Bumper Sensor ที่ผนัง
  • บล็อก [ไดรฟ์] ช่วยให้หุ่นยนต์ VR สามารถขับไปข้างหน้าได้ในขณะที่ตรวจสอบสภาพของเซ็นเซอร์กันชนด้วย <Pressing bumper> บล็อก เมื่อ <Pressing bumper> รายงานเป็นจริงหุ่นยนต์ VR จะย้ายไปยังบล็อกถัดไปในสแต็กและหยุดการขับขี่

    โปรเจกต์ VEXcode VR จากบทเรียนนี้แยกออกจากกันเพื่อแสดงขั้นตอนของโปรเจกต์ บล็อกเมื่อเริ่มต้นจะตามด้วยบล็อกไดรฟ์ไปข้างหน้า ลูกศรสีทองชี้ลงจากไดรฟ์ไปข้างหน้าบล็อกที่รอจนกว่ากันชนซ้ายกดบล็อก ทางด้านขวาของบล็อกมีลูกศรสีแดงโค้ง 2 ลูกแสดงการเคลื่อนไหวเป็นวงกลมและคำที่ "ไม่ได้กด (เท็จ)" แสดงสิ่งที่เกิดขึ้นเมื่อหุ่นยนต์ขับเคลื่อนไปข้างหน้าและไม่ได้กดสวิตช์กันชน ภายใต้การรอจนกว่าบล็อกลูกศรสีเขียวชี้ลงที่บล็อกหยุดการขับขี่โดยมีคำที่ "กด (จริง)" แสดงว่าโครงการจะย้ายไปที่บล็อกหยุดการขับขี่เมื่อกดสวิตช์กันชน

    สำหรับข้อมูลของคุณ

    หากต้องการดูภาพการรอคอยเมื่อเทียบกับบล็อกที่ไม่ต้องรอให้ดูฟังก์ชันไฮไลต์การดำเนินการรหัสใน VEXcode VR ในช่วงเริ่มต้นของโครงการนี้ไฮไลต์สีเขียวจะปรากฏขึ้นรอบๆบล็อก [รอจนกว่าจะเป็นไปตามเงื่อนไข นี่เป็นเพราะบล็อก [รอจนกว่า] เป็นบล็อกรอ ไฮไลต์สีเขียวจะปรากฏขึ้นเพื่อข้ามบล็อกที่ไม่ต้องรอเพราะคำสั่งเหล่านี้จะดำเนินการอย่างรวดเร็ว

    โครงการ VEXcode VR จากบทเรียนนี้ที่มีกล่องตัวอักษรสีแดงรอบๆบล็อก Wait until ซึ่งแสดงว่าเป็นบล็อกรอ

     

    การใช้สวิทช์บล็อก 

    นี่คือบล็อกสวิตช์ที่มีคำสั่ง [รอจนกว่า] ด้วย <Bumper pressed>  บูลีนรีพอร์เตอร์

    โครงการ VEXcode VR ดังกล่าวข้างต้นแต่ด้วยการรอจนกว่าบล็อกจะถูกแทนที่ด้วยบล็อกสวิตช์ คำสั่ง Python ในบล็อก Switch อ่านขณะที่ไม่ได้ left_bumper.pressed (): ในบรรทัดแรก จากนั้นเยื้องใต้บล็อก Python จะอ่านว่ารอ (5, มิลลิวินาที)

    while not left_bumper.pressed (): เป็นคำสั่ง Python ที่ตรวจสอบว่ากำลังกดกันชนด้านซ้าย อยู่หรือไม่

    wait (5, msec) เป็นคำสั่ง Python ที่ หยุดการดำเนินการตรวจสอบชั่วคราวเป็น เวลา 5 มิลลิวินาที (มิลลิวินาที) ดังนั้นโครงการจะตรวจสอบว่ามีการกดกันชนด้านซ้ายทุกๆ 5 มิลลิวินาทีหรือไม่ บรรทัดของรหัสนี้อยู่เยื้องใต้บรรทัดแรกของรหัสเนื่องจากคำสั่งนี้เป็นพฤติกรรมที่จะทำซ้ำจนกว่าจะตรงตามเงื่อนไข (ในกรณีนี้คือกันชนด้านซ้ายที่กด)

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

    เมื่อกดกันชนซ้ายแล้วหุ่นยนต์จะหยุดขับ

เลือกปุ่ม ถัดไป เพื่อดำเนินการกับบทเรียนส่วนที่เหลือนี้ต่อไป