Skip to main content

บทเรียนที่ 2: สร้างและทดสอบโครงการ

ดำเนินการสร้างโครงการอย่างต่อเนื่อง 

  • ตอนนี้ต้องกำหนดเงื่อนไขของคำสั่ง if else  หากต้องการใช้เซ็นเซอร์ระยะห่างเพื่อตรวจจับปราสาท สามารถใช้คำสั่ง found_object ได้ เพิ่มคำสั่ง found_object ลงในเงื่อนไข ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:

    def main ():
    	# เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่?
    	
    	if front_distance.found_object ():
    		# Crash castle detected by a Distance Sensor
    		pass
    		
    	else:
    		# Turn to find a castle using the Distance Sensor
    		pass
  • หากเซ็นเซอร์ระยะทางพบวัตถุหุ่นยนต์ VR ควรขับไปข้างหน้าเพื่อเคาะปราสาท เพิ่มคำสั่ง drive ลงในสาขา 'if' ของคำสั่ง if else และตั้งค่าพารามิเตอร์ เพื่อขับเคลื่อนหุ่นยนต์ VR ไปข้างหน้า (คำสั่งนี้ควรแทนที่ 'pass') 

    def main ():
    	# เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่?
    	
    	if front_distance.found_object ():
    		# Crash castle detected by a Distance Sensor
    		drivetrain.drive (FORWARD):
    		
    
    		# Turn to find a castle using the Distance Sensor
    		pass
  • เมื่อคำสั่ง found_object รายงานว่าเป็น False สาขา 'else' จะทำงาน ดังนั้น ยนต์ VR จะต้องหันไปหาปราสาทในสนามเด็กเล่น เพิ่มคำสั่ง turn ภายในสาขา 'else' และตั้งค่าพารามิเตอร์เพื่อหมุนหุ่นยนต์ VR ไปทางขวา 

    def main ():
    	# เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่?
    	
    	if front_distance.found_object ():
    		# Crash castle detected by a Distance Sensor
    		drivetrain.drive (FORWARD):
    		
    
    		# Turn to find a castle using the Distance Sensor
    		drivetrain.turn (RIGHT)

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

สาขา 'else' ของคำสั่ง if else ทำงานในโปรเจ็กต์โดยเป็นส่วนหนึ่งของคำสั่ง if else เท่านั้น แม้ว่าคุณจะมีคำสั่ง if แบบแยกกันได้ แต่ใน VEXcode VR Python ไม่มีคำสั่ง 'else' สาขา 'อื่นๆ' จะทำงานเมื่อไม่ตรงกับเงื่อนไขของสาขา 'ถ้า' หาก ไม่มีเงื่อนไขที่กำหนดไว้ (สาขา 'ถ้า ') สาขา' อื่น 'จะไม่มีวันทำงาน ตัวอย่างโค้ดสามตัวที่แสดงข้อความแบบมีเงื่อนไขใน Python โดยแต่ละข้อความจะมีข้อความ if ที่มีเงื่อนไขตามด้วยคีย์เวิร์ด pass ข้อมูลโค้ดสองอันแรกมีเครื่องหมายถูกสีเขียวอยู่ด้านบนซึ่งบ่งบอกถึงการใช้งานที่ถูกต้อง ข้อมูลโค้ดแรกประกอบด้วยข้อความแจ้งเตือนถ้ามีเท่านั้นในขณะที่ข้อความแจ้งเตือนที่สองประกอบด้วยข้อความแจ้งเตือนถ้ามีและข้อความแจ้งเตือนอื่นที่มีคีย์เวิร์ด PASS ในแต่ละข้อความ ข้อมูลโค้ดตัวที่สามที่มีเครื่องหมายกากบาทสีแดงประกอบด้วยข้อความอื่นที่มี PASS แสดงถึงการใช้งานที่ไม่ถูกต้องเท่านั้นเนื่องจากข้อความอื่นควรเป็นไปตามข้อความถ้ามี

เพิ่มลูปและทดสอบโปรเจกต์

  • ก่อนที่จะทำการทดสอบโปรเจกต์จะต้องเพิ่มคำสั่งอีกหนึ่งคำสั่ง หาก ข้อความอื่นจะตรวจสอบเงื่อนไขเพียงครั้งเดียวก่อนที่จะย้ายไปยังคำสั่งถัดไปนอกข้อความ ในหน่วยที่ 7 มีการเพิ่มวงจรอินฟินิตี้ ในขณะที่ ให้กับโครงการเพื่อสั่งให้หุ่นยนต์ VR ตรวจสอบสภาพของเซ็นเซอร์ Down Eye ซ้ำๆ เพื่อให้แน่ใจว่าสภาพเซ็นเซอร์ระยะห่างถูกตรวจสอบซ้ำๆ ให้ลากหรือพิมพ์คำสั่ง infinite while loop จากนั้นคัดลอกคำสั่ง if else ไว้ภายในคำสั่ง infinite while ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:
    • อย่าลืมระวังการเยื้องเวลาคัดลอกและวางคำสั่งลงในลูปเพื่อให้โปรเจกต์ทำงานตามที่ตั้งใจไว้เมื่อดำเนินการ 

      def main ():
      
      	ในขณะที่ True:
      		# เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่?
      	
      		if front_distance.found_object ():
      			# Crash castle detected by a Distance Sensor 			drivetrain.drive
      			(FORWARD):
      		
      
      			# Turn to find a castle using the Distance Sensor 			drivetrain.turn
      			(RIGHT)
      		
      		wait (5, MSEC)
  • เปิดหน้าต่างสนามเด็กเล่นหากยังไม่ได้เปิด ตรวจสอบให้แน่ใจว่า Dynamic Castle Crasher Playground เปิดและดำเนินโครงการ มุมมองด้านบนของสนามเด็กเล่น Crasher Castle แบบไดนามิกแสดงให้เห็นว่ามีเพียงบางส่วนของปราสาทที่ถูกกระแทก หุ่นยนต์ VR อยู่ที่ด้านบนขวาของสนามเด็กเล่นหลังจากการเคลื่อนไหวรอบสนามเด็กเล่น
  • เมื่อหุ่นยนต์ VR เคาะปราสาทอย่างน้อยสองแห่งแล้วให้โหลดสนามเด็กเล่นใหม่และเรียกใช้โครงการในรูปแบบอื่นของสนามเด็กเล่น Crasher Castle Crasher มุมมองด้านบนของ Dynamic Castle Crasher พร้อมอินเทอร์เฟซสนามเด็กเล่น ปุ่มรีเซ็ตที่ด้านล่างซ้ายของอินเทอร์เฟซสนามเด็กเล่นจะถูกเน้นด้วยกล่องสีแดง
  • ในการวิ่งแต่ละครั้งของโครงการหุ่นยนต์ VR จะหมุนจนกว่าจะมีการตรวจพบปราสาทโดยเซ็นเซอร์ระยะทางจากนั้นขับรถไปยังอาคารนั้นเพื่อล้มมันมุมมองมุมกว้างของสนามเด็กเล่น Dynamic Castle Crasher ที่แสดงให้เห็นหุ่นยนต์ VR ที่ผลักชิ้นส่วนของปราสาทเหนือเส้นขอบสีแดงและออกจากขอบสนามเด็กเล่น
  • ในระหว่างการดำเนินโครงการหุ่นยนต์ VR อาจดันชิ้นส่วนปราสาทไปจนถึงขอบและตกจากสนามเด็กเล่น เนื่องจากคำสั่ง found_object ยังคงรายงานว่ามีวัตถุอยู่ตรงหน้า VR Robot เมื่อคำสั่งนี้ รายงานว่าเป็นจริงหุ่นยนต์ VR จะขับเคลื่อนไปข้างหน้านำหุ่นยนต์ VR ให้ตกลงมาจากสนามเด็กเล่น

การไหลของโครงการที่มีคำสั่ง If Else

หากมีการ ใช้ คำสั่งอื่นเพื่อให้หุ่นยนต์ VR สามารถตัดสินใจได้ หากเงื่อนไขบูลีนเป็นจริงคำสั่งภายในสาขา 'ถ้า' จะทำงาน หากเงื่อนไขบูลีน เป็นเท็จคำสั่งภายใน สาขา 'อื่น' จะทำงาน

ตัวอย่างเช่น ในการวนซ้ำนี้ของ Dynamic Castle Crasher Playground เมื่อเริ่มโครงการ เซ็นเซอร์วัดระยะทางจะตรวจจับวัตถุ โดยเงื่อนไขของคำสั่ง found_object  จะรายงานว่าเป็นจริง ตอนนี้ สาขา 'if' ของโครงการจะทำงาน และหุ่นยนต์ VR จะขับเคลื่อนไปข้างหน้า หุ่นยนต์ VR จะข้าม สาขา 'else' ของโครงการด้านซ้ายเป็นข้อมูลโค้ดปัจจุบันของโปรเจกต์ ด้านขวาเป็นมุมมองด้านบนของสนามเด็กเล่น Dynamic Castle Crasher ที่มองเห็นอินเทอร์เฟซของสนามเด็กเล่น การวัดของเซ็นเซอร์ระยะทางบนอินเทอร์เฟซสนามเด็กเล่นมีขนาด 568 มม. และถูกเน้นด้วยกล่องสีแดง นี่แสดงให้เห็นว่าปราสาทตรงกลางสนามเด็กเล่นอยู่ห่างจากหุ่นยนต์ VR 568 มิลลิเมตร

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

อย่างไรก็ตาม ในรอบนี้ของ Dynamic Castle Crasher Playground เมื่อเริ่มโครงการ เซ็นเซอร์วัดระยะทางจะไม่ตรวจจับวัตถุ – เงื่อนไขของคำสั่ง found_object จะรายงานว่าเป็น False ตอนนี้ VR Robot จะข้ามสาขา 'if' ของโปรเจ็กต์ และสาขา 'else' ของโปรเจ็กต์จะทำงาน ดังนั้น VR Robot จะเลี้ยวขวาด้านซ้ายเป็นข้อมูลโค้ดปัจจุบันของโปรเจกต์ ด้านขวาเป็นมุมมองด้านบนของสนามเด็กเล่น Dynamic Castle Crasher ที่มองเห็นอินเทอร์เฟซของสนามเด็กเล่น การวัดของเซ็นเซอร์ระยะทางบนอินเทอร์เฟซสนามเด็กเล่นอ่านได้ 1354 มม. และเน้นด้วยกล่องสีแดง นี่แสดงให้เห็นว่าปราสาทที่ด้านบนสุดของสนามเด็กเล่นอยู่ห่างจากหุ่นยนต์ VR 1354 มิลลิเมตร

  • สังเกตว่าค่าเซ็นเซอร์ระยะทางในแดชบอร์ดมีการรายงานเป็น  > 3000 มม. เซ็นเซอร์ระยะทางสามารถตรวจจับวัตถุภายในช่วง 3000 มิลลิเมตร (มม.) ดังนั้นเมื่อตรวจไม่พบวัตถุค่าจะถูกรายงานว่ามากกว่า>() 3000 มม. 

เนื่องจากคำสั่ง if else  อยู่ในลูปอินฟินิตี้ while โปรเจ็กต์จึงวนกลับไปที่จุดสูงสุดของลู อินฟินิตี้ while เพื่อตรวจสอบเงื่อนไขของคำสั่ง if else ซ้ำๆ กัน ลูปนี้จะดำเนินต่อไปตลอดไปโดยสั่งให้หุ่นยนต์ VR ตรวจสอบอย่างต่อเนื่อง หากมี เงื่อนไขอื่นๆหลายร้อยครั้งต่อวินาทีThis is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • โปรดทราบว่าคำสั่ง ได รฟ์และ หมุนภายใน คำสั่ง if else เป็น คำสั่งที่ไม่ต้องรอ คำสั่งที่ไม่รอจะไม่หยุดการไหลของโครงการในขณะที่กำลังทำงาน  พฤติกรรมที่ไม่รอที่ถูกดำเนินการในคำสั่ง if else (เช่น 'ขับไปข้างหน้าถ้าตรวจพบวัตถุ') จะดำเนินต่อไปในขณะที่มีการตรวจสอบเงื่อนไข และจะเปลี่ยนแปลงเฉพาะเมื่อเงื่อนไขเปลี่ยนแปลงเท่านั้น

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

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

รหัสโปรเจกต์ Python ที่มีลูกศรชี้ไปที่ข้อความ if และ else ด้านบนของลูกศรอ่านตรวจสอบเงื่อนไขของเซ็นเซอร์ระยะทางเพื่อแสดง distance.found_object หากข้อความตรวจสอบเงื่อนไข หากตรวจพบอ็อบเจกต์คำสั่งภายใต้คำสั่ง if จะถูกดำเนินการแต่หากไม่มีการตรวจพบอ็อบเจกต์คำสั่งภายใต้คำสั่งอื่นจะถูกดำเนินการ

เปรียบเทียบโครงการปัจจุบันกับโครงการที่สร้างขึ้นในหน่วยที่ 7  โครงการหน่วยที่ 7 ใช้สี่ ถ้า ข้อความ

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

เมื่อเรียกใช้โปรเจกต์ที่ มี ข้อความหลายรายการอาจเป็นไปได้ว่าหลายเงื่อนไขจะรายงาน True (หรือ False) เมื่อโปรเจกต์ทำงานผ่านคำสั่งในอนันต์ใน ขณะที่ วนซ้ำ ความขัดแย้งเช่นนี้อาจทำให้โครงการหยุดทำงานหรือทำงานช้าลง 

กล่าวอีกนัยหนึ่งคือ หลาย ข้อความในโครงการเปรียบเสมือนการเดินทางไปตามถนนที่มีทางลาดออกหลายทาง ขึ้นอยู่กับว่าคุณกำลังพยายามไปที่ไหนคุณจะเลี้ยวไปตามสถานที่ต่างๆ ตัวอย่างเช่น ถ้า คุณกำลังจะไปโรงเรียนคุณจะเลี้ยวซ้าย ถ้า คุณกำลังจะไปที่ร้านคุณจะเลี้ยวขวา แต่ถ้าคุณไม่ได้ไปโรงเรียนหรือร้านค้าล่ะ? เงื่อนไขทั้งสองจะรายงานเท็จและคุณจะอยู่บนเส้นทางที่ตรงไปตรงมา หรือถ้าคุณจะไปทั้งโรงเรียนและร้านค้าล่ะ? เงื่อนไขทั้งสองจะรายงาน True แต่คุณไม่สามารถเลี้ยวสองที่ในเวลาเดียวกันได้ แผนภาพแสดงจุดตัดรูปตัว T สีเทาที่มีลูกศรสามทิศทาง - หนึ่งชี้ซ้ายหนึ่งชี้ตรงขึ้นและหนึ่งชี้ขวา ตรงกลางสี่แยกมีหุ่นยนต์ VR ทางด้านขวาของแผนภาพมีข้อความแบบมีเงื่อนไขสองข้อความในรูปแบบรหัส: ถ้าไปโรงเรียน: เลี้ยวซ้ายและถ้าไปร้านค้า: เลี้ยวขวา ข้อความ if เขียนด้วยข้อความสีดำและสีน้ำเงินโดยมี if เป็นสีน้ำเงินและคำแนะนำทิศทางเป็นสีน้ำเงิน

 

ในการเปรียบเทียบต่อไป  ข้อความอื่นๆก็เหมือนกับการเดินทางไปยังทางแยกบนถนน – มันบังคับให้คุณตัดสินใจ ถ้า คุณกำลังจะไปโรงเรียน ให้เลี้ยวซ้าย ถ้า, ให้เลี้ยวขวา ไม่ว่าคุณจะไปที่ไหน คุณต้องเลี้ยวซ้ายหรือขวา การใช้คำสั่ง if else จะช่วยหลีกเลี่ยงจุดบกพร่องเช่นเดียวกับข้างต้น เนื่องจากจะบังคับให้คุณตัดสินใจ เนื่องจากมีเงื่อนไขเดียวเท่านั้นที่สามารถเป็นจริงได้ ในช่วงเวลาที่กำหนดA diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.  

คำถาม

โปรดเลือกลิงก์ด้านล่างเพื่อเข้าถึงแบบทดสอบบทเรียน

Google Doc /.docx /.pdf