Skip to main content

บทที่ 2: การใช้วงในขณะที่

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

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

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

  • ระบุว่าคำสั่งที่ไม่ต้องรอจะทำให้โครงการดำเนินต่อไปแม้ว่า พฤติกรรมของคำสั่งจะยังไม่เสร็จสมบูรณ์ก็ตาม
  • ระบุว่าคำสั่งรอทำพฤติกรรมให้เสร็จสมบูรณ์ก่อนดำเนินการต่อผ่าน โครงการ
  • ระบุว่า while loop จะตรวจสอบเงื่อนไขบูลีนซ้ำๆและจะไม่ย้ายไปยังคำสั่งถัดไปจนกว่าเงื่อนไขจะรายงานเป็นจริง
  • ระบุว่าลูปขณะ ที่  ถูกใช้กับคำสั่งที่ไม่ต้องรอ (เช่น ไดรฟ์) เพื่อตรวจสอบสภาพเซ็นเซอร์
  • ระบุว่าคีย์เวิร์ด ไม่ใช่ นั้นจะกลับค่าของเงื่อนไขบูลีนจาก True เป็น False หรือ False เป็น True 
  • ระบุว่าคำสั่ง left_bumper.pressed และ right_bumper.pressed  ส่งคืนค่า True หรือ False ในลูป while 
  • อธิบายวิธีสร้างโครงการที่มี VR Robot ขับเคลื่อนไปข้างหน้าจนกว่าจะกด Bumper Sensor

ขณะลูป

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

กล่องเครื่องมือ VEXcode VR Python คำสั่ง while จะถูกเน้นด้วยสีแดงโดยมีลูกศรชี้ไปที่อินเทอร์เฟซการเข้ารหัส โค้ดจะอ่าน def main ():, while condition:, wait (5, msec) หลังจากที่คำสั่ง while ถูกลากจากกล่องเครื่องมือไปยังส่วนต่อประสานการเขียนโค้ด

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

ด้านซ้ายเป็นตัวอย่างโค้ดที่อ่านในขณะที่ดวงอาทิตย์กำลังส่องแสง: เล่นข้างนอก หลังจากข้อความในขณะที่มันอ่านเข้ามาข้างใน ด้านขวามีเด็กผู้หญิงขี่จักรยานออกไปนอกบ้านในวันที่อากาศดี ตามกฎเธอจะเล่นข้างนอกจนกว่าดวงอาทิตย์จะไม่ส่องแสงอีกต่อไปจากนั้นจะเข้าไปข้างใน

ในขณะที่วนลูปและปัญหากำแพงเขาวงกต

ตรรกะเดียวกันกับหุ่นยนต์ VR ในเขาวงกตติดผนัง ในขณะ ที่ไม่ได้กดเซ็นเซอร์กันชนหุ่นยนต์ VR ควรขับไปข้างหน้าต่อไป เมื่อกดแล้วควรหยุดหรือหมุน การใช้ ใน ขณะที่ วนลูปร่วมกับคำสั่งที่ไม่ต้องรอเช่น ไดรฟ์ เราสามารถตั้งรหัสให้หุ่นยนต์ VR ทำเช่นนั้นได้ อย่างไรก็ตาม คำสั่ง Bumper Sensor จะใช้เงื่อนไขที่ Bumper Sensor จะถูกกด (left_bumper.pressed หรือ right_bumper.pressed) ในการที่จะเขียนโค้ดให้หุ่นยนต์ VR ขับเคลื่อนในขณะที่ Bumper Sensor ไม่ได้ถูกกด  เราจำเป็นต้องใช้ตัวดำเนินการ not 

def main ():
	while not condition:
		wait (5, MSEC)

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

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

คำสั่งที่รออยู่

drivetrain.drive_for (FORWARD, 200, MM)
drivetrain.turn_for (RIGHT, 90, DEGREES)

คำสั่งที่ไม่ใช้การตรวจสอบ

drivetrain.drive (ไปข้างหน้า
) drivetrain.turn (ขวา)

คีย์เวิร์ดที่ไม่ใช่

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

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

ใน Wall Maze สิ่งนี้มีประโยชน์เพื่อให้เราสามารถเขียนโค้ดหุ่นยนต์ VR เพื่อที่ว่าใน ขณะที่ ไม่ได้ กดเซ็นเซอร์กันชนมันจะขับไปข้างหน้า เงื่อนไขยังคงเป็น 'หากกดเซ็นเซอร์กันชน' แต่ด้วยวิธีนี้เมื่อรายงาน False (ไม่ได้กด) การไหลของโครงการจะยังคงอยู่ในลูป เมื่อกดเซ็นเซอร์กันชนเงื่อนไขจะเป็น True ดังนั้นโครงการจะย้ายออกจากลูปแผนภาพการไหลของโครงการที่อธิบายการไหลของโครงการในขณะที่ไม่ใช่โครงสร้าง ทางด้านซ้ายโปรเจกต์ในคำจำกัดความหลักจะอ่านว่าในขณะที่ไม่ได้กดกันชนซ้ายโดยมีไดรฟ์ไปข้างหน้าและรอคำสั่ง 5 มิลลิวินาทีภายในลูป นอกลูปเป็นคำสั่งหยุด ทางด้านขวาของโปรเจกต์โฟลว์ที่แสดงด้วยลูกศรสีแดงเป็นวัฏจักรจะเขียนว่าในขณะที่ไม่ได้กดกันชนเงื่อนไขนั้นจะส่งกลับค่า FALSE และหุ่นยนต์จะขับเคลื่อนไปข้างหน้า ถัดไปลูกศรสีเขียวชี้ลงแสดงให้เห็นว่าเมื่อกดกันชนสภาพจะกลับมาเป็นจริงและโครงการจะหลุดออกจากห่วงทำให้หุ่นยนต์หยุดขับ

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

คีย์เวิร์ด ไม่ใช่ เป็นตัวดำเนินการเชิงตรรกะที่ จะกลับค่าของค่าบูลีน การใส่คีย์เวิร์ด ไม่ อยู่หน้าคำสั่งที่ส่งกลับค่าบูลีนจะกลับค่า  True เป็น False และ False เป็น True ตัวอย่างเช่น ลองนึกภาพว่าเซ็นเซอร์กันชนด้านซ้ายของหุ่นยนต์ VR ถูกกดและคำสั่ง left_bumper.pressed จะส่งกลับค่า True คีย์เวิร์ด ไม่ใช่ จะย้อนกลับค่าบูลีน และทำให้นิพจน์นี้ส่งคืนค่า False

ไม่ใช่ left_bumper.pressed ()

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

def main ():
	while not left_bumper.pressed (): 		drivetrain.drive
		(FORWARD)
		wait (5, MSEC
	) 	drivetrain.stop ()

การสร้างโปรเจ กต์ด้วย While Loop และ Bumper Sensor

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

  • เปิดโปรเจกต์ข้อความใหม่และเลือก Wall Maze Playground เมื่อได้รับแจ้ง กระเบื้องเลือก Wall Maze Playground อ่าน Wall Maze ที่ด้านล่างและแสดงเขาวงกตด้านบน
  • ตั้งชื่อ โครงการUnit4Lesson2แถบเครื่องมือ VEXcode VR ชื่อโปรเจกต์ที่อยู่ตรงกลางของแถบเครื่องมืออ่านหน่วยที่ 4 บทเรียนที่ 2 และเน้นด้วยกล่องสีแดง

     

  • ลากหรือพิมพ์คำสั่ง while ลงในพื้นที่ทำงานเพื่อแทนที่คำสั่ง Drivetrain ที่จะเติมโดยอัตโนมัติเป็นส่วนหนึ่งของโครงการ Text ใหม่ สังเกตว่ามีคำสั่ง a wait อยู่ภายในลูป ห้ามลบคำสั่ง รอ  จะทำให้ VR Robot ดำเนินการโครงการได้อย่างถูกต้อง โปรเจกต์ของคุณควรมีลักษณะดังนี้:

    def main ():
    	while condition:
    		wait (5, MSEC)
  • พิมพ์ตัวดำเนินการ ไม่ใช่ หลังเครื่องหมาย 'while' ในคำสั่ง while  ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:

    def main ():
    	while not condition:
    		wait (5, MSEC)
  • ลากหรือพิมพ์  คำสั่ง left_bumper.pressed ใน 'เงื่อนไข' ของ while loop คำสั่งภายในลูปจะดำเนินการในขณะที่เงื่อนไขไม่เป็นความจริงซึ่งหมายความว่าเมื่อ ไม่ได้ กดเซ็นเซอร์กันชนด้านซ้าย ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:

    def main ():
    	while not left_bumper.pressed ():
    		รอ (5, มิลลิวินาที)
  • ภายในลูป while ให้ลากหรือพิมพ์คำสั่ง drive ตรวจสอบให้แน่ใจว่าคำสั่ง drive และคำสั่ง wait มีการเยื้องย่อหน้าอย่างถูกต้องภายในลูป while เพื่อให้ลูป ทำงานได้ตามที่ตั้งใจไว้ คุณสามารถใช้เส้นนำทางเป็นตัวช่วยในการมองเห็นได้ตอนนี้โปรเจกต์ของ คุณควรมีลักษณะดังนี้:

    def main ():
    	while not left_bumper.pressed (): drivetrain.drive (
    		forward)
    		wait (5, MSEC)
  • ลากหรือพิมพ์คำสั่ง หยุด ด้านนอกของลู ในขณะที่  ตรวจสอบให้แน่ใจว่าคำสั่ง หยุด อยู่ในแนวเดียวกับลูป ในขณะที่ และไม่เยื้องเข้าไป เพื่อให้ ทำงานนอกลูปตามที่ต้องการ คุณสามารถใช้เส้นนำทางเป็นตัวช่วยในการมองเห็นได้ตอนนี้โปรเจกต์ของ  คุณควรมีลักษณะดังนี้:

    def main ():
    	while not left_bumper.pressed (): 		drivetrain.drive
    		(FORWARD)
    		wait (5, MSEC
    	) 	drivetrain.stop ()
  • เปิดหน้าต่างสนามเด็กเล่น หากยังไม่ได้เปิด ตรวจสอบให้แน่ใจว่าสนามเด็กเล่น Wall Maze เปิดอยู่ 
  • ดำเนินโครงการ
  • ดู VR Robot ขับรถจากจุดเริ่มต้นของ Wall Maze และหยุดเมื่อมีการกด Bumper Sensor ที่ผนัง
  • คำสั่ง Drive ช่วยให้หุ่นยนต์ VR สามารถขับไปข้างหน้าได้ในขณะที่ตรวจสอบสภาพของเซ็นเซอร์กันชนด้วย คำสั่ง Left Bumper Pressed เมื่อคำสั่ง left_bumper.pressed รายงานว่าเป็นจริง หุ่นยนต์ VR จะเคลื่อนที่ไปที่คำสั่งถัดไปนอกลูปและหยุดขับเคลื่อน

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