ก่อนหน้านี้ คุณได้เรียนรู้การใช้ค่าจากเซนเซอร์เพื่อควบคุมมอเตอร์แล้ว อีกทั้งคุณยังสามารถใช้เงื่อนไขจากเซนเซอร์
(Sensor Conditions) ร่วมกับคำสั่ง if เพื่อควบคุมลำดับการทำงานของโปรแกรมได้อีกด้วย โดยคำสั่ง
if เป็นหนึ่งในคำสั่งพื้นฐานที่สำคัญของการเขียนโปรแกรม
และเป็นวิธีที่ง่ายที่สุดในการควบคุมลำดับการทำงานของโปรแกรมตามเงื่อนไขที่กำหนด
การเขียนคำสั่ง if เริ่มต้นด้วยคำว่า if ตามด้วย Logical Expression และเครื่องหมาย (:) โดย
Logical Expression เป็นการตรวจสอบเงื่อนไขที่มีคำตอบเพียง 2 แบบ คือ "ใช่" หรือ "ไม่ใช่" เช่น
"สีที่ตรวจพบเป็นสีแดงหรือไม่" หรือ "ปุ่มถูกกดอยู่หรือไม่" หากเงื่อนไขเป็นจริง Logical Expression จะให้ค่า
True แต่หากเงื่อนไขไม่เป็นจริง จะให้ค่า False ซึ่งทั้งสองค่านี้เรียกว่า ค่าบูลีน (Boolean)
โดยในภาษา Python จะมีชนิดข้อมูลเป็น bool คำสั่งทั้งหมดที่อยู่ถัดจาก if
และมีระดับการเยื้องบรรทัดเท่ากัน จะถือเป็นส่วนหนึ่งของชุดคำสั่งที่ทำงาน เมื่อเงื่อนไขมีค่าเป็น True
ทดลองใช้งานโดยเชื่อมต่อ Color Sensor เข้ากับพอร์ต A จากนั้นรันโปรแกรมตัวอย่างด้านล่าง
from hub import port, sound
import color
import color_sensor
import runloop
async def main():
while True:
# Check if the red color is detected.
if color_sensor.color(port.A) == color.RED:
# If red is detected start a very long beep.
sound.beep(440, 1000000, 100)
# Pause the program while red is detected.
while color_sensor.color(port.A) == color.RED:
await runloop.sleep_ms(1)
# Stop the sound when red is no longer detected.
sound.stop()
runloop.run(main())
ลองนำชิ้นส่วนเลโก้สีแดงมาเคลื่อนผ่านด้านหน้า Color Sensor ในขณะที่โปรแกรมกำลังทำงาน คุณจะได้ยินเสียงบี๊บ
เมื่อเซนเซอร์ตรวจพบสีแดง และเสียงจะหยุดลง เมื่อเซนเซอร์ไม่พบสีแดง โปรแกรมตัวอย่างนี้ใช้คำสั่ง if
เพื่อตรวจสอบว่าสีที่เซนเซอร์ตรวจพบเป็นสีแดงหรือไม่ โดยใช้ตัว Equality Operator ==
ซึ่งเปรียบเทียบค่าที่อ่านได้จาก Color Sensor ทางด้านซ้าย กับค่าคงที่ color.RED ทางด้านขวา (หมายเหตุ
เครื่องหมาย == ประกอบด้วยเครื่องหมายเท่ากับ 2 ตัว ซึ่งแตกต่างจากเครื่องหมาย =
เพียงตัวเดียวที่ใช้สำหรับกำหนดค่าให้กับตัวแปร) หากค่าที่เซนเซอร์ตรวจพบตรงกับค่าคงที่ color.RED
เงื่อนไขจะมีค่าเป็น True และโปรแกรมจะทำงานตามชุดคำสั่งที่อยู่ภายใต้คำสั่ง if
การใช้ while True เพื่อวนซ้ำมีความสำคัญอย่างยิ่ง เนื่องจากหากไม่มีการวนซ้ำ
เซนเซอร์จะตรวจสอบสีเพียงชั่วขณะหนึ่ง ในช่วงเริ่มต้นของโปรแกรมเท่านั้น ก่อนหน้า คุณได้เรียนรู้การใช้
while ร่วมกับค่าคงที่ True เพื่อให้โปรแกรมทำงานซ้ำอย่างต่อเนื่องแล้ว
นอกจากนี้คุณยังสามารถใช้ while ร่วมกับ Logical Expression เพื่อกำหนดให้ชุดคำสั่งทำงานวนซ้ำ
เฉพาะช่วงเวลาที่เงื่อนไขมีค่าเป็น True ได้อีกด้วย ในโปรแกรมตัวอย่างนี้ while
ที่อยู่ภายในจะใช้เงื่อนไขเดียวกับคำสั่ง if เพื่อให้เสียงบี๊บดังอย่างต่อเนื่อง ขณะที่เซนเซอร์ตรวจพบสีแดง
เมื่อเงื่อนไขไม่ใช่ True อีกต่อไป Hub จะออกจาก while
และทำงานตามคำสั่งบรรทัดถัดไปเพื่อหยุดเสียง
ภายในลูป while ดังกล่าว คุณจะสังเกตเห็นฟังก์ชัน sleep_ms() จากโมดูล runloop
ซึ่งใช้สำหรับหยุดพักการทำงานของโปรแกรม main() ชั่วคราวตามระยะเวลาที่กำหนดในหน่วยมิลลิวินาที
โดยเป็นการหยุดพักแบบ Non-blocking ที่ไม่ขัดขวางการทำงานของส่วนอื่นในโปรแกรม เนื่องจากฟังก์ชันนี้ใช้ร่วมกับคำสั่ง
await จึงช่วยให้งานอื่น ๆ สามารถทำงานต่อไปได้ในระหว่างที่โปรแกรมดังกล่าวหยุดพักชั่วคราว
ในตัวอย่างนี้กำหนดระยะเวลาหยุดพักไว้เพียง 1 มิลลิวินาที แม้จะเป็นช่วงเวลาที่สั้นมาก แต่ก็เพียงพอให้ Hub
สามารถจัดการการทำงานของหลายโปรแกรมได้พร้อม ๆ กัน ในทางกลับกัน ฟังก์ชัน sleep_ms() จากโมดูล
time ที่เคยใช้ในบทก่อนหน้านี้ จะหยุดการทำงานแบบ Blocking ซึ่งหมายถึง
การหยุดการทำงานของโปรแกรมทั้งหมดชั่วคราว ไม่ใช่เฉพาะชุดคำสั่งที่เรียกใช้ฟังก์ชันเท่านั้น
฿ 34,500