[ บทความ : Robot ] ตอนที่ 6 เรื่อง ... ศึกษา ET-ROBOT (โปรแกรมแบบเงื่อนไข) ต่อ

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

วงจร LED

แบบแรกเป็นแบบ source current หรือพอร์ตของ BASIC Stamp เป็นผู้ขับกระแสให้กับวงจร LED มีหน้าตาของวงจร ดังนี้ ครับ

แบบที่ 2 เป็นแบบ sink current ซึ่งจะออกแบบให้วงจร LED มีแหล่งขับกระแส (แหล่งจ่ายไฟ) แล้วกำหนดให้ พอร์ตของ BASIC เป็น Ground ด้วยวิธีนี้ จะทำให้ปลอดภัยกว่าวิธีแรก เพราะถ้าเราออกแบบให้ ตัวบอร์ดควบคุมเป็นผู้จ่ายประแส แล้วถ้าวงจรนั้นต้องการกระแสมากกว่าที่ Micro controller จะจ่ายให้ได้ ตัวชิพจะเสียหายได้ครับ ดังนั้น ผมจึงบอกว่าแบบนี้ปลอดภัยกว่าแบบแรก แต่ต้องระวังในเรื่องที่ว่า ถ้าเรากำหนดให้พอร์ตมีสถานะเป็น 1 หลอก LED ก็จะดับ และถ้ากำหนดเป็น 0 หลอด LED จึงจะติด วงจรแบบ sink current เป็นดังนี้ครับ

 

วงจร Switch แบบกดติดปล่อยดับ

วงจรเป็นดังนี้ครับ

จากวงจรนี้เราจะได้ว่า ถ้ามีการกด Switch สถานะของพอร์ตก็จะเป็น 1 แต่ถ้าไม่กดล่ะ … ฮาๆๆ มันก็จะบอกไม่ได้ว่าเป็นอะไรน่ะสิครับ ฉะนั้น เพื่อป้องกันปัญหา เราจะใช้วงจร เป็นดังต่อไปนี้ครับ

 เอาล่ะ คราวนี้วงจรจะกลับกันล่ะครับ นั่นคือ ถ้าเราไม่กด Switch สถานะของพอร์ตก็จะเป็น 1 แต่ถ้าเรากด Switch สถานะของพอร์ตก็จะเป็น 0

 

ตัวอย่างที่ 2  

จากวงจรทั้งสอง เราจะมาเขียนโปรแกรมตัวอย่างเรื่องของ IF กันต่อนะครับ … หวังว่าผู้อ่านคงจำเรื่องของรูปแบบคำสั่งกันได้นะครับ ตัวอย่างโปรแกรม เป็นดังนี้ครับ

'{$STAMP BS2p}

'{$PORT COM1}

SW      var     IN3

 

LOOP:

        MAINIO

        input   3       ' ¡Ó˹´ãËé P3 à»ç¹ input

 

        IF  SW=1 THEN TRUE

        GOTO LOOP

TRUE:

        AUXIO

        TOGGLE 0

        SLEEP 1

    GOTO LOOP

ตัวอย่างนี้จะสั้นกว่าตอนที่แล้วนะครับ แต่จะมีส่วนที่แตกต่างกันอยู่ ในเรื่องของการเลือกชนิดของ I/O ว่า จะเป็นการติดต่อกับ I/O พื้นฐาน หรือ I/O ที่เป็นพอร์ตขยายสำหรับ P40 คำสั่งดังกล่าวคือ MAINIO กับ AUXIO

ถ้าเราเรียกคำสั่ง MAINIO ก็จะมีความหมายว่า ในบรรทัดต่อจากนี้ไป การติดต่อกับ I/O จะใช้ P0 – P7 กับ P8-P15 แต่ถ้าเรียก AUXIO ก็จะมีความหมายว่าจะติดต่อกับ A0-A7 กับ A8-A15 ซึ่งเป็นพอร์ตเฉพาะของ BASIC Stamp P40 นอกจาก 2 คำสั่งนี้แล้ว ผมยังมีคำสั่งเพิ่มเติม คือ คำสั่ง TOGGLE และ INPUT

 

คำสั่ง TOGGLE 

        เป็นคำสั่งที่ใช้สำหรับทำให้แรงดันของพอร์ตนั้นตรงกันข้ามกับค่าเดิม เช่น ถ้า P3 เป็น 1 แล้วเราสั่ง TOGGLE มันก็จะกลับ1 มาเป็น 0 และถ้าเราเรียก TOGGLE อีกครั้งมันก็จะกลับค่าจาก 0 มาเป็น 1 ครับ … มาดูรูปแบบกันก่อนนะครับ  

                        รูปแบบของ TOGGLE

                            TOGGLE               หมายเลขพอร์ต

         เช่น

                        TOGGLE               0  

ก็มีความหมายว่า ให้กลับค่าของพอร์ต P0 หรือ A0 ซึ่งขึ้นอยู่กับว่า ก่อนหน้านี้เรียก MAINIO หรือ AUXIO เอาไว้ (ปกติ ถ้าไม่กำหนด จะถือว่าเป็น MAINIO)  

 

คำสั่ง INPUT 

        เป็นคำสั่งสำหรับอ่านค่าของพอร์ตที่กำหนด ซึ่งจะได้ค่าออกเป็น 0 หรือ 1 

                        รูปแบบของ INPUT  

                                                ชื่อตัวแปรเก็บสถานะของพอร์ต           VAR         INหมายเลขพอร์ต

               …

INPUT    หมายเลขพอร์ต

         เช่น

                SW1       VAR         IN3

                INPUT    3

ก็หมายความว่า เราอ่านสถานะของพอร์ต P3 หรือ A3 ว่าเป็น 1 หรือ 0 แล้วจะนำค่าที่กำหนดนี้ไปเก็บใน SW1  โดยที่ในบรรทัดแรกที่เขียนว่า

                SW1       VAR         IN3

มีความหมายว่า เรากำหนดให้ตัวแปร SW1 นั้น เป็น INPUT จากพอร์ต 3 ด้วยเหตุนี้ BASIC Stamp ก็จะมองว่า P3 นั้นเป็นขาสำหรับ INPUT เมื่อเราสั่งว่า INPUT  3 ตัว BASIC Stamp จะนำผลลัพธ์ที่ได้จากพอร์ต 3 นี้ไปเก็บในตัวแปร SW1

ดังนั้น ตัวอย่างโปรแกรมที่ 2 นี้ ก็จะเป็นการอ่านข้อมูลจาก P3 และถ้า P3 เป็น 1 จะกระโดดไปทำงานที่ LABEL ที่ชื่อว่า TRUE แต่ถ้าไม่ใช่ มันก็จะกระโดดกลับไปที่ LOOP ซึ่งจะเป็นการอ่านค่าจากพอร์ต 3 อีกครั้งหนึ่ง

แต่ถ้า SW1 เป็น 1 โปรแกรมของเราก็จะทำการ TOGGLE ค่าสถานะของพอร์ต A0 แล้วจะทำการหน่วงเวลาเอาไว้ ด้วย SLEEP ด้วยเหตุนี้ ทุกครั้งที่เรากด Switch (เราต้องต่อวงจร Switch เข้ากับพอร์ต P3) หลอด LED (เราต้องต่อวงจร LED เข้ากับพอร์ต A0) จะติด/ดับ สลับกันไปเรื่อยๆ

 

สรุป

ในตอนนี้ผู้อ่าน สามารถเขียนโปรแกรมแบบมีเงื่อนไข โดยสามารถรับข้อมูลจากพอร์ตกันได้แล้วนะครับ ในตอนหน้า ก็จะเป็น เรื่องสุดท้ายของชุดคำสั่ง/การเขียนโปรแกรมด้วย BASIC Stamp นั้นก็คือเรื่องของการวนรอบ … พอจบเรื่องการวนรอบ ก็จะเข้าสู่ตัวอย่างการเขียนโปรแกรม ควบคุมหุ่นยนต์ โดยจะเริ่มจากการขับเคลื่อน แล้วหลังจากนั้นเราจะตรวจสอบการชน เมื่อตรวจสอบการชนได้แล้ว ก็จะลองเขียนโปรแกรมให้หุ่นยนต์นั้นเดินตามเส้น และสุดท้ายเราจะมาทดลองเรื่องของ การเดินตามแสงไฟ ก็จะเป็นการจบบทความชุด BASIC Stamp / ET-ROBOT … สัปดาห์นี้เท่านี้ก่อนครับ … ขอให้สนุกกับการเขียนโปรแกรมครับ

 

 

 


เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง :  ๑๑ ธ.ค. ๒๕๔๖