[ บทความ : Robot ] ตอนที่ 5 เรื่อง ... ศึกษา ET-ROBOT (โปรแกรมแบบเงื่อนไข) |
เอาล่ะ ตอนนี้บทความก็เข้าสู่ตอนที่ 5 กันแล้วครับ ในบทความนี้เราจะได้เรียนรู้ถึงการเขียนโปรแกรมแบบเงื่อนไข รวมทั้งรายละเอียดปลีกย่อยที่เกี่ยวข้องกัน ก่อนอื่นมาทำความรู้จักกับคำว่า Sequence programming กันดีกว่าครับ
Sequence
programming หรือ
อีกชื่อหนึ่งแบบไทยๆ ก็คือ
การเขียนโปรแกรมแบบลำดับ
คุ้นไหมครับ
จากโปรแกรมก่อนหน้านี้
จะพบว่า โปรแกรมของเรานั้น
จะทำงานจากคำสั่งแรก
เมื่อทำสั่งแรกที่เราเขียน (สั่งการ)
ไปนั้น ทำงานเสร็จ ตัว BASIC
Stamp ก็จะทำคำสั่งถัดไป
และจะทำต่อไปเรื่อยๆ
จนกว่าเราจะสั่งให้หยุดการทำงาน
หรือ ทำงานเรื่อยๆ
เนื่องจากมีการวนรอบไม่รู้จบ
(เรื่องของการวนรอบนั้น
ผมขอกล่าวในบทความตอนหน้านะครับ)
เอาล่ะ นี่ก็แสดงว่า ที่เราเขียนไปก่อนหน้านี้ล้วนแต่เป็นแบบลำดับทั้งสิ้น แต่ชีวิตจริงหาเป็นเช่นนั้นไม่ ! มาดูตัวอย่างกันนะ จากบทความตอนที่แล้ว เราสามารถหาค่าของ พื้นที่สี่เหลี่ยม .. ถ้าเราต้องการเปรียบเทียบระหว่างสี่เหลี่ยมสองรูปล่ะ เราจะเขียนโปรแกรมอย่างไร ติ๊กๆต่อกๆ นึกออกไหมครับ คราวนี้รู้สึกไหมว่า มันมีเรื่องของเงื่อนไข มาเกี่ยวข้อง เอ เกี่ยวตรงไหนน่ะเหรอครับ ก็ไอ้ตรงที่เขาบอกว่า เปรียบเทียบระหว่างสี่เหลี่ยมสองรูปไงครับ นั่นล่ะเป็นเงื่อนไข
Condition
เงื่อนไข
หรือ condition เป็นส่วนที่ใช้สำหรับเปรียบเทียบการทำงาน
และจะสนใจผลของการเปรียบเทียบเพียง
ใช่ และ ไม่ใช่ เท่านั้น
และตรงนี้เอง
เรานิยมแทนใช่ด้วย 1 และ
ไม่ใช่ด้วย 0 คำสั่งของ
BASIC Stamp ที่ใช้ในการตรวจสอบเงื่อนไข
คือ คำสั่ง IF
รูปแบบของคำสั่ง IF IF เงื่อนไข THEN ตำแหน่งที่จะไปทำถ้าเงื่อนไขเป็นจริง |
โดย เงื่อนไข จะเป็นคำสั่งที่เกิดจากการเปรียบเทียบ เช่น A < B มีความหมายว่า ถ้า A < B จะมองว่าเงื่อนไขนี้เป็นจริง แต่ถ้า A ไม่น้อยกว่า B แสดงว่าเงื่อนไขเป็นเท็จ และถ้าเงื่อนไขเป็นจริง BASIC Stamp ก็จะไปทำงาน ณ ตำแหน่งที่กำหนดเอาไว้หลัง THEN ส่วนกรณีที่เป็นเท็จนั้น จะไม่ทำ ณ ตำแหน่งหลัง THEN แต่จะดูคำสั่งที่อยู่ในบรรทัดถัดไป
งงไหมครับว่าหัวข้อนี้เกี่ยวกับอะไร ฮาๆ มันก็คือ สิ่งที่เรียกกันว่า LABEL ไงล่ะ อืม ๆๆ แล้ว LABEL คืออะไรล่ะ ??? (ฮาๆๆ ) คืออย่างนี้ครับ LABEL ก็เป็นเพียงชื่อเรียก ตัวอย่างเช่น
'{$STAMP
BS2p}
J VAR
WORD
I VAR
WORD
START:
I = 3
J = 1
STOP:
END
จากโปรแกรมด้านบน
เราเรียก START: กับ
STOP: ว่าเป็น
LABEL ซึ่งเวลาที่ BASIC
Stamp ทำงาน มันจะมองว่า
ตำแหน่งที่เรียกว่า START นั้น
ก็คือตำแหน่งของคำสั่ง I = 3 และตำแหน่งที่
STOP ก็จะตรงกับคำสั่ง STOP
ถ้าผมบอกว่าให้ไปทำงานที่ตำแหน่ง
STOP ตัว BASIC Stamp ก็จะทำคำสั่ง
END
เอาล่ะ มาลองดูโปรแกรมต่อไปนี้นะครับ
'{$STAMP BS2p}
J VAR
WORD
I VAR
WORD
START:
I = 3
J = 1
IF I < J THEN START
STOP:
END
โปรแกรมนี้จะมีส่วนที่สำคัญ คือ IF I < J THEN START ซึ่งหมายว่า ถ้าค่าของ I นั้นน้อยกว่า J มันจะไปทำงาน ณ ตำแหน่งที่เรียกว่า START ด้วยเหตุนี้ โปรแกรมนี้จริงเกิดเหตุการณ์ที่เรียกว่า ไม่รู้จบ มองออกไหมครับว่าทำไมมันไม่รู้จบ ก็ดูตรงที่กำหนดค่าสิครับ ผมให้ I เป็น 3 และ J เป็น 1 ดังนั้น ถ้าตรวจสอบเงื่อนไข I < J จึงได้ค่าเป็น จริง ใช่ไหมครับ ! เมื่อเป็นจริงมันก็ ไปทำงานที่ตำแหน่งที่เรียกว่า START ซึ่งก็เป็นการเริ่มกำหนดให้ I เป็น 3 และ J เป็น 1 หลังจากนั้นก็ตรวจสอบอีกว่า I < J อยู่หรือไม่ ซึ่งมันก็จะเป็นจริงไปเรื่อยๆ นี่ล่ะที่เรียกว่าไม่รู้จบ
ก่อนที่จะศึกษาถึงตัวอย่างถัดไป เรามาสรุปเรื่องรูปแบบของ LABEL กันก่อนครับ
รูปแบบของ LABEL 1. ต้องเป็นชื่อภาษาอังกฤษ 2. ลงท้ายด้วย : |
ตัวอย่างที่
1
'{$STAMP
BS2p}
'{$PORT
COM1}
I
var WORD
J
var WORD
BEGIN:
RANDOM I
J = 2
DEBUG dec ? I
IF J <> I THEN TRUE
GOTO FALSE
TRUE:
AUXIO
LOW 0
GOTO EXIT
FALSE:
AUXIO
HIGH 0
SLEEP 1
LOW 0
SLEEP 1
HIGH 0
SLEEP 1
LOW 0
SLEEP 1
EXIT:
END
ยาวนิดนึง แต่ถ้าเข้าใจล่ะก็ นับว่าประสบความสำเร็จเรื่องโปรแกรมแบบเงื่อนไขแล้วล่ะครับ มาเริ่มกันเลยเนอะ โปรแกรมนี้เริ่มต้นด้วยคำสั่งว่า
RANDOM
I
คำสั่ง
RANDOM นั้นเป็นคำสั่งที่ใช้สำหรับสุ่มค่า
เนื่องจากมันตามด้วย I มันจึงนำค่าที่สุ่มได้นั้นไปเก็บในตัวแปร
I ด้วยเหตุนี้
ตอนนี้ตัวแปร I ของเราจึงมีค่าเป็นตัวเลขที่เราบอกไม่ว่ามันคืออะไร
(ก็มันสุ่มขึ้นมานี่นา)
|
หลังจากสุ่มค่า I ผมก็หนดให้ J เป็น 2 แล้วแสดงค่าของ I ออกมาที่จอ DEBUG หลังจากนั้นตรวจสอบเงื่อนไข ซึ่งผมได้เขียนเอาไว้ว่า
IF
J <> I THEN TRUE
ความหมายของบรรทัดเงื่อนไขก็คือ
ถ้า J นั้นไม่เท่ากับ I
มันก็จะไปทำงานที่ตำแหน่งที่เรียกชื่อว่า
TRUE ซึ่งส่วนของ TRUE นั้นผมเขียนเอาไว้ว่า
TRUE:
AUXIO
LOW 0
GOTO EXIT
เอาล่ะ แล้วมันเกิดอะไรขึ้นเนี่ย ? มาดูทีละคำสั่งนะครับ
AUXIO | มีความหมายว่า จะทำการติดต่อกับ IO ที่เพิ่มเติมจาก BASIC Stamp ทั่วไป (หมายว่า ถ้าผู้อ่านไม่มี P40 ก็ต้องตัดบรรทัดนี้ออก) |
LOW 0 | มีความหมายว่า กำหนดให้ขา ที่ 0 ของพอร์ตเพิ่มเติมมีค่าเป็น LOW หรือ 0 |
GOTO EXIT | เป็นการบอกว่า ให้ข้ามไปทำ ณ ตำแหน่งที่เรียกว่า EXIT |
หมายเหตุ ผมต่อวงจร LED เข้ากับขา 0
ส่วนกรณีที่เป็นเท็จ มันก็จะไม่ทำงาน ที่ตำแหน่งที่เรียกว่า TRUE แต่จะทำบรรทัดถัดไป นั่นคือ ที่เขียนเอาไว้ว่า
GOTO FALSE
ดังนั้น มันจึงไปทำงานที่ตำแหน่งที่เรียกว่า FALSE ซึ่งผมเขียนโปรแกรมเอาไว้ดังนี้ครับ
FALSE:
AUXIO
HIGH 0
SLEEP 1
LOW 0
SLEEP 1
HIGH 0
SLEEP 1
LOW 0
SLEEP 1
มาดูตำสั่งที่ยังไม่รู้จักกันดีกว่าครับ
HIGH
0
มีความหมายว่า
ส่งค่าสูง (HIGH) ไปที่ขา 0
SLEEP 1 เป็นการหน่วงเวลา โดยหน่วงเวลา 1 วินาที
สรุปได้ว่า ถ้าเงื่อนไขเป็นเท็จมันจะเกิดไปกระพริบที่พอร์ต 0 เพราะผมกำหนดให้ส่งไฟที่วงจร LED หลอดมันเลยติด หลังจากนั้นรอนิดหนึ่งแล้วเปลี่ยนสัญญาณเป็นต่ำ คราวนี้หลอด LED ก็ดับ แล้วรออีกนิดนึง ก็ให้มันติดแล้วก็ค่อยดับอีกรอบหนึ่ง
เอาล่ะจบตัวอย่างโปรแกรมแล้วล่ะครับ
พอมองออไหมครับ
ว่าการเขียนโปรแกรมแบบเงื่อนไขนั้นเป็นอย่างไร
ตอนแรกผมว่าจะต่ออีก
1 ตัวอย่าง แต่พอดี
บทความค่อนข้างยาว
ผมขอตัดจบเอาไว้เท่านี้ก่อนนะครับแล้วคราวหน้าผมจะมาต่อเรื่องเงื่อนไขกับตัวอย่างโปรแกรมที่
2 ให้จบ
คราวหน้าก็จะมีวงจร
2 วงจรที่เกี่ยวข้องกับตัวอย่างครับ
คือ วงจร LED และ วงจร Switch
ตอนนี้ขอจบเอาไว้เท่านี้ก่อนนะครับ
สวัสดีครับ