ipstSE_book

Page 1

    

1

   IPST-MicroBOX Secondary Education (SE) Starter manual


2     

IPST-MicoBOX (SE) Starter Manual

คูมือเริ่มตนใชงานกลองสมองกล IPST-MicroBOX (SE) ISBN 974 - 92023 - 0 -9

สงวนลิขสิทธิ์ตาม พ.ร.บ. ลิขสิทธิ์ พ.ศ. 2521 หามการลอกเลียนไมวาสวนหนึงส ่ วนใดของหนังสือเลมนี้ นอกจากจะไดรับอนุญาต ใครควรใชหนังสือเลมนี้ 1. นักเรียน นิสิต นักศึกษา และบุคคลทัวไปที ่ มี่ ความสนใจในการนําไมโครคอนโทรลเลอรไปประยุกตใชในการทดลอง ทางวิทยาศาสตร หรือสนใจในการเรียนรูและทดลองวิยาศาสตรในแนวทางใหมทีใช ่ กิจกรรมเปนสือ่ โดยมีไมโคร คอนโทรลเลอรเปนสวนประกอบ 2. สถาบันการศึกษา โรงเรียน วิทยาลัย มหาวิทยาลัย ทีมี่ การเปดการเรียนการสอนวิชาอิเล็กทรอนิกสหรือภาควิชา วิศวกรรมอิเล็กทรอนิกสและคอมพิวเตอร 3. คณาจารยทีมี่ ความตองการศึกษา และเตรียมการเรียนการสอนวิชาไมโครคอนโทรลเลอร รวมถึงวิทยาศาสตร ประยุกตทีต่ องการบูรณาการความรูทางอิเล็กทรอนิกส-ไมโครคอนโทรลเลอร-การเขียนโปรแกรมคอมพิวเตอรการทดลองทางวิทยาศาสตร ในระดับมัธยมศึกษา อาชีวศึกษา และปริญญาตรี ดําเนินการจัดพิมพและจําหนายโดย บริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด 108 ซ.สุขุมวิท 101/2 ถ.สุขุมวิท แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท 0-2747-7001-4 โทรสาร 0-2747-7005 รายละเอียดทีปรากฏในคู ่ มื อเริมต ่ นใชงานกลองสมองกล IPST-MicroBOX (SE) ผานการตรวจทานอยางละเอียด และถวนถี่ เพือให ่ มีความสมบูรณและถูกตองมากทีสุ่ ดภายใตเงือนไขและเวลาที ่ ่พึงมีกอนการจัดพิมพเผยแพร ความเสียหายอันอาจเกิดจาก การนําขอมูลในหนังสือเลมนี้ไปใช ทางบริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด มิไดมีภาระในการรับผิดชอบแตประการใด ความผิดพลาดคลาดเคลือนที ่ อาจมี ่ และไดรับการจัดพิมพเผยแพรออก ไปนัน้ ทางบริษัทฯ จะพยายามชีแจงและแก ้ ไขในการจัดพิมพครั้งตอไป


    

3

  IPST-MicroBOX (SE) จากการเริมต ่ นพัฒนาชุดกลองสมองกล IPST-MicroBOX โดยสาขาคอมพิวเตอร สถาบันสงเสริมการสอน วิทยาศาสตรและเทคโนโลยีหรือ สสวท. ทีสามารถนํ ่ าไปบูรณาการกับวิชาอืนๆ ่ ได ไดรับการตอบรับและมีการนําไป ใชในการเรียนการสอนดานวิทยาศาสตรประยุกต ดานการเขียนและพัฒนาโปรแกรมภาษา C รวมถึงในวิชาโครงงาน เพือให ่ ผูเรี ยนสามารถนําองคความรูนี ไปใช ้ และตอยอดเพือสร ่ างโครงงานวิทยาศาสตรสมัยใหม IPST-MicroBOX เพือเป ่ นสือทางเลื ่ อกหนึงสํ ่ าหรับครูผูสอนในการจั  ดการเรียนการสอนวิชาการโปรแกรม วิชา โครงงาน ในระดับมัธยมศึกษา ชุดการเรียนการสอนนีจะเน ้ นการจัดกิจกรรมการเรียนรูแบบบู  รณาการ นักเรียนไดรู เกียวกั ่ บอุปกรณและอิเล็กทรอนิกสเบืองต ้ น การเขียนโปรแกรมเพือควบคุ ่ มไมโครคอนโทรลเลอร การทําโครงงานซึง่ ตองบูรณาการกับวิชา ฟสิกส เคมี ชีววิทยา คณิตศาสตร และคอมพิวเตอรเขาดวยกัน ซึงจะทํ ่ าใหการเรียนการสอน มีความนาสนใจ และเปนอีกแนวทางหนึงในการสอนเพื ่ อให ่ นักเรียนรักการเขียนโปรแกรม รูจั กคิดวิเคราะหและแก ปญหาทังในวิ ้ ชาทีเรี่ ยนและในชีวิตประจําวัน จนกระทังในป ่ พ.ศ. 2556 สสวท. ไดมีการจัดตังโครงการห ้ องเรียนวิทยาศาสตรในระดับมัธยมศึกษาตอน ตนขึน้ โดยมีชุดกลองสมองกล IPST-MicroBOX เปนสือการเรี ่ ยนรูหนึงที ่ ควรมี ่ ในหองเรียนวิทยาศาสตร เนืองจาก ่ IPST-MicroBOX เดิมออกแบบมาเพือใช ่ ในระดับมัธยมศึกษาตอนปลายเปนหลัก ดังนันเมื ้ อนํ ่ ามาใชในหองเรียนวิทยา ศาสตรในระดับมัธยมศึกษาตอนตน จึงตองมีการปรับปรุงใหม เพือให ่ เหมาะกับนักเรียนในระดับนี้ กอปรกับการ เปลี่ยนแปลงของเทคโนโลยีอุปกรณอิเล็กทรอนิกส คอมพิวเตอรสมัยใหมทีมี่ ระบบปฏิบัติการที่หลากหลายทั้ง วินโดวส, ลีนุกซ หรือกระทัง่ MAC OS พอรตเชือมต ่ อของคอมพิวเตอรทีเน ่ นไปยังพอรต USB สงผลใหการปรับปรุง IPST-MicroBOX ครั้งนี้ จึงตองเลือกฮารดแวรทีสามารถรองรั ่ บกับพอรต USB เลือกซอฟตแวรทีใช ่ ในการพัฒนา โปรแกรมทีรองรั ่ บกับความหลากหลายของระบบปฏิบัติการ และยังตองมีการพัฒนาชุดคําสังต ่ างๆ ทีทํ่ าใหนักเรียน ในระดับมัธยมตนสามารถเรียนรูและทํ  าความเขาใจได IPST-MicroBOX Secondary Education หรือ IPST-MicroBOX (SE) จึงเกิดขึน้ โดยในชุดจะมีอุปกรณที่ เพียงพอสําหรับการเรียนรูในเบื  องต ้ น ตอยอดไปทําโครงงานอยางงายและขันกลางได ้ ทังยั ้ งมีชินส ้ วนในทีนํ่ าไปสราง เปนหุนยนต  อัตโนมัติขนาดเล็กไดดวย ภายใตงบประมาณรวมทีถู่ กลง ทางดานซอฟตแวรเลือกใช ซอฟตแวร Wiring IDE (www.wiring.org.co) อันเปนซอฟตแวรสําหรับพัฒนาโปรแกรมดวยภาษา C/C++ ทีใช ่ งานไดกับระบบปฏิบัติ การวินโดวส, ลีนุกซ และ MAC OS ทังยั ้ งเปนซอฟตแวรแบบซอรสเปด ใชงานไดโดยไมมีคาใชจาย และไมจํากัด ระยะเวลาใชงาน รวมถึงมีการปรับปรุงอยางตอเนืองเพื ่ อให ่ ไดซอฟตแวรทีมี่ ประสิทธิภาพสูง ชุดกลองสมองกล IPST-MicroBOX Secondary Education หรือ IPST-MicroBOX (SE) เปนสือการเรี ่ ยนรูทาง เลือกสําหรับครู, อาจารย และนักเรียนทีมี่ ความประสงคในการตอยอดหรือประยุกตใชกลองสมองกลทีมี่ ไมโคร คอนโทรลเลอรเปนตัวควบคุมหลักในการเรียนรูและพั  ฒนาโครงงานดานวิทยาศาสตรและเทคโนโลยี การจัดหาสือการเรี ่ ยนรูนี เป ้ นไปในรูปแบบสมัครใจ การบริการเกียวกั ่ บการจัดหาและซอมแซมอุปกรณอยูภายใต  ความ รับผิดชอบของบริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด (www.inex.co.th หรือ www.ipst-microbox.com)


4     

  บทที่ 1 เริมต ่ นใชงานชุดกลองสมองกล IPST-MicroBOX (SE)...............................................................5 บทที่ 2 แนะนําชุดกลองสมองกล IPST-MicroBOX (SE)...................................................................19 บทที่ 3 รูจักกับ Wiring ซอฟตแวรพัฒนาโปรแกรมภาษา C/C++ สําหรับชุดกลองสมองกล IPST-MicroBOX (SE)...................................................................37 บทที่ 4 ทดสอบการควบคุมอุปกรณเบื้องตนของชุดกลองสมองกล IPST-MicroBOX (SE)...........................................................................................................51 บทที่ 5 ความรูเบื้องตนเกียวกั ่ บไฟลไลบรารีของชุดกลองสมองกล IPST-MicroBOX (SE)..........................................................................................................69 บทที่ 6 การแสดงผลดวยจอกราฟก LCD สีของชุดกลองสมองกล IPST-MicroBOX (SE).................95 บทที่ 7 ควบคุมการติดดับของ LED ดวยซอฟตแวร........................................................................117 บทที่ 8 การควบคุม LED หลายดวงของชุดกลองสมองกล IPST-MicroBOX (SE)............................125 บทที่ 9 ติดตอกับสวิตชเพืออ ่ านคาและนําไปใชงาน.......................................................................145 บทที่ 10 การอานคาสัญญาณอะนาลอกอยางงาย.........................................................................159


    

5

   การใชงานชุดกลองสมองกล IPST-MicroBOX Secondary Education (SE) มีขันตอนโดยสรุ ้ ป ดังแผนภาพในรูปที่ 1-1 ในบทนีจะอธิ ้ บายถึงขันตอนต ้ างๆ ในการเริมต ่ นใชงานชุดกลองสมองกล IPSTเปนลําดับไป ติดตั้งซอฟตแวร - Wiring 1.0 SE ซอฟตแวรเขียนโปรแกรมภาษา C/C++ - ไดรเวอร USB ของแผงวงจรหลัก IPST-SE ----------------------------------------------

ตรวจสอบชองเชื่อมตอคอมพิวเตอร ของแผงวงจร IPST-SE - เชื่อมตอแผงวงจรหลัก IPST-SE เขากับพอรต USB - เลือกเปด Control panel > System > Hardware > Device Manager > Ports ดูที่หัวขอ USB serial port (COMx) - จําตําแหนงของ USB serial port (COMx) โดย x เปนตัวเลข ใดๆ ปกติมีคามากกวา 3 เพื่อเลือกชองติดตอสื่อสารระหวาง คอมพิวเตอรกับแผงวงจรหลัก IPST-SE

เตรียมการสรางโปรแกรมควบคุม 1. เปดซอฟตแวร Wiring 1.0 SE สรางไฟลใหม 2. เลือกชนิดของแผงวงจร ที่เมนู Tools > Board > IPST-SE > ATmega644P@16MHz 3. เลือกชองตอคอมพิวเตอร ที่เมนู Tools > Serial port > COMx โดย x เปนเลขใดๆ ไดมาจากการตรวจสอบตําแหนงที่ Device manager

เขียนโปรแกรมภาษา C/C++ แลวบันทึกไฟล คอมไพล อัปโหลดโปรแกรม โปรแกรมทีแ่ ผงวงจร IPST-SE เริ่มทํางาน

รูปที่ 1-1 แผนภาพแสดงขั้ นตอนและกระบวนการเรี ยนรู เพื่อใชงานชุดกลองสมองกล IPSTMicroBOX(SE) เริ่ มจากด านซ าย ตั้ งแต การติ ดตั้ งโปรแกรม และการตรวจสอบการเชื่อมต อ ระหวางแผงวงจรควบคุมกับคอมพิวเตอร ไลมาทางขวา เริ่มจากขั้นตอนเตรียมการสรางโปรแกรม ควบคุม, เขียนโปรแกรม, คอมไพลหรือการแปลโปรแกรมภาษา C เปนภาษาเครื่อง, อัปโหลดหรือ สงโปรแกรมไปยังแผงวงจรหลัก IPST-SE จากนั้นจึงทําการรันโปรแกรมเพื่อตรวจสอบการทํางาน


6     

1.1 ติดตั้งโปรแกรมซอฟตแวรและไดรเวอร 1.1.1 ระบบปฏิบัติการที่รองรับ ซอฟตแวรสําหรับพัฒนาโปรแกรมในโครงการ Wiring นีคื้ อ Wiring Development Environment หรือบางครังเรี ้ ยกวา Wiring IDE ทํางานไดกับระบบปฏิบัติการหรือแพล็ตฟอรม (platform) ดังนี้ 

Mac OS X 10.4 (ทั้งรุนทีใช ่ ซีพีพียูเพาเวอรพีซีและอินเทล)

วินโดวส XP, วินโดวสวิสตา และ 7 (ไมสนับสนุนวินโดวส ME, 98SE และ 95)

Linux ทั้ง Fedora Core และ Debian (รวมถึง Ubuntu ดวย)

แพล็ตฟอรมอื่นๆ ที่สนับสนุนการทํางานของ Java 1.4 ขึนไป ้

1.1.2 ขั้นตอนการติดตังโปรแกรมและไดรเวอร ้ USB ทีใช ่ งานกับชุดกลองสมองกล IPST-MicroBOX(SE) (1) นําแผนซีดีรอมทีจั่ ดมาพรอมกับชุด IPST-MicroBOX(SE) ใสลงในซีดีรอมไดรฟ แลวเลือก คลิกที่ ไฟล Wiring1000_IPST_SE_130222.exe (ตัวเลขของไฟลติดตั้งอาจเปลียนแปลงได ่ ตามการ ปรับปรุงลาสุด) จะปรากฏหนาตางตอนรับสูการติดตั้งซอฟตแวร Wiring ดังรูป

(2) จากนั้นคลิกตอบตกลงในแตละขั้นตอนของการติดตั้งเหมือนกับการติดตังแอปพลิ ้ เคชั่น อืนๆ ่ ของวินโดวส จนเสร็จสิน้


    

7

(3) จากนันจะปรากฏหน ้ าตางติดตังไดรเวอร ้ USB สําหรับติดตอกับแผงวงจรควบคุม IPST-SE ใหคลิกปุม Install เพื่อเริ่มการติดตั้งไดรเวอร

(4) ทดสอบเปดโปรแกรมโดยเลือกที่เมนู Start > All Programs > Wiring > Wiring1.0 SE จากนั้นครูหนึงหน ่ าตางของซอฟตแวร Wiring IDE 1.0 จะปรากฏขึน้

จากนีซอฟต ้ แวร Wiring IDE 1.0 พรอมสําหรับการพัฒนาโปรแกรมแกชุดกลองสมอง กล IPST- MicroBOX(SE) แลว


8     

1.2 แผงวงจรหลัก IPST-SE ของชุดกลองสมอง IPST-MicroBOX(SE) อุปกรณหลักทีใช ่ ในการเรียนรูกลองสมองกลคือ ชุดกลองสมองกล IPST-MicroBOX(SE) ที่มี แผงวงจรหลักชือ่ IPST-SE มีหนาตาแสดงดังรูปที่ 1-2 พรอมคําอธิบายของสวนประกอบตางๆ แผงวงจร IPST-SE เปนแผงวงจรขนาดเล็กที่มีไมโครคอนโทรลเลอรเบอร ATmega644P เปนหัวใจหลักในการ ควบคุมการทํางาน โดยตัวควบคุมหลักหรือไมโครคอนโทรลเลอรจะไดรับการโปรแกรมผานทาง พอรต USB ดวยซอฟตแวร Wiring IDE 1.0 บนแผงวงจรควบคุมนี้มีจุดตอเพื่อรับสัญญาณจากตัวตรวจจับภายนอกทั้งแบบอะนาลอก และดิจิตอลเพื่อชวยใหแผงวงจรสามารถรับขอมูลจากสิ่งแวดลอม เชน แสง, อุณหภูมิ, ระยะหางจาก วัตถุของตัวตรวจจับ เปนตน นอกจากนั้นยังมีจุดตอเพื่อสงสัญญาณออกไปควบคุมอุปกรณภายนอก อาทิ ไดโอดเปลงแสง ลําโพง มอเตอรไฟตรง และเซอรโวมอเตอร ดานการแสดงผล แผงวงจร IPST-SE มีจอแสดงผลแบบกราฟก LCD สีขนาด 1.8 นิวในตั ้ ว มี ความละเอียด 128 x 160 จุด แสดงตัวอักษรไดสูงสุด 21 ตัวอักษร 16 บรรทัด แสดงภาพกราฟกสีได (ไมรองรับภาพถายที่มีความละเอียดสูง) และเลือกทิศทางในการแสดงผลได            USB  D   000000000000000000000   000000000000000000000  000000000000000000000  000000000000000000000 ON 000000000000000000000 000000000000000000000  000000000000000000000      000000000000000000000  000000000000000000000  000000000000000000000 G  000000000000000000000  6V 000000000000000000000              KNOB 12 000000000000000000000    G 000000000000000000000 OK 000000000000000000000 6V   000000000000000000000  13    SW1  6VG  14   UART1 G  1 2 6V 8 SCL 9 SDA

30 A6 27 A3 29 A5 26 A2

24 A0

17

19

+5

20

    

RESET

LOW

15

2 RxD1 3 TxD1

15 SV0 14 SV1 13 SV2 12 SV3

18

DC MOTOR

28 A4 25 A1

16

SERVO

      

รูปที่ 1-2 แสดงสวนประกอบและหนาทีของแผงวงจรหลั ่ ก IPST-SE ในชุดกลองสมองกล IPST-MicroBOX(SE)


    

9

1.3 ทดสอบการอัปโหลดโปรแกรม สําหรับการเขียนโปรแกรมลงไปบนแผงวงจร IPST-SE ครั้งแรก จะเรียกวา การอัปโหลด (upload) ปกติแลวจะใชคําวา “ดาวนโหลด” แตสําหรับการทํางานกับซอฟตแวร Wiring IDE1.0 จะ เรียกกระบวนการนี้วา อัปโหลด ขันตอนการอั ้ ปโหลดโปรแกรมครั้งแรก มี 2 ขันตอนหลั ้ กๆ คือ การตรวจสอบตําแหนงของ พอรตทีใช ่ ในการติดตอระหวางแผงวงจรหลัก IPST-SE กับซอฟตแวร Wiring IDE1.0 บนคอมพิวเตอร และขั้นตอนการตังค ้ าเพื่อใชในการอัปโหลดโปรแกรม

1.3.1 การตรวจสอบตําแหนงของพอรตอนุกรมเสมือน หรือ USB Serial port สําหรับแผงวงจร IPST-SE (1) เสียบสาย USB เชื่อมตอระหวางแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอร เปด สวิตชเพื่อจายไฟ รอจนกระทั่งไฟสีนําเงิ ้ นทีตํ่ าแหนง USB บนแผงวงจรควบคุมติดสวาง ดังรูปที่ 1-3

2

 3

  30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000

ON

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

 

USB

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0

4

KNOB

8 SCL 9 SDA

1

SERVO

รูปที่ 1-3 การเชือมต ่ อแผงวงจร IPST-SE กับคอมพิวเตอรเพื่อเตรียมใชงานกับซอฟตแวร Wiring IDE


10     

(2) คลิกที่ปุม Start แลวเลือกไปที่ Control Panel (3) จากนั้นดับเบิลคลิกเลือกที่ System (4) เลือกไปที่แท็ป Hardware แลวคลิกที่ Device Manager

(5) ตรวจสอบรายการฮารดแวรที่หัวขอ Port จะพบ USB Serial port ให ดูวามีการเลือก ตําแหนงของพอรต อนุกรม USB Serial port ไวที่ตําแหนงใด ปกติจะเปน COM3 ขึนไป ้ ใหใชคา ของตําแหนงของพอรตอนุกรมนีในการกํ ้ าหนดการเชือมต ่ อกับโปรแกรมตอไป ตามรูปตัวอยางจะเปน COM3


    

11

1.3.2 เชื่อมตอแผงวงจรหลัก IPST-SE กับซอฟตแวร Wiring IDE หลังจากทราบถึงตําแหนงของพอรตที่เชื่อมตอกับคอมพิวเตอรแลว ในลําดับตอไปเปนการ เชื่อมตอเขากับซอฟตแวร Wiring IDE (1) เปดโปรแกรม Wiring IDE รอสักครูหนึง่ หนาตางหลักของ Wiring IDE จะปรากฏขึน้ ในการเปดใชงาน Wiring IDE ในครั้งแรกอาจใชเวลาพอสมควร (ขึนอยู ้ กั บคอมพิวเตอรแตละเครือง) ่ (2) เลือกฮารดแวรที่ใช โดยเลือกเมนู Tools > Board > IPST-SE > ATmega644P @16MHz

(3) เลือกพอรตติดตอ โดยไปที่เมนู Tools > Serial Port เลือกตําแหนงของพอรตอนุกรมที่ใช ในการเชื่อมตอกับแผงวงจร IPST-SE ในที่นีคื้ อ COM3

ขันตอนนี ้ ควรทํ ้ าทุกครังที ้ ่เชื่อมตอแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอรใหม เพียงเทานีแผงวงจร ้ IPST-SE พรอมสําหรับการติดตอกับซอฟตแวร Wiring IDE 1.0 แลว


12     

1.3.3 ขั้นตอนการพัฒนาโปรแกรม (1) สรางไฟลใหมดวยการคลิกที่ปุม New บนแถบเครื่องมือหรือเลือกจากเมนู File > New

(2) พิมพโคดโปรแกรมตอไปนี้ #include <ipst.h> // ผนวกไฟลไลบรารีหลัก ipst.h void setup() { glcdClear(); // ลางการแสดงผล glcdMode(0); // เลือกทิศทางการแสดงผลโหมด 0 } void loop() { setTextSize(2); // เลือกขนาดตัวอักษร 2 เทา setTextColor(GLCD_YELLOW); // เลือกสีของตัวอักษรเปนสีเหลือง glcd(1,1,"Hello"); // กําหนดขอความที่บรรทัด 1 คอลัมน 1 setTextColor(GLCD_SKY); // เลือกสีของตัวอักษรเปนสีฟา glcd(3,1,"IPST"); // กําหนดขอความที่บรรทัด 3 คอลัมน 1 glcd(4,1,"MicroBOX"); // กําหนดขอความที่บรรทัด 4 คอลัมน 1 setTextSize(1); // เลือกขนาดตัวอักษรปกติ glcd(10,2,"Secondary Education"); // กําหนดขอความที่บรรทัด 10 คอลัมน 2 } โปรแกรมนีใช ้ ในการทดสอบการทํางานเบืองต ้ นของแผงวงจร IPST-SE โดยกําหนดใหแสดงขอความ ทีจอแสดงผลด ่ วยขนาดและสีของตัวอักษรทีต่ างกัน


    

13

(3) ไปที่เมนู File เลือกคําสั่ง Save As เพื่อบันทึกไฟลในชื่อ HelloIPST-SE ตอนนีจะมี ้ ไฟล HelloIPST-SE.pde เกิดขึ้นในโฟลเดอรชื่อวา HelloIPST-SE

(4) ตรวจสอบการเขียนโปรแกรมดวยการคลิกที่ปุม Run ที่แถบเครื่องมือหรือเลือกคําสั่งจาก เมนู Sketch > Compile/Verify

หากมีความผิดพลาดเกิดขึนจากการคอมไพล ้ จะปรากฏขอความแจงความผิดพลาดใน ชองแสดงสถานะและพื้นทีแสดงข ่ อความ ตองทําการแกไขโปรแกรม


14     

หากการคอมไพลถูกตอง ที่ชองแสดงสถานะจะแจงแสดงขอความ Done compiling

หลังจากการคอมไพลสําเร็จ ในโฟลเดอร HelloIPST-SE จะมีโฟลเดอรใหมเกิดขึ้นชือ่ วา Build ภายในโฟลเดอร Build จะบรรจุไฟลซอรสโปรแกรมภาษา C++ และไฟลประกอบ (5) ตอสาย USB เขากับแผงวงจร IPST-SE จากนั้นเปดสวิตชจายไฟเลียง ้ แลวรอใหการเชื่อม ตอกับคอมพิวเตอรเสร็จสมบูรณ (ดูจากไฟแสดงผลสีนําเงิ ้ นทีตํ่ าแหนง USB ติดสวาง) (6) คลิกที่ปุม Upload to Wiring Hardware บนแถบเครื่องมือ ถาทุกอยางเปนปกติ เมื่อ ทําการอัปโหลดเสร็จ จะมีขอความแจงที่ชองแสดงสถานะวา Done uploading. RESET to start the new program. และที่พื้นทีแสดงข ่ อความจะแจงกระบวนการและผลคอมไพล รวมถึงขนาดของไฟล ผลลัพธที่เกิดขึ้น

ถามีขอผิดพลาดเกิดขึนจะมี ้ ขอความแจงเตือนในพืนที ้ แสดงข ่ อความดานลาง ของหนา ตางโปรแกรมหลัก

ซึงส ่ วนใหญแลวมักเกิดจากการเลือกพอรตอนุกรมไมถูกตอง หรือไมไดเลือกใหบอรด ทํางานในโหมดโปรแกรม การแกไขใหดูในหัวขอ การแกปญหาในกรณีที่อัปโหลดโปรแกรมไมได


    

15

(7) หลังจากอัปโหลดโปรแกรมแลว แผงวงจรหลัก IPST-SE จะทํางานทันที ไดผลการทํางาน ตามรูป

        เพื่อใหเครื่องมือและอุปกรณอยูในสภาพที่พรอมทํางานตลอดเวลา สิ่ งที่ควรกระทําทุกครั้งที่ใชงาน ชุดกลองสมองกล IPST-MicroBOX(SE) คือ (1) ปดสวิตช POWER ทุกครั้งที่มีการถอดหรือตอสายเขากับคอมพิวเตอรและชุดโปรแกรม (2) ปดสวิตช POWER ทุกครังที ้ ่มีการตอหรือปลดสายของแผงวงจรตรวจจับสัญญาณหรืออุปกรณใดๆ เขากับแผงวงจรควบคุม IPST-SE (3) หลังจากทีทดลองเสร็ ่ จในแตละการทดลอง ควรปดสวิตชกอน ทีจะทํ ่ าการปลดสายสัญญาณเพือต ่ อ แผงวงจรใหมเขาไปเพื่อทําการทดลองในหัวขอใหม (4) ไมควรปลดหรือตอสายสัญญาณของแผงวงจรใดๆ เขาไปในแผงวงจร IPST-SE ในขณะกําลังทํางาน เวนแตมีขันตอนการปฏิ ้ บัติอืนใดที ่ ่ระบุเจาะจงวาตองสายสัญญาณในขณะทํางานของการทดลองนั้นๆ (5) หากมีความผิดพลาดใดๆ เกิดขึ้น ตองปดสวิตชจายไฟทันที (6) ไมใชอะแดปเตอรไฟตรงที่มีแรงดันขาออกเกิน +12V กับแผงวงจร IPST-SE (7) หลังจากเสร็จสิ้นการทดลอง ใหปลดสายเชื่อมตอคอมพิวเตอรและสายของอะแดปเตอรหรือแหลง จายไฟออกจากแผงวงจร IPST-SE เสมอ


16     

1.4 การแกปญหาในกรณีทีอั่ ปโหลดโปรแกรมไมได 1.4.1 กรณีทีคลิ ่ กปุม Upload แลว ไมมีการทํางานใดๆ ตอ หรือโปรแกรมคาง สาเหตุ : ซอฟตแวร Wiring ไมสามารถติดตอกับแผงวงจรหลัก IPST-SE ได ทางแกไข : (1) ตรวจสอบการตอสาย miniB-USB (2) ตรวจสอบการเลือกพอรตหรือชองเชื่อมตอวา ถูกตองหรือไม (3) เกิดความผิดปกติขึนในระบบคอมพิ ้ วเตอร จึงตองหยุดการทํางานของซอฟตแวร Wiring โดยกดคี ย Ctrl, Alt และ Delete พร อมกัน หนาตาง Window Security ปรากฏขึ้น แลวคลิก เลือก Task Manager หรือในคอมพิวเตอรบางเครืองอาจเข ่ าสูหน  าตาง Window Task mangaer ทันที ใหเลือกแท็ป Processes แลวหาชือไฟล ่ avrdude.exe คลิกเลือกทีไฟล ่ นัน้ แลวคลิกทีปุ่ ม End Process

จากนั้นซอฟตแวร Wiring IDE จะกลับมาทํางานในสถานะปกติได ทําการจายไฟให กับบอรดอีกครั้ง เลือกพอรตเชื่อมตอใหถูกตอง แลวทําการอัปโหลดโปรแกรมอีกครั้ง


    

17

1.4.2 กรณีทีคลิ ่ กปุม Upload แลว มีการแจงความผิดพลาดวา ไมพบฮารดแวร สําหรับการอัปโหลดโปรแกรม

สาเหตุ : ซอฟตแวร Wiring ไมสามารถติดตอกับแผงวงจรหลัก IPST-SE ได เนื่องจากเลือกพอรต อนุกรมที่ใชในการสื่อสารขอมูลไมถูกตอง ทางแกไข : (1) ตรวจสอบการตอสาย miniB-USB (2) ตรวจสอบการเลือกพอรตหรือชองเชื่อมตอ ใหเลือกพอรตทีใช ่ ในการเชื่อมตอใหมใหถูก ตอง โดยเลือกที่เมนู Tools > Serial port


18     

1.5 การเปดไฟลตัวอยาง เพื่ออํานวยความสะดวกและลดการผิดพลาดในการพัฒนาโปรแกรมสําหรับผูเริ่มตนใชงาน Wiring จึงไดเตรียมไฟลตัวอยางไวพอสมควร การเปดไฟลตัวอยางทําไดงายมาก โดยไปที่เมนู Help > Example > IPST-SE จะเห็นชือไฟล ่ ใหเลือกเปดใชงานตามตองการ หรือเลือกเปดผานทางคําสัง่ Open ซึงจะปรากฏหน ่ าตาง Explorer ขึนมาเพื ้ อให ่ คนหาไฟล ให เลือกไปที่ C:/Wiring/Examples/IPST-SE จะพบโฟลเดอรที่ใชเก็บไฟลสเก็ตชจํานวนมาก เมือเลื ่ อกเปดโฟลเดอรทีต่ องการ จะพบไฟล .pde ซึงก็ ่ คือไฟลทีใช ่ งานกับ Wiring IDE จากนัน้ จะแกไข, คอมไฟล รวมทั้งอัปโหลดโปรแกรมก็ทําไดตามตองการ

1.6 ขอกําหนดในการแกไขและบันทึกไฟล ในกรณีทีต่ องการแกไขไฟลตัวอยางเดิม ตองเปดไฟลนันๆ ้ ขึนมา ้ ทําการแกไขโคดโปรแกรม ตรวจสอบไวยกรณดวยการคอมไพล เมื่อเรียบรอยแลว มีทางเลือกในการบันทึกไฟล 2 ทางคือ 1. บันทึกในชื่อเดิม ใหใชคําสั่ง Save 2. บันทึกในชื่อใหมดวยคําสั่ง Save As แตไมควรบันทึกทับไฟลเดิมที่ไมไดถูกเปดขึ้น มา เพราะจะทําใหการเชื่อมโยงไฟลสับสน และทําใหเกิดความผิดพลาดในการเปดใชงานครั้งตอไป ได ถาหากมีความตองการบันทึกทับไฟลเดิมที่ไมไดถูกเปดขึ้นมา จะตองทําการลบโฟลเดอรของไฟล เดิมนั้นออกไปเสียกอน


    

 

19



   IPST-MicroBOX (SE) เปนชุดแผงวงจรอเนกประสงคทีใช ่ อุปกรณควบคุมแบบโปรแกรมได ขนาดเล็กทีเรี่ ยกวา “ไมโครคอนโทรลเลอร” (microcontroller) ทํางานรวมกับวงจรเชือมต ่ อคอมพิวเตอร เพือการโปรแกรมและสื ่ อสารข ่ อมูล โดยในชุดประกอบดวย แผงวงจรควบคุมหลัก IPST-SE ซึงมี ่ ไมโคร คอนโทรลเลอรเปนอุปกรณหลัก, กลุมของแผงวงจรอุ  ปกรณแสดงผลการทํางานหรืออุปกรณเอาตพุต อาทิ แผงวงจรแสดงผลดวยไดโอดเปลงแสง 8 ดวง และแผงวงจรแสดงผลดวยไดโอดเปลงแสงแบบตัวเดียว ่ รวมถึงแผงวงจรอุปกรณตรวจจับสัญญาณหรือเซนเซอร (sensor)ซึงมี ่ ดวยกันหลากหลายรูปแบบ จึงทําให ผูใช  งานสามารถนําชุดกลองสมองกล IPST-MicroBOX(SE) นีมาใช ้ ในการเรียนรู, ทดลองและพัฒนา โครงงานทางวิทยาศาสตรทีเกี ่ ยวข ่ องกับระบบควบคุมอัตโนมัติไดอยางสะดวกและมีประสิทธิภาพสูง IPST-MicroBOX (SE) มีดวยกัน 2 รุนคือ 1. รุนมาตรฐาน  1 ในชุดนี้ประกอบดวย แผงวงจรควบคุมหลัก IPST-SE เปนอุปกรณหลักที่มี โมดูลแสดงผลกราฟก LCD สีในตัว, แผงวงจร LED, แผงวงจรลําโพง, แผงวงจรตรวจจับสัญญาณ หรือเซนเซอร (sensor) พืนฐาน, ้ และเครื่องจายไฟ ทําใหนําชุด IPST-MicroBOX (SE) นีไปใช ้ ในการ เรียนรูและเขี  ยนโปรแกรมเพือพั ่ ฒนาเปนโครงงานทางวิทยาศาสตรทีมี่ การควบคุมดวยระบบอัตโนมัติ โดยใชโปรแกรมภาษา C/C++ ในเบื้องตนไดภายใตงบประมาณที่เหมาะสม 2. รุนมาตรฐาน 2 ในชุดประกอบดวยอุปกรณหลักเหมือนกับชุด IPST-MicroBOX (SE) รุน มาตรฐาน 1 มีการเพิ่มตัวตรวจจับแสงสะทอนอินฟราเรดอีก 2 ตัว, มอเตอรไฟตรงพรอมชุดเฟองขับ หรือ DC motor gearbox และชิ้นสวนทางกลที่จําเปน เพื่อใหผูใชงานสามารถตอยอดการเรียนการส อน การใชงาน IPST-MicroBOX (SE) นีไปสร ้ างเปนหุนยนต  อัตโนมัติแบบโปรแกรมได ทั้งยังรองรับ กิจกรรมการแขงขันไดเปนอยางดี


20     

1.1 รายการอุปกรณของชุดกลองสมองกล IPST-MicroBOX (SE) รุนมาตรฐาน  1 ประกอบดวย 1. แผงวงจรควบคุมหลัก IPST-SE 2. แผงวงจร LED เดี่ยวพรอมสายสัญญาณ 3 ชุด 3. แผงวงจร LED 8 ดวงพรอมสายสัญญาณ 1 ชุด 4. แผงวงจรลําโพงเปยโซพรอมสายสัญญาณ 1 ชุด 5. แผงวงจรสวิตชพรอมสายสัญญาณ 2 ชุด 6. แผงวงจรตรวจจับแสงพรอมสายสัญญาณ 1 ชุด 7. แผงวงจรตัวตานทานปรับคาไดพรอมสายสัญญาณ 2 ชุด 8. ไอซีวัดอุณหภูมิพรอมสายตอ 1 ชุด 9. อะแดปเตอรไฟตรง +9V 1A 10. สายเชื่อมตอ USB-miniB สําหรับดาวนโหลดโปรแกรมและสื่อสารขอมูล 11. ซีดีรอมบรรจุซอฟตแวรและตัวอยางโปรแกรมการทดลอง 12. คูมื อการทดลอง 13. กลองบรรจุ 14. ไขควง


    

21

รุนมาตรฐาน  2 ประกอบดวย รายการที่ 1 ถึง 13 ของรุนมาตรฐาน  1 และอุปกรณเพิมเติ ่ มดังนี้ 14. แผงวงจรตรวจจับแสงสะทอนอินฟราเรดพรอมสายสัญญาณ 2 ชุด 15. มอเตอรไฟตรงพรอมชุดเฟองขับรุน BO2 อัตราทด 48:1 พรอมสายเชื่อมตอแบบ IDC จํานวน 2 ตัว 16. ลอพลาสติกกลมสําหรับชุดเฟองขับมอเตอรและยาง จํานวน 2 ชุด 17. แผนกริดขนาด 80 x 60 เซนติเมตรและ 80 x 80 เซนติเมตร จํานวน 2 ชุด 18. แผนฐานกลมพรอมลออิสระ 1 แผน 19. แผนฐานกลมสําหรับทําโครงหุนยนต 1 แผน 20. ชิ้นตอ/แทงตอพลาสติกและเสารองพลาสติก 21. ชุดเสารองโลหะ, นอตและสกรู 22. กะบะถาน AA 6 กอน พรอมสายและหัวตอปองกันการกลับขัวสํ ้ าหรับตอกับแผงวงจรหลัก 23. แผนทดสอบการเคลือนที ่ ตามเส ่ นของหุนยนต


22     

2.1 คุณสมบัติของแผงวงจรหลัก IPST-SE มีหนาตาของแผงวงจรแสดงในรูปที่ 2-1 สวนรูปที่ 2-2 แสดงรายละเอียดที่สําคัญของแผงวงจร IPST-SE ที่ควรทราบเพื่อใชประโยชนในการอางถึงเมื่อทําการทดลอง สวนคุณสมบัติโดยสรุปของ IPST-SE เปนดังนี้  ใชไมโครคอนโทรลเลอร 8 บิตเบอร ATmega644P ของ Atmel รองรับโปรแกรมควบคุมที่ พัฒนาจากภาษาแอสเซมบลี, เบสิก และ C โดยในที่นีจะเน ้ นไปที่โปรแกรมภาษา C/C++ โดยภายใน มีโมดูลแปลงสัญญาณอะนาลอกเปนดิจิตอล ความละเอียด 10 บิต ใหคาของขอมูลในชวง 0 ถึง 1,023 จึงนํามาตอกับแผงวงจรตรวจจับทีให ่ ผลการทํางานเปนแรงดันไฟฟาไดงาย มีหนวยความจําโปรแกรม แบบแฟลชมากถึง 64 กิโลไบต โปรแกรมใหมได 10,000 ครั้ง มีหนวยความจําขอมูลอีอีพรอม 512 ไบต และหนวยความจําขอมูลแรม 1 กิโลไบต  สัญญาณนาฬิกาหลัก 16MHz จากคริสตอล  มีจุดตอพอรต USB  มีสวิตช RESET

สําหรับดาวนโหลดโปรแกรมและสื่อสารขอมูลกับคอมพิวเตอร

การทํางาน

 มีจุดตอพอรตแบบ 3 ขา (ขาไฟเลี้ยง, สัญญาณ และกราวด) จํานวน 20 จุด แบงเปนขาพอรต

ดิจิตอล 13 จุด (ขาพอรตหมายเลข 2, 3, 8, 9, 12 ถึง 20) และขาพอรตแบบดิจิตอลหรืออะนาลอก (กําหนดได) 7 จุด (หากใชเปนขาอินพุตอะนาลอกเปนขา A0 ถึง A6 และถาใชเปนขาพอรตดิจิตอล เปนขาพอรตหมายเลข 24 ถึง 30)

รูปที่ 2-1 แผงวงจรหลัก IPST-SE มีจอแสดงผล กราฟ กสี ความละเอียด 128 x 160 จุด แสดงตัวอักษรขนาดมาตรฐานไดมากถึง 21 ตัวอักษร 16 บรรทัด อัปโหลดโปรแกรมผาน พอรต USB


8 SCL 9 SDA

28 A4 25 A1

29 A5 26 A2

30 A6 27 A3

           USB  D   0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 00 0 00 0 0 0 000000   0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 ON 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0  0  0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0   000 0 0 0 0000 0 0 0 00 0 00 0 0 0  0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 G  0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0  6V 0 0 000 0 0 0 0 0000 00 00 0000 KNOB 12 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0    G 00000 0 0 00 0 00 0 0 0 0 0 0 0 0 0 OK 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 6V   0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 13     SW1  6VG  14   UART1 G  6V 1 2 +5 LOW 16 18 15   SERVO 17 19 20 2 RxD1 3 TxD1 RESET                 

24 A0

รูปที่ 2-2 แสดงสวนประกอบทีควรทราบของแผงวงจรหลั ่ ก IPST-SE 23

15 SV0 14 SV1 13 SV2 12 SV3

DC MOTOR


24     

 มีจุดตอระบบบัส 2 สาย (I2C) เพือขยายระบบ ่

มีจุดตอสําหรั บสื่อสารขอมูลอนุกรมหรือ UART (Universal Asynchronous Receiver Transmitter) เพื่อขยายระบบ 

ใชไฟเลียงในย ้ าน +6.5 ถึง +9V กระแสไฟฟา 1,500mA กรณีตอใชงานมอเตอรไฟตรงและ เซอรโวมอเตอรรวมดวย หรือ 500mA กรณีไมใชงานมอเตอร บนแผงวงจรหลัก IPST-SE มีวงจร ควบคุมแรงดันคงที่ +5V จึงนําไปจายใหกับแผงวงจรตอพวงอืนๆ ่ รวมทังแผงวงจรตั ้ วตรวจจับดวย 

มีจุดตอไฟเลียง ้ (DC INPUT) ผานทางจุดตอแบบหัวเสียบปองกันการตอกลับขั้วและแจก อะแดปเตอร รับไฟเลียงได ้ ตังแต ้ 7.2V ถึง +9V โดยมีสวิตชเปด-ปดเพือตั ่ ดตอไฟเลียงแก ้ แผงวงจร พรอม ไฟแสดงสถานะไฟเลียง ้ +5V และมีวงจรแจงสถานะแบตเตอรีอ่ อน (LOW) ดวย LED สีเหลืองในกรณี ที่ใชแหลงจายไฟเปนแบตเตอรี่ โดยกําหนดระดับแรงดันไวที่ +7V 

 มีวงจรควบคุมไฟเลี้ยงคงที่

+5V 2A แบบสวิตชิงสํ ่ าหรับรักษาระดับไฟเลี้ยงใหแกไมโคร

คอนโทรลเลอร  มีวงจรขับมอเตอรไฟตรง 2 ชอง พรอมไฟแสดงผล  มีจุดตอขาพอรตของไมโครคอนโทรลเลอรสําหรับขับเซอรโวมอเตอร 4 ชองคือ จุดตอ 15,

14, 13 และ 12 (เรียงตามลําดับ SERVO0, SERVO1, SERVO2 และ SERVO3)  มีโมดูลแสดงผลแบบกราฟกสี ความละเอียด 128 x 160 จุด แสดงภาพกราฟกลายเสน และ

พื้นสี (ไมรองรับไฟลรูปภาพใดๆ) พรอมไฟสองหลัง แสดงผลเปนตัวอักษรขนาดปกติ (5x7 จุด) ได 21 ตัวอักษร 16 บรรทัด (21 x 16) ่ อกับขาพอรตหมายเลข 22  มีสวิตชกดติดปลอยดับใชงานอิสระ 1 ตัว คือ SW1 ซึงต  มีสวิตชกดติดปลอยดับชื่อ สวิตช

OK ซึ่งตอรวมกับตัวตานทานปรับคาไดชื่อ KNOB ซึง่ เชื่อมตอไปยังขาพอรตดิจิตอลหมายเลข 31 (หรืออินพุตอะนาลอก A7) ทําใหอานคาสัญญาณดิจิตอล และอะนาลอกไดในขาพอรตเดียวกัน  มีจุดตอ ISP

สําหรับอัปเกรดหรือกูเฟ  รมแวร โดยใชชุดโปรแกรมแบบ ISP เพิ่มเติม (แนะ นําเครื่องโปรแกรม AVR-ISP mark II ของ Atmel)


    

25

2.2 คุณสมบัติของชุดอุปกรณเอาตพุต ้ ดมาตรฐาน 1 และ 2) 2.2.1 แผงวงจรไฟแสดงผล : ZX-LED (มีทังในชุ ใช LED ขนาด 8 มิลลิเมตร ตองการลอจิก “1” ในการขับใหสวาง มีวงจรแสดงในรูปที่ 2-3

LED1 R1 (Default = 510)

S

+

Q1 KRC102 (DTC114)

รูปที่ 2-3 รูปรางและวงจรของแผงวงจรไฟแสดงผล ZX-LED ทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX(SE)

้ ดมาตรฐาน 1 และ 2) 2.2.2 แผงวงจรไฟแสดงผล 8 ดวง : ZX-LED8 (มีทังในชุ เปนแผงวงจรที่มี LED ขนาด 3 มิลลิเมตรสําหรับแสดงผล 8 ดวง พรอมจุดตอพวงเอาตพุตเพื่อ นําไปใชในการขับรีเลยไดดวย โดยแผงวงจร ZX-LED8 นีจะต ้ อเขากับขาพอรตใดของแผงวงจร IPSTSE ก็ได โดยใชขาพอรตเพียงขาเดียวในการควบคุมและขับ LED ใหติดดับตามที่ตองการไดพรอมกัน ถึง 8 ดวง มีหนาตาของแผงวงจรแสดงในรูปที่ 2-4

รูปที่ 2-4 รูปรางแผงวงจรไฟแสดงผล ZX-LED8 ทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX(SE)


26     

ในแผงวงจร ZX-LED8 ใชการติดตอกับแผงวงจรหลัก IPST-SE ในแบบสือสารข ่ อมูลอนุกรม รวมกับคําสังทางซอฟต ่ แวร ผูพัฒนาโปรแกรมสามารถเขียนโปรแกรมให ZX-LED8 ติดดับไดตังแต ้ 1 ถึง 8 ตัว หรือจะเขียนโปรแกรมใหทํางานเปนไฟวิงได ่ ตังแต ้ 1 ถึง 8 ดวงเชนกัน ที่ดานบนของแผงวงจร ZX-LED8 มีจุดตอ JST ซึงต ่ อพวงมาจาก LED ทํางานทีลอจิ ่ ก “1” มี ระดับแรงดันไฟตรงขาออกประมาณ +5V จึงสามารถใชสัญญาณเอาตพุตจากจุดนี้ไปตอกับวงจรขับ โหลดกระแสไฟฟาสูง อาทิ แผงวงจรขับรีเลย ไดทันที โดยไมตองเขียนโปรแกรมควบคุมเพิ่มเติม

้ ดมาตรฐาน 1 และ 2) 2.2.3 แผงวงจรลําโพงเปยโซ : ZX-SPEAKER (มีทังในชุ มีวงจรและหนาตาของบอรดแสดงในรูปที่ 2-5 คุณสมบัติทางเทคนิคที่สําคัญมีดังนี้  ใชลําโพงเปยโซ มีอิมพีแดนซ 32  มีคาความถีเรโซแนนซ ่ ในยาน1 ถึง 3kHz

K1 SOUND + S

C1 10/16V

SP1 Piezo speaker

รูปที่ 2-5 วงจรของแผงวงจรลําโพง ZX-SPEAKER


27

    

2.3 คุณสมบัติของชุดอุปกรณตรวจจับสัญญาณ 2.3.1 แผงวงจรสวิตช : ZX-SWITCH01

(มีทังในชุ ้ ดมาตรฐาน 1 และ 2)

   

D

ZX-SWITCH01

มีวงจรแสดงในรูปที่ 2- 6 ประกอบดวยสวิตชพรอมไฟแสดงผล ใหเอาตพุตคือ หากมีการกดสวิตช จะสงลอจิก “0” (ระดับแรงดัน 0V) และไฟสีแดงติด LED1

Indicator

+V

R2 10k R1 510

R3 220

DATA

Signal output S1 GND Switch

รูปที่ 2-6 รูปรางและวงจรของแผงวงจรสวิตชทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX(SE)

2.3.2 แผงวงจรตรวจจับแสง : ZX-LDR

(มีทังในชุ ้ ดมาตรฐาน 1 และ 2)

ใชตรวจจับแสงสวาง เลือกเอาตพุตได 2 แบบคือ แรงดันเอาตพุตเพิ่ม เมื่อแสงตกกระทบ

+

แรงดันเอาตพุตลดลง เมื่อแสงตกกระทบ มีวงจรและรูปรางของแผงวงจรแสดงในรูปที่ 2-7

+

LDR Light

+

A

เมื่อแสงมากขึ้น แรงดันที่ไดจะลดลง เมื่อแสงมากขึ้น แรงดันที่ไดจะมากขึ้น

ZX-LDR +

10k

S

+

A

+

LDR

S

+

รูปที่ 2-7 รูปรางและวงจรของแผงวงจรตรวจจับแสงที่ใชในชุดกลองสมองกล IPST-MicroBOX(SE)


28     

2.3.3 แผงวงจรตัวตานทานปรับคาไดแบบแกนหมุน : POTENTIOMETER (มี ทังในชุ ้ ดมาตรฐาน 1 และ 2) ใชกําหนดแรงดัน 0 ถึง +5V ตามการหมุนแกน นําไปใชวัดคามุมและระยะทางได มีทั้งแบบ ตัวตั้งและตัวนอน มีเอาตพุต 2 แบบคือ แรงดันมากขึนเมื ้ ่อหมุนทวนเข็มนาฬิกาหรือ ตามเข็มนาฬิกา มีวงจรและหนาตาของแผงวงจรแสดงในรูปที่ 2-8 แบบตัวตั้ง

เมื่อหมุนทวนเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น

A

POTENTIOMETER

แบบตัวนอน A

ZX-POTV/POTH

A

Potentiometer

เมื่อหมุนตามเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น เมื่อหมุนทวนเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น เมื่อหมุนตามเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น

S + S +

10kB

รูปที่ 2-8 แสดงรูปราง, วงจร และการทํางานของแผงวงจรตัวตานทานปรับคาไดแบบแกนหมุน


    

29

2.3.4 ไอซีวัดอุณหภูมิ MCP9701 (มีทังในชุ ้ ดมาตรฐาน 1 และ 2) เปนอุปกรณตรวจจับและวัดอุณหภูมิทีให ่ ผลการทํางานเปนแรงดันไฟฟาแบบเชิงเสน รับรูการ  เปลี่ยนแปลงของอุณหภูมิภายในเวลาไมถึง 2 วินาที เชื่อมตอกับอินพุตอะนาลอก A0 ถึง A6 ของแผง วงจรหลัก IPST-SE ไดทันที ในรูปที่ 2-9 แสดงการจัดขาและกราฟคุณสมบัติของไอซีวัดอุณหภูมิเบอร MCP9701 คุณสมบัติทางเทคนิคของ MCP9701 ที่ควรทราบ  เปนไอซีวัดอุณหภูมิในกลุมเทอร  มิสเตอรแบบแอกตีฟที่ใหผลการทํางานแบบเชิงเสน  ยานวัด -40 ถึง +125 องศาเซลเซียส  ผลการวัดอางอิงกับหนวยขององศาเซลเซียสโดยตรง

่ 2 องศาเซลเซียส  ความผิดพลาดเฉลีย  ยานไฟเลียง ้ +3.1 ถึง +5.5V กินกระแสไฟฟาเพียง 6uA ใชแบตเตอรี่เปนแหลงจายไฟได  คาแรงดันเอาตพุต

500mV (ที่ 0๐C) ถึง 2.9375V (ที่ 125๐)

 คาแรงดันเอาตพุตตอการเปลียนแปลงอุ ่ ณหภูมิ 19.5mV/๐C ใชงานกับวงจรแปลงสัญญาณ

อะนาลอกเปนดิจิตอลความละเอียดตั้งแต 8 บิตได โดยมีความคลาดเคลื่อนตํ่า  ไมตองการอุปกรณภายนอกตอเพิ่มเติมเพื่อชดเชยการทํางาน

รูปที่ 2-9 การจัดขาของ MCP9701, หนาตาเมื่อตอสายสัญญาณพรอมใชงานและกราฟคุณสมบัติ


30     

จุดตอสัญญาณ +V TCRT5000

OUT GND

10k

510

ตั วตรวจจับแสงสะทอนอินฟราเรด

รูปที่ 2-10 หนาตาและวงจรของแผงวงจรตรวจจับแสงสะทอนอินฟราเรดทีใช ่ ในชุด IPST-MicroBOX (SE) รุนมาตรฐาน  2

2.3.5 แผงวงจรตรวจจับแสงสะทอนอินฟราเรด : ZX-03 (มีในชุดมาตรฐาน 2) มีวงจรและหนาตาของแผงวงจรแสดงในรูปที่ 2-10 เปนแผงวงจรที่ใชในการตรวจสอบการ สะทอนของแสงอินฟราเรดของตัวตรวจจับแสงสะทอนอินฟราเรดซึงรวมตั ่ วสงและตัวรับไวในตัวถัง เดียวกัน โดยตัวตรวจจับแสงสะทอนอินฟราเรดที่นํามาใชคือ TCRT5000 เมื่อจายไฟเลียง ้ LED อินฟราเรดภายในตัวโมดูล TCRT5000 จะเปลงแสงออกมาตลอดเวลา สวนตัวรับซึ่งเปนโฟโตทรานซิสเตอรจะไดรับแสงอินฟราเรดจากการสะทอนกลับ โดยปริมาณของ แสงที่ไดรับจะมากหรือนอยขึนอยู ้ กั บวา มีวัตถุมากีดขวางหรือไม และวัตถุนันมี ้ ความสามารถในการ สะทอนแสงอินฟราเรดไดดีเพียงไร ซึงขึ ่ นกั ้ บลักษณะพื้นผิวและสีของวัตถุ โดยวัตถุสีขาวผิวเรียบจะ สะทอนแสงอินฟราเรดไดดี ทําใหตัวรับแสงอินฟราเรดไดรับแสงสะทอนมาก สงผลใหแรงดันทีเอาต ่ พุตของวงจรสูงตามไปดวย ในขณะที่วัตถุสีดําสะทอนแสงอินฟราเรดไดนอย ทําใหตัวรับอินฟราเรด สงแรงดันออกมาตํา่ ดวยคุณสมบัติดังกลาวจึงนิยมนําแผงวงจรตรวจจับแสงสะทอนอินฟราเรดนีมาใช ้ ในการตรวจจับพื้นหรือเสน โดยตองติดตั้งไวดานลางของโครงหุนยนต เนืองจากแผงวงจรตรวจจั ่ บแสงสะทอนอินฟราเรด ZX-03 ใหผลการทํางานเปนแรงดันไฟตรง ดังนันในการใช ้ งานกับแผงวงจรหลัก IPST-SE จึงตองตอเขากับชองอินพุตอะนาลอก (A0 ถึง A6) ของแผงวงจรหลัก จากนั้นใชความรูจากการอานคาสัญญาณอะนาลอก เพื่ออานคาจากแผงวงจรตรวจ จับแสงสะทอนอินฟราเรดนําไปสูการตรวจจับเสนตอไป


    

31

2.4 ขอมูลของอุปกรณทางกลทีใช ่ ในชุด IPST-MicroBOX (SE) รุนมาตรฐาน  2 2.4.1 มอเตอรไฟตรงพรอมชุดเฟองขับ เปนชุดมอเตอรพรอมเฟองขับรุน BO-2 อัตราทด 48:1 มีสายตอ 2 เสน คุณสมบัติทางเทคนิคที่ สําคัญมีดังนี้  ตองการไฟเลียงในย ้ าน +3 ถึง +9Vdc  กินกระแสไฟฟา 130mA (ที่ไฟเลียง ้ +6V และไมมีโหลด)  ความเร็วเฉลีย ่ 170 ถึง 250 รอบตอนาที (ที่ไฟเลียง ้ +6V และไมมีโหลด)  นําหนั ้ ก 30 กรัม  แรงบิดตําสุ ่ ด 0.5 กิโลกรัม-เซนติเมตร 

ติดตั้งเขากับตัวยึดพลาสติกแบบมีพุกทองเหลืองสําหรับยึดในตัว

 ขนาด (กวาง x ยาว x สูง) 42 x 45 x 22.7 มิลลิเมตร

2.4.2 ลอพลาสติกสําหรับชุดเฟองขับมอตอรและยาง เปนลอกลม มีเสนผานศูนยกลาง 65 มิลลิเมตร สามารถสวมเขากับแกนของชุดเฟองขับมอเตอร ไดทันทีโดยไมตองดัดแปลงเพิมเติ ่ ม ขันยึดดวยสกรูเกลียวปลอย 2 มิลลิเมตร สวนยางขอบลอทีใช ่ รวม ดวยผลิตจากยางพารา ผิวมีดอกยางเพื่อชวยเพิ่มสมรรถนะในการเกาะพื้นผิว


32     

2.4.3 แผนกริด เปนแผนพลาสติกที่ผลิตจากวัสดุ ABS ขนาด 80 x 60 มิลลิเมตร และ 80 x 80 มิลลิเมตร อยาง ละ 1 แผน ในแตละมีรูขนาด 3 มิลลิเมตรที่มีระยะหางกัน 5 มิลลิเมตร

2.4.4 แผนฐานกลม เปนแผนพลาสติกที่ผลิตจากวัสดุ ABS ขนาดเสนผานศูนยกลาง 250 มิลลิเมตร เปนแผนฐาน สําหรับยึดอุปกรณตางๆ ที่แผนฐานมีรูขนาด 3 มิลลิเมตรสําหรับติดตั้งอุปกรณหรือโครงสรางกลไก เพิ่มเติม มีรูปรางเปนแผนกลม ในชุดมีให 2 แบบ แบบมีลอกลมกึงอิ ่ สระทั้งดานหนาและหลัง และ แบบมาตรฐานไมมีลอกลมกึงอิ ่ สระ

2.4.5 ชิ้นตอพลาสติก เปนชินส ้ วนพลาสติกแข็งเหนียว มี 3 แบบคือ ชิ้นตอแนวตรง, ชิ้นตอมุมฉาก และชิ้นตอมุม ปาน สามารถเสียบตอกันได ใชตอกันเปนโครงสรางหรือตกแตง บรรจุ 3 แบบ รวม 30 ชิ้น


    

33

2.4.6 แทงตอพลาสติก เปนชินส ้ วนพลาสติกแข็งเหนียวในแตละชิ้นจะมีรูขนาด 3 มิลลิเมตรสําหรับรอยสกรูเพื่อติด ตั้งหรือตอกับชิ้นสวนโครงสรางอื่นๆ ที่ปลายของแทงตอสามารถเสียบเขากับชิ้นตอพลาสติกได ใน ชุดมี 3 ขนาด คือ 3, 5 และ 12 รู แตละขนาดมี 4 ชิ้น

2.4.7 สกรูและนอต เปนอุปกรณสําหรับยึดชินส ้ วนตางๆ เขาดวยกัน ในชุดประกอบดวย สกรูมือหมุน (4 ตัว), สกรูเกลียวปลอย 2 มิลลิเมตร (2 ตัว), สกรู 3 x 8 มิลลิเมตร (4 ตัว), 3 x 10 มิลลิเมตร (30 ตัว), 3 x 15 มิลลิเมตร (4 ตัว), 3 x 40 มิลลิเมตร (4 ตัว), สกรูหัวตัด 3 x 8 มิลลิเมตร (10 ตัว) และนอต 3 มิลลิเมตร (30 ตัว)

2.4.8 เสารองโลหะ เปนอุปกรณชวยยึดชินส ้ วนตางๆ และรองรับแผงวงจร, แผนกริดและแผนฐาน ทําจากโลหะ ชุบนิเกิลกันสนิม มีลักษณะเปนแทงทรงกระบอกยาว 50 มิลลิเมตร ภายในมีรูเกลียวตลอดตัวสําหรับ ขันสกรู 3 มิลลิเมตร ในชุดมี 4 ตัว


34     

2.4.9 เสารองพลาสติก เป นอุ ปกรณช วยยึ ดชิ้ นสวนตางๆ และประคองรองรับแผงวงจร, แผนกริดและแผนฐาน ทําจากพลาสติก ABS เหนียว สามารถตัดได มีลักษณะเปนแทงทรงกระบอก ภายในมีรูตลอดตัวสําหรับ รอยสกรู 3 มิลลิเมตร ในชุดประกอบดวย เสารองขนาด 3 มิลลิเมตร (4 ตัว), 10 มิลลิเมตร (4 ตัว), 15 มิลลิเมตร (4 ตัว) และ 25 มิลลิเมตร (4 ตัว)

2.4.10 กะบะถาน ใชบรรจุแบตเตอรีขนาด ่ AA จํานวน 6 กอน มีสายตอขัวบวกและขั ้ วลบสํ ้ าหรับตอกับแผงวงจร ควบคุมหลัก IPST-SE ไดทันที


    

35

2.5 ขอมูลของสายสัญญาณทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX (SE) 2.5.1 สาย JST3AA-8 : สายเชือมต ่ อระหวางแผงวงจร

สาย JST3AA-8 ใชเชื่อมตอระหวางแผงวงจรควบคุม IPST-SE กับแผงวงจรตรวจจับและแผง วงจรอุปกรณตางๆ เปนสายแพ 3 เสน ยาว 8 นิว้ ปลายสายทั้งสองดานติดตั้งคอนเน็กเตอรแบบ JST 3 ขา ตัวเมีย ระยะหางระหวางขา 2 มิลลิเมตร มีการจัดขาดังนี้ ระยะหางระหวางขา 2 มม.

ระยะหางระหวางขา 2 มม.

GND S +5V

2.5.2 สาย USB-miniB เปนสายสัญญาณสําหรับเชื่อมตอระหวางพอรต USB ของคอมพิวเตอรกับแผงวงจร IPST-SE


36     


    

37

        ในบทนีนํ้ าเสนอขอมูลในขันต ้ นของ Wiring ซึงเป ่ นเครืองมื ่ อทางซอฟตแวรสําหรับพัฒนาการ ทํางานของชุดกลองสมอง IPST-MicroBOX Secondary Edition(SE) สําหรับรายละเอียดของโปรแกรม ภาษา C/C++ ที่ Wiring รองรับอานเพิ่มเติมไดจากหนังสือ โครงสรางของโปรแกรมภาษา C/C++ สําหรับ Wiring IDE ที่จัดมาพรอมกันในชุดกลองสมองกล IPST-MicroBOX (SE) แลว

3.1 สวนประกอบของ Wiring IDE Wiring IDE ประกอบดวย 2 สวนทีสํ่ าคัญคือ เท็กซเอดิเตอร (text editor) และ ตัวแปลภาษา C (C compiler) ดานเครืองมื ่ อหรือปุมคํ  าสังที ่ ช่ วยในการพัฒนาโปรแกรมก็มีหลากหลาย สรุปดังรูปที่ 3-1

รูปที่ 3-1 หนาตางหลักของซอฟตแวร Wiring IDE ทีใช ่ ในการพัฒนาโปรแกรม


     38

3.1.1 แถบเมนูคําสัง่ : Menu bar ประกอบดวย File, Edit, Sketch, Tools และ Help menu

3.1.1.1 เมนู File

New (Ctrl+N) : สรางไฟลใหม ซึงในซอฟต ่ แวร Wiring จะเรียกวา สเก็ตช (sketch) โดยจะ ถูกตั้งชื่อเปนวันทีป่ จจุบันในรูปแบบ sketch_YYMMDDa เชน sketch_080407a หรือคลิกปุม บนแถบเครื่องมือก็ได Open (Ctrl+O) : เลือกเปดไฟลสเก็ตช หรือคลิกปุม

บนแถบเครื่องมือก็ได

Close (Ctrl+W) : เลือกปดไฟลสเก็ตช Save (Ctrl+S) : บันทึกไฟลสเก็ตชที่เปดอยูในชื่อเดิม ทํางานเหมือนกับการคลิกที่ปุม บนแถบเครื่องมือ Save as... (Ctrl+Shift+O) : บันทึกไฟลสเก็ตชที่เปดอยูในชื  ่อใหม ไฟลเดิมจะไมหายไป Upload to Wiring hardware (Ctrl+U) : สงขอมูลของไฟลสเก็ตชในปจจุบันไปยังฮารดแวร Wiring I/O ปกติแลวการทํางานในลักษณะนีมั้ กจะเรียกวา ดาวนโหลด (donwload) แตสําหรับใน ซอฟตแวร Wiring จะเรียกกระบวนการทํางานนี้วา การอัปโหลด (upload) ทํางานเหมือนกับการคลิ บนแถบเครื่องมือ กที่ปุม Preferences : ปรับแตงการทํางานของ Wiring IDE Quit (Ctrl+Q) : ออกจากโปรแกรม Wiring และปดหนาตางของโปรแกรม Wiring ทังหมด ้


    

39

3.1.1.2 เมนู Edit เปนเมนูที่บรรจุคําสั่งตางๆ ที่ใชในการแกไขไฟลสเก็ตชที่พัฒนาบน Wiring IDE

Undo (Ctrl+Z) : ยกเลิกการกระทําคําสั่งกอนหนานีหรื ้ อที่พิมพลาสุด การยกเลิกคําสั่ง Undo ทําไดโดยเลือก Edit > Redo Redo (Ctrl+Y) : กลับไปทําคําสังที ่ ่ทํากอนหนาคําสัง่ Undo คําสั่งนีจะใช ้ ไดก็ตอเมือได ่ ทําการ Undo ไปแลว Cut (Ctrl+X) : ลบและคัดลอกขอความที่เลือกไปเก็บที่คลิปบอรด ซึงทํ ่ าหนาที่เปนหนวย ความจําชั่วคราวสําหรับพักขอมูล Copy (Ctrl+C) : คัดลอกขอความที่เลือกไปเก็บที่คลิปบอรด Paste (Ctrl+V) : วางขอมูลทีอยู ่ ในคลิ  ปบอรดไปยังตําแหนงทีกํ่ าหนดหรือแทนทีข่ อความทีเลื ่ อก Select All (Ctrl+A) : เลือกตัวหนังสือหรือขอความทังหมดในไฟล ้ ทีกํ่ าลังเปดอยูในเท็  กซเอดิเตอร ในขณะนัน้ Find (Ctrl+F) : คนหาขอความภายในไฟลที่เปดอยูในเท็  กซเอดิเตอร นอกจากนียั้ งคนหาและ แทนที่ดวยขอความอื่นได Find Next (Ctrl+G) : คนหาขอความหรือคําตัวถัดไปภายในไฟลที่เปดอยูในเท็  กซเอดิเตอร


     40

3.1.1.3 เมนู Sketch เป นเมนูคําสั่งที่เกียวข ่ องกับการคอมไพลไฟลสเก็ตช

Verify/Compile (Ctrl+R) : เปนคําสั่งคอมไพลโปรแกรม ทํางานเหมือนกับการกดปุม บนแถบเครื่องมือ Import Library : ใชเลือกผนวกไฟลไลบรารีที่ตองการลงในไฟลสเก็ตช Show Sketch Folder : แสดงโฟลเดอรของไฟลสเก็ตชปจจุบัน Add File : เลือกไฟลโปรแกรมที่ตองการเพิ่มลงไปในไฟลสเก็ตช

3.1.1.4 เมนู Tools เปนเมนูคําสั่งที่เกียวข ่ องกับการเลือกใชเครื่องมือชวยในการพัฒนาโปรแกรม คําสั่งสําคัญที่ ควรทราบมีดังนี้


    

41

Auto Format : เลือกใหมีการจัดรูปแบบของโคดใหดูเปนระเบียบ Serial Monitor : เลือกเปดการทํางานและแสดงผลของ Serial Monitor Board : ใชเลือกรุนของฮารดแวรที่ใชกับ Wiring 1.0 ในทีให ่ เลือก IPST-SE > IPST-SE, ATmega644 @ 16MHz Serial Port : ใชเลือกตําแหนงของพอรตคอมพิวเตอรทีใช ่ ติดตอกับฮารดแวรจากหัวขอ Board สําหรับแผงวงจร IPST-SE โดยปกติมีคาตังแต ้ COM3 ขึนไป ้

3.1.1.5 Help

Getting Started : เปดหนาตางเกียวกั ่ บการเริมต ่ นเรียนรูและใช  งาน Wiring ของเว็บไซต http:/ /wiring.org.co/learning/tutorials/ จะตองตออินเทอรเน็ต หากตองการดูขอมูล Examples : เลือกเปดไฟลสเก็ตชของโปรแกรมตัวอยาง Reference : เปดหนาตาง Reference ของเว็บไซต Wiring ตองตออินเทอรเน็ต หากตองการดูขอมูล Find in Reference (Ctrl+Shift+F) : เลือกขอความในโคดโปรแกรมของคุณ จากนั้นเลือก Help > Find in Reference โปรแกรมจะนําขอความที่เลือกไปคนหาใน reference ถาคนหาไมพบ จะมีขอความเตือนในหนาตางหลักของโปรแกรม Wiring Hardware : เลือกดูขอมูลของฮารดแวร Wiring I/O ผานทางเครือขายอินเทอรเน็ต Troubleshooting : เปดหนาตางการแกไขปญหาในการใชงาน Wiring ของเว็บไซต Wiring Visit wiring.org.co (Ctrl+5) : เปดเว็บบราวเซอรเพื่อเยี่ยมชมโฮมเพจของ Wiring ที่ http:// wiring.org.co จะตองตออินเตอรเน็ต หากตองการดูขอมูล About Wiring : แสดงขอมูลลิขสิทธิ์เกียวกั ่ บซอฟตแวร Wiring


     42

3.1.2 แถบเครื่องมือ : Toolbar มีฟงกชั่นพื้นฐาน 6 ปุม และการทํางานในขั้นตนดังนี้ Run หรือ Compile ใชในการคอมไพลโคดโปรแกรม New ใชสรางไฟลสเก็ตชใหม (ใน Wiring จะเรียกไฟลที่ทําการพัฒนาวา สเก็ตช (sketch) Open เปดไฟลสเก็ตชที่มีอยู Save บันทึกไฟลสเก็ตชปจจุบันใสในโฟลเดอรของไฟลสเก็ตชที่ทํางานอยู ถาตองการ บันทึกในชื่ออืน่ ใหเลือกใชคําสั่ง Save As จากเมนู File Upload to Wiring hardware ใชสงไฟลสเก็ตชปจจุบันไปสเก็ตชบุกและอัปโหลด โปรแกรมไปยังฮารดแวร Wiring ในที่นีคื้ อ แผงวงจร IPST-SE (ใน Wiring จะเรียกกระบวนการดาวน โหลดโปรแกรมไปยังฮารดแวรวา อัปโหลด : upload) Serial monitor เปดการเชือมต ่ อระหวางแผงวงจร IPST-SE กับพื้นที่มอนิเตอรของ Wiring IDE ผานทางพอรตอนุกรมเสมือนที่เกิดจากไดรเวอรของวงจรแปลงสัญญาณพอรต USB เปนพอรตอนุกรมหรือ USB serial port เพือดู ่ ขอมูลทีส่ งกลับมาจากแผงวงจร IPST-SE ซึงมี ่ ประโยชน มากในการตรวจสอบการทํางานของโปรแกรม


    

43

3.1.3 Serial monitor Wiring IDE ไดผนวกเครื่องมือสําหรับแสดงผลและสงขอมูลผานพอรตอนุกรม หรือ USB เพื่อติดตอกับแผงวงจร IPST-SE นันคื ่ อ Serial monitor โดยในการเขียนโปรแกรมจะตองบรรจุคําสั่ง Serial.println() ลงในโปรแกรมดวย อยางไรก็ตามกอนการใชคําสัง่ Serial.println()จะตองมีการ กําหนดคาอัตราเร็วในการถายทอดขอมูลหรืออัตราบอดหรือบอดเรต (baud rate) กอน โดยใชคําสั่ง Serial.begin()ซึ่งโดยปกติกําหนดคาเปน 9600 บิตตอวินาที และควรบรรจุคําสั่ง Serial.begin()ให อยูในสวน setup()ของโปรแกรมทุกครั้ง บนแถบเครือง ่ การเรียกใหหนาตาง Serial Monitor ใหทํางาน ทําไดงายมากเพียงคลิกทีปุ่ ม มื อ หนาตาง Serial Monitor จะปรากฏขึนเพื ้ อแสดงข ่ อความที่รับมาจากแผงวงจร IPST-SE ผานทาง พอรต USB หรือพอรตอนุกรมที่ดานบนของหนาตาง Serial Monitor จะเปนชองสําหรับปอนขอมูล เพื่อสงคาจากโปรแกรมมายังแผงวงจร IPST-SE


     44

3.2 ขั้นตอนการพัฒนาโปรแกรม (1) ตรวจสอบการติดตังฮาร ้ ดแวรและซอฟตแวรของ Wiring รวมถึงการตังค ้ าของพอรตทีเชื ่ อม ่ ตอกับฮารดแวร Wiring I/O ในทีนี่ คื้ อ แผงวงจร IPST-SE ของชุดกลองสมองกล IPST-MicroBOX (SE) (2) สรางไฟลสเก็ตชใหมดวยการคลิกทีปุ่ ม New บนแถบเครืองมื ่ อหรือเลือกจากเมนู File > New

(3) พิมพโคดโปรแกรมตอไปนี้ #include <ipst.h> void setup() { glcdClear(); glcdMode(0); } void loop() { setTextSize(2); setTextColor(GLCD_YELLOW); glcd(1,1,"Hello"); setTextColor(GLCD_SKY); glcd(3,1,"IPST"); glcd(4,1,"MicroBOX"); setTextSize(1); glcd(10,2,"Secondary Education"); }

// ผนวกไฟลไลบรารีหลัก ipst.h // ลางการแสดงผล // เลือกทิศทางการแสดงผลโหมด 0

// เลือกขนาดตัวอักษร 2 เทา // เลือกสีของตัวอักษรเปนสีเหลือง // กําหนดขอความที่บรรทัด 1 คอลัมน 1 // เลือกสีของตัวอักษรเปนสีฟา // กําหนดขอความที่บรรทัด 3 คอลัมน 1 // กําหนดขอความที่บรรทัด 4 คอลัมน 1 // เลือกขนาดตัวอักษรปกติ // กําหนดขอความที่บรรทัด 10 คอลัมน 2

โปรแกรมนีใช ้ ในการทดสอบการทํางานเบื้องตนของแผงวงจร IPST-SE โดยกําหนดให แสดงขอความที่จอแสดงผลดวยขนาดและสีของตัวอักษรที่ตางกัน


    

45

(4) ไปที่เมนู File เลือกคําสั่ง Save As เพื่อบันทึกไฟลในชื่อ Test ตอนนี้จะมีไฟล test.pde เกิดขึ้นในโฟลเดอรชื่อวา test

(5) ตรวจสอบการเขียนโปรแกรมดวยการคลิกที่ปุม Run ที่แถบเครื่องมือหรือเลือกคําสั่งจาก เมนู Sketch > Compile/Verify

หากมีความผิดพลาดเกิดขึ้นจากการคอมไพล จะปรากฏขอความแจงความผิดพลาด ในชองแสดงสถานะและพื้นที่แสดงขอความ ตองทําการแกไขโปรแกรม

หากการคอมไพลถูกตอง ที่ชองแสดงสถานะจะแจงแสดงขอความ Done compiling


     46

2

 3

  30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000

ON

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

 

USB

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0

4

KNOB

8 SCL 9 SDA

1

SERVO

รูปที่ 3-1 การเชือมต ่ อแผงวงจร IPST-SE กับคอมพิวเตอรเพื่อใชงานกับซอฟตแวร Wiring IDE หลังจากการคอมไพลสําเร็จ ในโฟลเดอร Test จะมีโฟลเดอรใหมเกิดขึ้นชือว ่ า Build ภายในโฟลเดอร Build จะบรรจุไฟลซอรสโปรแกรมภาษา C++ และไฟลประกอบ (5) ตอสาย USB เขากับแผงวงจร IPST-SE จากนั้นเปดสวิตชจายไฟเลียง ้ แลวรอใหการเชื่อม ตอกับคอมพิวเตอรเสร็จสมบูรณ (ดูจากไฟแสดงผลสีนําเงิ ้ นทีตํ่ าแหนง USB ติดสวาง) (6) คลิกที่ปุม Upload to Wiring Hardware บนแถบเครื่องมือ ถาทุกอยางเปนปกติ เมื่อทําการอัปโหลดเสร็จ จะมีขอความแจงที่ชองแสดงสถานะวา Done uploading. RESET to start the new program. และที่พื้นทีแสดงข ่ อความจะแจงกระบวนการและผลคอมไพล รวมถึงขนาดของ ไฟลผลลัพธที่เกิดขึ้น


    

47

ถามีขอผิดพลาดเกิดขึ้นจะมีขอความแจงในพื้นที่แสดงขอความดานลางของหนาตาง โปรแกรมหลัก

ซึงส ่ วนใหญแลวมักเกิดจากการเลือกพอรตอนุกรมไมถูกตอง การแกไขใหดูในหัวขอ การแกปญหาในกรณีที่อัปโหลดโปรแกรมไมได ในบทที่ 1 (7) หลังจากอัปโหลดโปรแกรมแลว แผงวงจรหลัก IPST-SE จะทํางานทันทีดังรูป


     48

3.3 ตําแหนงการเก็บไฟลสเก็ตชของ Wiring ผูพั ฒนาโปรแกรมบันทึกไฟลสเก็ตชไวทีใดในพื ่ นที ้ จั่ ดเก็บแฟมขอมูลของคอมพิวเตอรก็ได แต เพืออํ ่ านวยความสะดวกและจดจํางาย Wiring IDE จึงกําหนดคาตังต ้ น (default) ของตําแหนงจัดเก็บ โฟลเดอรของไฟลสเก็ตชที่พัฒนาขึนไว ้ ที่ C:\Documents and Settings\Admin (หรือชื่อผูใช) \My Documents\Wiring สามารถตรวจสอบรวมถึงกําหนดตําแหนงใหมได โดยไปทีเมนู ่ File > Preference จะปรากฏหนาตาง Preference ขึนมาดั ้ งรูป หากตองการเปลี่ยนแปลงตําแหนงโฟลเดอรที่จัด เก็บไฟลสเก็ตชทีช่ อง Sketchbook location โดยใชเมาสคลิกทีปุ่ มคนหาทางดานขวามือ หรือจะพิมพ ตําแหนงลงไปในชอง Sketchbook location โดยตรงก็ได จากนั้นคลิกปุม OK เพื่อตอบตกลงและ ยืนยันการเปลียนแปลง ่

สวนพารามิเตอรหรือขอกําหนดอืนๆ ่ แนะนําใหใชตามคาทีกํ่ าหนดมา ทังนี ้ เพื ้ อลดขั ่ นตอนการ ้ พัฒนาโปรแกรมและความผิดพลาดทีอาจเกิ ่ ดขึ้นไดสําหรับนักพัฒนาโปรแกรมมือใหมหรือผูเริ่มตน


    

49

3.4 การเปดไฟลสเก็ตชตัวอยาง เพื่ออํานวยความสะดวกและลดการผิดพลาดในการพัฒนาโปรแกรมสําหรับผูเริ่มตนใชงาน Wiring ผูเขียนจึงไดเตรียมไฟลสเก็ตชตัวอยางไวเปนจํานวนมาก ซึ่งรวมถึงไฟลสเก็ตชตัวอยางของ การทดลองทั้งหมดในหนังสือเลมนี้ และถาหากติดตั้งโปรแกรมจากแผนซีดีรอมไฟลสเก็ตชตัวอยาง จะไดรับการติดตั้งมาพรอมกันดวย การเป ดไฟลสเก็ตช ตัวอย างทํ าไดง ายมาก โดยไปที่เมนู Help > Example > IPST-SE จะเห็นชื่อไฟลสเก็ตชใหเลือกเปดใชงานไดตามตองการ

หรือเลือกเปดผานทางคําสั่ง Open ซึ่งจะปรากฏหนาตาง Explorer ขึ้นมาเพื่อใหคนหาไฟล ใหเลือกไปที่ C:/Wiring/Examples/IPST-SE จะพบโฟลเดอรที่ใชเก็บไฟลสเก็ตชสําหรับใชงานกับแผง วงจร IPST-SE เมื่อเลือกเปดโฟลเดอรที่ตองการ จะพบไฟล .pde ซึงก็ ่ คือไฟลสเก็ตชที่ใชงานกับ Wiring IDE จากนั้นจะทําการแกไข, คอมไฟล รวมทั้งอัปโหลดโปรแกรมไดตามตองการ


     50

3.5 ขอกําหนดในการแกไขและบันทึกไฟลสเก็ตช ในกรณีที่ตองการแกไขไฟลสเก็ตชเดิม ตองเปดไฟลสเก็ตชนั้นๆ ขึนมา ้ ทําการแกไขโคด โปรแกรม ตรวจสอบไวยกรณดวยการคอมไพล เมื่อเรียบรอยแลว มีทางเลือกในการบันทึกไฟล 2 ทางคือ 1. บันทึกในชื่อเดิม ใหใชคําสั่ง Save 2. บันทึกในชื่อใหมดวยคําสั่ง Save As แตไมควรบันทึกทับไฟลสเก็ตชเดิมที่ไมไดถูก เปดขึ้นมา เพราะจะทําใหการเชื่อมโยงไฟลสับสน และทําใหเกิดความผิดพลาดในการเปดใชงานครั้ง ตอไปได ถาหากมีความตองการบันทึกทับไฟลเก็ตชเดิมทีไม ่ ไดถูกเปดขึนมา ้ จะตองทําการลบโฟลเดอร ของไฟลสเก็ตชนั้นออกไปเสียกอน


    

51



   หลังจากการแนะนําขั้นตอนแนวทางการพัฒนาโปรแกรมภาษา C/C++ ดวยซอฟตแวร Wiring1.0 ไปแลวในบทที่ 3 เพื่อใหการเรียนรูเปนไปอยางตอเนือง ่ ในบทนีจึ้ งนําเสนอตัวอยางการ ทดสอบการทํางานในสวนตางๆ ที่สําคัญของแผงวงจร IPST-SE อันเปนแผงวงจรควบคุมหลักของ ชุดกลองสมองกล IPST-MicroBOX (SE) เพื่อเปนแนวทางในการตอยอดสูการพั  ฒนาโปรแกรมเพื่อ สรางโครงงานและหุนยนตอัตโนมัติอยางเต็มรูปแบบตอไป หัวขอกิจกรรมสําหรับทดสอบเบื้องตนมีทั้งสิ้น 4 กิจกรรม ประกอบดวย กิจกรรมที่ 1 แสดงผลขอความที่หนาจอภาพกราฟก LCD (มีกิจกรรมยอย 5 กิจกรรม) กิจกรรมที่ 2 อานคาจากปุม KNOB และสวิตช OK บนแผงวงจร IPST-SE กิจกรรมที่ 3 ขับอุปกรณเอาตพุตอยางงาย กิจกรรมที่ 4 ขับเสียงออกลําโพงเปยโซ ขันตอนการพั ้ ฒนาโปรแกรมในแตละกิจกรรมจะเหมือนกัน นันคื ่ อ เปดซอฟตแวร Wiring1.0 ทําการเขียนโปรแกรม คอมไพล และอัปโหลดลงบนแผงวงจร IPST-SE ของชุดกลองสมองกล IPSTMicroBOX (SE) จากนั้นทดสอบการทํางาน

้ เป ่ ดสวิตชจายไฟแกแผงวงจร IPST-SE ตองรอ สิงสํ ่ าคัญทีต่ องเนนยํ้าคือ ทุกครังที ใหตัวควบคุมพรอมทํางานเสียกอน ซึงใช ่ เวลาประมาณ 3 ถึง 5 วินาทีหลังจากเปด ไฟเลี้ยงหรือหลังจากการกดสวิตช RESET หากมีการอัปโหลดกอนที่แผงวงจร IPST-SE จะ พรอมทํางาน อาจทําใหเกิดความผิดพลาดในการเชื่อมตอ หรือโคดทีอั่ ปโหลดลงไปไมทํางานตามที่ ควรจะเปน แตจะไมสงผลจนทําใหแผงวงจรเกิดความเสียหาย สิงที ่ ่เกิดขึ้นมีเพียงแผงวงจรไมทํางาน หรือทํางานไมถูกตองเทานัน้


     52

     (A1.1.1) เปดซอฟตแวร Wiring 1.0 SE พิมพโปรแกรมที่ A1-1 แลวบันทึกไฟล (A1.1.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 2

 3

  30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000

ON

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

 

USB

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0

4

KNOB

8 SCL 9 SDA

1

SERVO

(A1.1.3) เลือกชนิดหรือรุนของฮารดแวรใหถูกตอง โดยเลือกที่เมนู Tools > Board > IPST-SE > ATmega644P @16MHz ดังรูป


    

53

#include <ipst.h> // ผนวกไลบรารีหลัก void setup() { glcd(1,0,"Hello World"); // แสดงขอความบนจอแสดงผล } void loop() {} คําอธิบายโปรแกรม โปรแกรมนีจะทํ ้ างานโดยสงขอความ Hello World ออกไปแสดงผลทีบรรทั ่ ด 1 คอลัมน 0 ของจอ แสดงผล จะทํางานเพียงครังเดี ้ ยว จึงเขียนโปรแกรมไวทีตํ่ าแหนงของ void setup() เทานัน้

โปรแกรมที่ A1-1 ไฟล HelloGLCD.pde สําหรับทดสอบการแสดงผลของแผงวงจร IPST-SE (A1.1.4) เลือกพอรตสําหรับติดตอกับแผงวงจร IPST-SE โดยเลือกที่เมนู Tools > Serial Port ดังรูป (ตําแหนงของพอรตที่ใชเชื่อมตออาจแตกตางกันในคอมพิวเตอรแตละเครื่อง)

(A1.1.5) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware

หรือเลือกทีเมนู ่

ทีหน ่ าจอแสดงผลกราฟก LCD ของแผงวงจร IPST-SE แสดงขอความ Hello World 30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

Hel lo 0Wo rld00 0000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0

ON

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB


     54

    จอแสดงผลของแผงวงจร IPST-SE มีขนาด 128 x 160 พิกเซล แสดงตัวอักษรความละเอียด 5 x 7 จุด จํานวน 21 ตัวอักษร 16 บรรทัด ผูใชงานสามารถระบุตําแหนงบรรทัดและตําแหนงคอลัมน ทีต่ องการแสดงผลได โดยกําหนดผานคําสั่ง glcd ซึงมี ่ อยูในไฟล  ไลบรารี ipst.h นอกจากนันคํ ้ าสั่ง glcd ยังมีอักขระพิเศษเพื่อระบุตําแหนงแทนการใชคาตัวเลข ดังแสดงใน โปรแกรมที่ A1-2 #include <ipst.h> // ผนวกไฟลไลบรารีหลัก int i,j; void setup() { glcdFillScreen(GLCD_WHITE); // กําหนดใหสีของพืนหลั ้ งของจอแสดงผลเปนสีขาว setTextColor(GLCD_BLACK); // กําหนดสีตัวอักษรเปนสีดํา setTextBackgroundColor(GLCD_WHITE); // กําหนดสีพืนหลั ้ งของตัวอักษรเปนสีขาว for (i=0;i<16;i++) // วนลูป 16 รอบเพือแสดงข ่ อความ { glcd(i,i,"Row %d ",i); // แสดงขอความที่จอแสดงผล } } void loop() {} คําอธิบายโปรแกรม ในโปรแกรมนีเพิ ้ มเติ ่ มคําสังสํ ่ าหรับการใชงานจอแสดงผลอีก 3 คําสังคื ่ อ 1. glcdFillScreen เปนคําสังกํ ่ าหนดสีพืนหลั ้ งของจอแสดงผล 2. setTextColor สําหรับกําหนดสีใหแกตัวอักษร 3. setTextBackground สําหรับกําหนดสีพืนหลั ้ งของตัวอักษร เมื่อตังค ้ าของจอแสดงผลแลว จึงทําการสงขอความ Row ตามดวยหมายเลขบรรทัดซึงมาจากการ ่ เพิมค ่ าของตัวแปร i และมีการเลือนตํ ่ าแหนงตามคาของ i ดวย ดังนันที ้ บรรทั ่ ดแรก ขอความ Row0 ถูกแสดง ทีคอลั ่ มน 0 ทีบรรทั ่ ด 2 แสดงขอความ Row 1 ทีคอลั ่ มน 1 ไลไปตามลําดับจนถึงบรรทัด 15 (บรรทัดที่ 16) จะแสดงเปน Row 15 ทีคอลั ่ มน 15

โปรแกรมที่ A1-2 ไฟล GLCDmultipleline.pde สําหรับทดสอบการแสดงผลของแผงวงจร IPST-SE


    

55

(A1.2.1) เปดซอฟตแวร Wiring1.0 SE พิมพโปรแกรมที่ A1-2 แลวบันทึกไฟล (A1.2.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร (A1.2.3) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware

หรือเลือกทีเมนู ่

ทีหน ่ าจอแสดงผลกราฟก LCD ของแผงวงจร IPST-SE แสดงขอความ Row 0 ถึง Row 15 เรียงไปบรรทัดละขอความ 30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

Rowl00 Wo rld0000000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015

ON

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB


     56

     ขนาดตัวอักษรปกติทีแสดงบนจอแสดงผลของแผงวงจร ่ IPST-SE เมื่อเริมต ่ นทํางานเปนขนาด เล็กสุด ใชจํานวนจุดตอตัวอักษรคือ 6 x 10 จุด (อักษรจริงมีขนาด 5 x 7 จุด) ถาตองการปรับขนาด ตัวอักษรใหใหญขึ้น จะมีคําสั่ง setTextSize ไวสําหรับปรับขนาด โดยคาทีกํ่ าหนดจะเปนจํานวนเทา ของตัวอักษรปกติ เชน setTextSize(2) หมายถึงขนาดตัวอักษรใหญขึ้นเปน 2 เทา ใช 12 x 20 พิกเซลตอ 1 ตัวอักษร setTextSize(3) หมายถึงขนาดตัวอักษรใหญขึ้นเปน 3 เทา ใช 18 x 30 พิกเซลตอ 1 ตัวอักษร เมื่อปรับขนาดตัวอักษรมีขนาดใหญขึ้น จํานวนตัวอักษรตอบรรทัดก็ตองลดลง จากเดิม 21 ตัวอักษร 16 บรรทัด เมื่อขนาดของตัวอักษรเพิ่มขึ้นเปนสองเทา ก็จะทําใหแสดงได 10 ตัวอักษร 8 บรรทัดแทน ดังนั้นเมื่อเขียนโปรแกรมจะตองคํานึงถึงคาเหลานีด้ วย #include <ipst.h> int x,m; void setup() { //glcdSetColorWordRGB(); setTextColor(GLCD_RED); } void loop() { for (x=1;x<6;x++) { setTextSize(x); for(m=0;m<4;m++) { glcdClear(); glcdMode(m); glcd(0,0,"%dX",x); glcd(1,0,"M=%d",m); sleep(500); } } }

// หากสีของการแสดงผลผิด ใหเปดใชฟงกชันนี ่ ้ // กําหนดสีตัวอักษรเปนสีแดง

// กําหนดขนาดตัวอักษร // เคลียรหนาจอ // กําหนดทิศทาง // แสดงขนาดตัวอักษร // แสดงโหมดทิศทาง

โปรแกรมที่ A1-3 ไฟล GLCDtextFlip.pde สําหรับทดสอบการเพิ่มขนาดตัวอักษรในการแสดงผล และการเปลี่ยนทิศทางของการแสดงผลของแผงวงจร IPST-SE


    

57

นอกจากขนาดตัวอักษรแลว ยังกําหนดทิศทางการแสดงผลของจอแสดงผลได โดยใชคําสั่ง glcdMode() โดยมีคาตั้งตนคือ โหมด 0 (glcdMode(0)) นั่นคือ แสดงผลในแนวตั้ง สําหรับอีก 3 โหมดคือ โหมด 1, 2 และ 3 ใชปรับใหการแสดงผลหมถนไปโหมดละ 90 องศา นันคื ่ อ โหมด 1 หมุน ไป 90 องศา, โหมด 2 หมุนไป 180 องศา และโหมด 3 หมุนไป 270 องศา (A1.3.1) เปดซอฟตแวร Wiring1.0 SE พิมพโปรแกรมที่ A1-3 แลวบันทึกไฟล (A1.3.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร (A1.3.3) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware

หรือเลือกทีเมนู ่

ทีหน ่ าจอแสดงผลของแผงวงจร IPST-SE แสดงขอความแจงขนาดของตัวอักษรและโหมดการ แสดงผลในทิศทางทีต่ างกัน เริมจากมุ ่ มบนซาย, มุมบนขวา, มุมลางขวา และมุมลางซาย โดยรอบการ แสดงผลจะเริมจาก ่ 1X, 2X, 3X , 4X และ 5X แตละรอบมีการแสดงผล 4 ทิศทาง โดยดูจากคา M M = 0 จอแสดงขอความแนวตัง้ ตัวอักษรขนาด 3 เทา

M = 1 หมุนการแสดงผลไป 90 องศาทางขวา ตัวอักษรขนาด 4 เทา

M = 2 หมุนการการแสดงผลไป 180 องศา M = 3 หมุนการแสดงผลไป 270 องศา จะไดภาพทีกลั ่ บหัวเมื่อเทียบกับ M = 0 ตัวอักษรขนาด 5 เทา ตัวอักษรขนาด 4 เทา


     58

     ฟงกชัน่ glcd เปนฟงกชันหลั ่ กในการติดตอกับจอแสดงผลกราฟก LCD นอกจากมีคําสังแสดง ่ ขอความแลว ยังมีคําสั่งในการวาดลายเสนกราฟกอีกหลายคําสั่ง ประกอบดวย glcdRect(int x1,int y1,int width,int height,uint color)

เปนคําสั่งสราง

รูปสีเหลี ่ ่ยม glcdFillRect(int x1,int y1,int width,int height,uint color)

เปนคําสัง่

สรางพืนสี ้ เหลี ่ ยม ่ glcdLine(int x1, int y1, int x2, int y2,uint color) glcdCircle(int x, int y, int radius,uint color)

เปนคําสั่งลากเสน

เปนคําสั่งวาดเสนวงกลม

glcdFillCircle(int x, int y, int radius,uint color)

เปนคําสั่งสรางพื้นที่

วงกลม glcdClear(uint color)

เปนการเคลียรหนาจอแสดงผล

โดยทดสอบเขียนโปรแกรมไดดังโปรแกรมที่ A1-4 แลวอัปโหลดเพื่อทดสอบการทํางานไปยัง แผงวงจร IPST-SE จะไดผลดังรูป

ถาหากสีของการแสดงผลไมถูกตอง อาจเกิดจากรุนของจอแสดงผลเนืองจากจอภาพแบบนี ่ ้ มี 2 รุน มีการเรียงขอมูลทีสร ่ างสีแตกตางกันเล็กนอย ทางแกไขคือ นําเครื่องหมาย // ทีหน ่ าฟงกชัน่ glcdSetColorWordRGB(); ออก เพื่อเปลี่ยนรูปแบบการเรียงขอมูลสี


    

59

#include <ipst.h> // ผนวกไฟลไลบรารีหลัก int i,j; void setup() { //glcdSetColorWordRGB(); // หากสีของการแสดงผลผิด ใหเปดใชฟงกชันนี ่ ้ } void loop() { glcdClear; // เคลียรหนาจอและพืนหลั ้ งเปนสีดํา sleep(300); for (i=0;i<160;i+=4) { glcdLine(0,0,128,i,GLCD_WHITE); // วาดเสนสีขาวจากพิกัด 0,0 ไปยังจุดที่กําหนด } for (i=0;i<128;i+=4) { glcdLine(0,0,i,160,GLCD_RED); // วาดเสนสีแดงจากพิกัด 0,0 ไปยังจุดที่กําหนด } sleep(2000); glcdRect(32,40,64,80,GLCD_BLUE); // วาดเสนกรอบสีเหลี ่ ยมสี ่ นํ้าเงิน sleep(300); glcdFillCircle(32,40,31,GLCD_GREEN); // สรางวงกลมพืนสี ้ เขียว glcdFillCircle(96,40,31,GLCD_YELLOW); // สรางวงกลมพืนสี ้ เหลือง glcdFillCircle(32,120,31,GLCD_MAGENTA); // สรางวงกลมพืนสี ้ บานเย็น glcdFillCircle(96,120,31,GLCD_SKY); // สรางวงกลมพืนสี ้ ฟา sleep(1000); glcdCircle(64,40,31,GLCD_GREEN); // วาดเสนรอบวงกลมสีเขียว glcdCircle(32,80,31,GLCD_BLUE); // วาดเสนรอบวงกลมสีนํ้าเงิน glcdCircle(64,120,31,GLCD_YELLOW); // วาดเสนรอบวงกลมสีเหลือง glcdCircle(96,80,31,GLCD_SKY); // วาดเสนรอบวงกลมเสนสีฟา sleep(1000); glcdFillRect(0,0,128,160,GLCD_YELLOW); // สรางรูปสี่เหลียมสี ่ เหลือง sleep(1000); }

โปรแกรมที่ A1-4 ไฟล GLCDsimpleGraphic.pde สําหรับทดสอบการแสดงผลของแผงวงจร IPST-SE


     60

    นอกจากวงกลมและสี่เหลี่ยมแลว เสนโคงก็เปนสวนประกอบสําคัญในการสรางภาพกราฟก ในชุดคําสั่งเกียวกั ่ บการแสดงผลจอภาพแบบกราฟกสีของแผงวงจร IPST-SE ยังมีคําสั่ง glcdArc() สําหรับสรางเสนโคง โดยมีพารามิเตอรหรือตัวแปรทีต่ องกําหนดอยูพอสมควร  ดูรายละเอียดเพิ่มเติม ในบทที่ 6 เกี่ยวกับการใชงานจอแสดงผลแบบกราฟก LCD สีตัวนี้ (A1.5.1) เปดซอฟตแวร Wiring1.0 SE พิมพโปรแกรมที่ A1-5 แลวบันทึกไฟล (A1.5.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร #include <ipst.h> int i; // ฟงกชันสร ่ างรูปหนายิ้ม void face() { glcdFillCircle(64,70,50,GLCD_WHITE); glcdArc(48,60,16,30,150,GLCD_RED); glcdCircle(48,55,5,GLCD_BLUE); glcdCircle(80,55,5,GLCD_BLUE); glcdArc(80,60,16,30,150,GLCD_RED); glcdFillCircle(64,70,7,GLCD_YELLOW); glcdArc(64,80,30,220,320,GLCD_RED); glcdArc(64,80,29,220,320,GLCD_RED); } void setup() { //glcdSetColorWordRGB(); // หากสีของการแสดงผลผิด ใหเปดใชฟงกชันนี ่ ้ } void loop() { for(i=0;i<4;i++) { glcdClear(); glcdMode(i); // สังหมุ ่ นการแสดงผล face(); sleep(1000); } }

โปรแกรมที่ A1-5 ไฟล GLCDarcTest.pde สําหรับทดสอบการวาดเสนโคงของแผงวงจร IPST-SE


    

(A1.5.3) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware

61

หรือเลือกทีเมนู ่

(A1.5.4) รันโปรแกรม ดูผลการทํางานที่จอแสดงผลของแผงวงจร IPST-SE ทีจอแสดงผลแสดงเป ่ นรูปการตูนหนายิมนาน ้ 1 วินาที แลวหมุนไปครั้งละ 90 องศา แลววน กลับมาทีหน ่ าเริมต ่ น จะวนแสดงผลไปตลอดเวลา


     62

   ในระบบควบคุมพืนฐานจะต ้ องมีการปรับตังค ้ า มีเมนู มีสวิตชในการสังงานต ่ างๆ บนแผงวงจร IPST-SE ก็มีสวนติดตตอกับผูใชงานดวยเชนกัน ประกอบดวยปุม KNOB สําหรับปรับเลือกรายการ และสวิตช OK กับ SW1 สําหรับยืนยันการเขาสูรายการทางเลือกนั้นๆ 30 A6 27 A3

USB D

28 A4 25 A1 OK

Hello 0Wo rld00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

ON

UART1

16

18

17

19

+5

20

RESET

LOW

1

2

2 RxD1 3 TxD1

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2

KNOB

8 SCL 9 SDA

24 A0

   

SERVO

เขียนโปรแกรมที่ A2-1 แลวบันทึกไฟลชือ่ KnobSwitchTest.pde จากนั้นทําการคอมไพลและ อัปโหลดไปยังแผงวงจร IPST-SE แลวรันโปรแกรมทดสอบการทํางาน เมื่อโปรแกรมเริ่มทํางาน ทีหน ่ าจอแสดงผลของแผงวงจร IPST-SE แสดงขอความ Press OK

(ขนาดตัวอักษรใหญขนาด 2x)

ใหกดสวิตช OK เพื่อทํางานตอ หนาจอแสดงรูปวงกลมสีเหลือง 1 วินาที จากนันแสดงข ้ อความ Knob value

(ขนาดตัวอักษรใหญขนาด 2x)

XXXX (ขนาดตัวอักษรใหญขึ้นเปนขนาด 3x) โดยที่ xxxx มีคาไดตั้งแต 94 ถึง 1023 ทดลองปรับปุม KNOB บนแผงวงจร IPST-SE คาของ Knob ทีจอแสดงผลจะต ่ องเปลียนแปลงตามการปรั ่ บที่ปุม KNOB


    

63

จากนันกดสวิ ้ ตช OK แลวปลอย หนาจอแสดงรูปวงกลมสีเขียว 1 วินาที แลวกลับไปแสดงขอความและคาของ KNOB ทดลองกดสวิตช SW1 แลวปลอย หนาจอแสดงรูปวงกลมสีแดง 1 วินาที แลวกลับไปแสดงขอความและคาของ KNOB #include <ipst.h> void setup() { //glcdSetColorWordRGB(); glcdClear(); setTextSize(2); glcd(1,1,"Press OK"); sw_OK_press(); glcdClear(); glcdFillCircle(64,70,50,GLCD_YELLOW); delay(1000); glcdClear(); } void loop() { if (sw_OK()) { glcdClear(); glcdFillCircle(64,70,50,GLCD_GREEN); delay(1000); glcdClear(); } if(sw1()) { glcdClear(); glcdFillCircle(64,70,50,GLCD_RED); delay(1000); glcdClear(); } glcd(1,0,"Knob value"); setTextSize(3); glcd(2,2,"%d ",knob()); setTextSize(2); }

// ผนวกไฟลไลบรารีหลัก // หากสีของการแสดงผลผิด ใหใชฟงกชันนี ่ ้ // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // วาดวงกลมสีเหลือง // แสดงผลวงกลมสีเหลือง 1 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // ตรวจสอบการกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // วาดวงกลมสีเขียว // แสดงผลวงกลมสีเขียว 1 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // ตรวจสอบสวิตช SW1 วามีการกดหรือไม // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // วาดวงกลมสีแดง // แสดงผลวงกลมสีแดง 1 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // แสดงขอความที่จอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากการปรับปุม KNOB ที่หนาจอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

โปรแกรมที่ A2-1 ไฟล KnobSwitchTest.pde สําหรับทดสอบอานคาจากปุม KNOB, สวิตช OK และ SW1


     64

   ในไฟลไลบรารี ipst.h มีคําสั่ง out(int num,int _dat) ซึงช ่ วยใหสามารถสงลอจิก “0” หรือ “1” ออกไปยังขาพอรตที่ตองการได ทําใหนําแผงวงจร IPST-SE ไปใชขับอุปกรณเอาตพุตพื้นฐานได งายขึน้ ยกตัวอยางงายที่สุดคือ ไดโอดเปลงแสงหรือ LED ในกิจกรรมนีจึ้ งนําแผงวงจร ZX-LED อันเปนแผงวงจร LED แสดงผลแบบเดี่ยวที่จะติดสวาง เมื่อไดรับลอจิก “1” และดับลงเมื่อไดรับลอจิก “0” มาตอกับแผงวงจร IPST-SE เพื่อทดลองใชงาน (A3.1) นํา ZX-LED ชุดที่ 1 ตอเขากับจุดตอพอรต 17 และชุดที่ 2 ตอกับจุดตอพอรต 18 30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

Hello0Wo rld00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

ON

UART1

16

18

17

19

+5

20

RESET

1

LOW

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB

SERVO

2 RxD1 3 TxD1

ZX-LED LED 510 KRC102 + S

 ZX-LED LED 510 KRC102 S

+




    

#include <ipst.h> void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); } void loop() { out(17,1); out(18,0); sleep(400); out(17,0); out(18,1); sleep(400); }

65

// ผนวกไฟลไลบรารีหลัก // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความออกหนาจอ GLCD // วนรอการกดสวิตช OK

// ทําให LED ที่ตออยูกั บพอรต 17 ติดสวาง // ทําให LED ที่ตออยูกั บพอรต 18 ดับ // ทําให LED ที่ตออยูกั บพอรต 17 ดับ // ทําให LED ที่ตออยูกั บพอรต 18 ติดสวาง

โปรแกรมที่ A3-1 ไฟล LEDTest.ino สําหรับทดสอบการขับอุปกรณเอาตพุตอยางงาย (A3..2) เขียนโปรแกรมที่ A3-1 บันทึกไฟลชือ่ LEDTest.pde (A3.3) เปดสวิตชจายไฟแกแผงวงจร IPST-SE จากนันทํ ้ าการคอมไพลและอัปโหลดโปรแกรมไปยัง แผงวงจร IPST-SE (A3.4) รันโปรแกรม สังเกตการทํางานของ ZX-LED เมื่อรันโปรแกรม ทีหน ่ าจอแสดงผลของแผงวงจร IPST-SE แสดงขอความ Press OK

ใหกดสวิตช OK เพื่อเริ่มการทํางาน จะเห็น LED บนแผงวงจร ZX-LED ทังสองชุ ้ ดติดและ ดับสลับกันไปอยางตอเนือง ่


     66

 ในชุดกลองสมองกล IPST-MicfoBOX (SE) มีแผงวงจรขับเสียงโดยใชลําโพง เปยโซ (ZX-SPEAKER) โดยตัวลําโพงเปยโซขนาดเล็กนีตอบสนองความถี ้ ่เสียงใน ชวงความถีประมาณ ่ 300 ถึง 3,000Hz ในการเขียนโปรแกรมเพื่อสั่งงานแผงวงจร IPST-SE ใหขับเสียงออกทางแผงวงจร ZX-SPEAKER นีทํ้ าไดโดยใชคําสั่ง beep() และ sound() ในโปรแกรมที่ A4-1 เปนตัวอยางการใชคําสัง่ beep() เพื่อขับเสียง “ติ้ด” ความถีเดี ่ ยวออกทาง ลําโพงทุกๆ 1 วินาที สวนในโปรแกรมที่ A4-2 เปนตัวอยางการใชคําสั่ง sound() เพื่อขับเสียงที่มีความถี่ตามที่ กําหนดออกทางลําโพงเปยโซ ตามเวลาทีกํ่ าหนดในโปรแกรม (A4.1) นําแผงวงจรขับเสียง ZX-SPEAKER ตอเขากับจุดตอพอรต 19 ของแผงวงจร IPST-SE 30 A6 27 A3

D

ON

28 A4 25 A1

UART1

16

18

17

19

+5

LOW

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2 OK

Hel lo 0Wo rld00 00000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000

SPEAKER

RESET

2 RxD1 3 TxD1

SERVO

+

+ S

20

S

24 A0 KNOB

8 SCL 9 SDA

USB

O


    

#include <ipst.h> void setup() {} void loop() { beep(19); sleep(1000); }

67

// ผนวกไฟลไลบรารีหลัก

// ขับเสียง “ติด” ้ ออกลําโพงผานทางจุดตอพอรต 19

โปรแกรมที่ A4-1 ไฟล BeepTest.ino สําหรับทดสอบการขับเสียงออกลําโพงของแผงวงจร IPST-SE #include <ipst.h> void setup() {} void loop() { sound(19,500,500); sound(19,2500,500); }

// ผนวกไฟลไลบรารีหลัก

// ขับเสียงความถี่ 500Hz นาน 0.5 วินาที ออกลําโพงผานทางจุดตอพอรต 19 // ขับเสียงความถี่ 2500Hz นาน 0.5 วินาที ออกลําโพงผานทางจุดตอพอรต 19

โปรแกรมที่ A4-2 ไฟล SoundTest.ino สําหรับทดสอบการขับเสียงออกลําโพงของแผงวงจร IPST-SE แบบกําหนดความถี่และเวลาได (A4..2) เขียนโปรแกรมที่ A4-1 บันทึกไฟลชือ่ BeepTest.pde (A4.3) เปดสวิตชจายไฟแกแผงวงจร IPST-SE จากนันทํ ้ าการคอมไพลและอัปโหลดโปรแกรมไปยัง แผงวงจร IPST-SE (A4.4) รันโปรแกรม จะไดยินเสียง “ติ้ด” ดังเปนจังหวะในทุกๆ 1 วินาทีจากลําโพงของแผงวงจร ZX-SPEAKER (A4.5) เขียนโปรแกรมที่ A4-2 บันทึกไฟลชือ่ SoundTest.pde แลวอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE เพื่อทดสอบการทํางานอีกครั้ง จะไดยินสัญญาณเสียง 2 ความถีดั่ งสลับกันออกจากลําโพงของแผงวงจร ZX-SPEAKER


     68


69

    



    การพัฒนาโปรแกรมภาษา C/C++ สําหรับชุดกลองสมองกล IPST-MicroBOX (SE) ดําเนินการ ภายใตการสนับสนุนของไฟลไลบรารี ipst.h ทั้งนีเพื ้ ่อชวยลดขั้นตอนและความซับซอนในการเขียน โปรแกรมเพื่อควบคุมสวนตางๆ ของฮารดแวรลง โครงสรางของไฟลไลบรารี ipst.h แสดงดังรูป 



  

 

  

  TB6612FNG

 

                                                                      

M

M

   

 


     70

5.1 ไฟลไลบรารี ipst.h ในการเรียกใชงานชุดคําสั่งยอยตางๆ เพื่อการพัฒนาโปรแกรมควบคุมสําหรับชุดกลองสมอง กล IPST-MicroBOX (SE) ผูพั ฒนาตองผนวกไฟลไลบรารีหลัก ipst.h ไวในตอนตนของโปรแกรมดวย คําสั่ง #include <ipst.h>

เพือประกาศให ่ ใหตัวแปลภาษา C หรือคอมไพเลอรรูจักชุดคําสังย ่ อยทีกํ่ าลังจะถูกเรียกใชงาน จากไฟลไลบรารี ipst.h ไลบรารียอยของไฟลไลบรารี ipst.h ประกอบดวย บรรจุฟงกชั่ นและคําสั่งสําหรับแสดงผลขอความ, ตัวเลข และสราง ภาพกราฟกสีที่จอแสดงผลแบบกราฟก LCD สีบนแผงวงจร IPST-SE (ยังไมรองรับการทํางานกับไฟล รูปภาพ) ฟงกชั่นนี้มีการกําหนดขาใชงานที่เฉพาะเจาะจง (มีรายละเอียดอธิบายในบทที่ 6)  ipst_sleep.h บรรจุฟงกชั่นและคําสั่งสําหรับการหนวงเวลา  ipst_in_out.h บรรจุฟงกชั่นและคําสั่งสําหรับอานคาอินพุตดิจิตอลและสงคาออกทาง ขาพอรตเอาตพุตดิจิตอล  ipst_analog.h บรรจุฟงกชั่ นและคําสั่งอานคาจากอินพุ ตอะนาลอกชอง A0 ถึง A6 ที่ตอกับตัวตรวจจับและปุม KNOB กับสวิตช OK  ipst_sound.h บรรจุฟงกชั่นและคําสั่งสําหรับสรางเสียงเพื่อขับออกลําโพง ่ าสังสํ ่ าหรับขับมอเตอรไฟตรง 2 ชอง ตองทํางานรวม  ipst_motor.h บรรจุฟงกชันและคํ กับวงจรขับมอเตอรที่ใชไอซี TB6612 และใชไฟเลียงอี ้ กสวนหนึงสํ ่ าหรับเลี้ยงมอเตอรไฟตรง  ipst_servoMotor.h บรรจุฟงกชันและคํ ่ าสังสํ ่ าหรับขับเซอรโวมอเตอร ตองทํางานรวม กับเซอร โวมอเตอร และตองใชไฟเลี้ยง +6V อีกสวนหนึ่งสําหรับเซอรโวมอเตอร ฟงกชั่นนี้มีการ กําหนดขาใชงานที่เฉพาะเจาะจง ่ าสังสํ ่ าหรับสือสารข ่ อมูลอนุกรมผานทางพอรต USB  ipst_serial.h บรรจุฟงกชันและคํ และผานทางจุดตอพอรต TxD1 และ RxD1 ของแผงวงจร IPST-SE  ipst_led8.h บรรจุฟงกชันและคํ ่ าสังสํ ่ าหรับแสดงผล LED 8 ดวงบนแผงวงจร ZX-LED8 โดยสั่งให LED ติดทีละดวง หรือหลายดวงก็ได  ipst_glcd.h


    

71

5.2 ไฟลไลบรารีของ Wiring1.0 Wiring1.0 มีไลบรารีจํานวนมาก เพื่อชวยใหการเขียนโปรแกรมเพื่อติดตอและใชงานอุปกรณ ฟงกชั่นพิเศษ ตลอดจนตัวตรวจจับแบบตางๆ ทําไดสะดวกและงายขึน้ สรุปไดดังนี้ 1. EEPROM.h ไลบรารีสําหรับการจัดการหนวยความจําขอมูลอีอีพรอมภายในไมโคร คอนโทรลเลอร ATmega644P ที่ใชในแผงวงจร IPST-SE 2. LiquidCrystal.h ไลบรารีติดตอกับโมดูล LCD แบบตัวอักษร 3. Encoder.h ไลบรารีสําหรับการใชงานวงจรเขารหัสขันพื ้ นฐาน ้ (ตองการอุปกรณเฉพาะ) 4. Wire.h ไลบรารีสําหรับติดตอกับอุปกรณระบบบัส 2 สายและบัส I2C 5. Matrix.h ไลบรารีสําหรับใชงาน LED ด็อตเมตริกซ (ตองการอุปกรณเฉพาะ) 6. Sprite.h ไลบรารีทําภาพเคลือนไหวบน ่ LED ดอตเมตริกซ (ตองการอุปกรณเฉพาะ) 7. SoftwareSerial.h ไลบรารีสําหรับสื่อสารขอมูลอนุกรมกับอุปกรณภายนอกผานทาง ขาพอรตดิจิตอลปกติ 8. Stepper.h ไลบรารีติดตอกับวงจรขับสเต็ปเปอรมอเตอร (ตองการอุปกรณเฉพาะ) 9. OneWire.h ไลบรารีสําหรับติดตอกับอุปกรณบัสหนึงสาย ่ (เปนไลบรารีเสริม) ในการเรียนรูเพื่อใชงานแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE) จะใชไฟลไลบรารีทั้งแบบมาตรฐานที่มากับซอฟตแวร Wiring 1.0 และไฟลไลบรารี ipst.h รวมกัน เพือช ่ วยใหการพัฒนาโปรแกรมสําหรับการใชงานมีประสิทธิภาพสูงสุด และทําความเขาใจไดงาย ทัง้ นีเพื ้ ่อประโยชนในการตอยอดการเรียนรูของผูใชงานในวงกวาง

5.3 การเรียกใชไลบรารี ipst.h และไลบรารียอย ไฟลไลบรารี ipst.h ประกอบดวยไลบรารีหลายไฟล การเรียกใชงานทําได 2 วิธีคือ 1. เรียกใชทังหมดผ ้ านทาง #include <ipst.h> วิธีนีง้ าย สะดวก และลดโอกาสทีผู่ เขียน โปรแกรมจะลืมผนวกไฟลไลบรารีที่ตองใชงาน 2. เรียกใชเฉพาะไลบรารีที่ตองการ ดวยคําสัง่ #include <ipst_xxxx.h> ตัวอักษร xxxx คือชื่อใดๆ ของไฟลไลบรารีภายในไฟล ipst.h ดูไดจากหัวขอ 5.1 ในบทนี้ วิธีนีมี้ ขอดีคือ ลดขนาด ของไฟลโปรแกรมภาษา C/C++ ลง เนืองจากมี ่ การเรียกใชงานฟงกชั่นหรือชุดคําสั่งเทาที่จําเปน


     72

ในหัวขอตอไปนีเป ้ นการอธิบายถึงขอมูลที่ผูพัฒนาโปรแกรมสําหรับชุดกลองสมองกล IPSTMicroBOX (SE) ควรทราบเกี่ยวกับฟงกชั่นสําคัญทีอยู ่ ในไฟลไลบรารียอยของไลบรารีหลัก ipst.h

5.4 ipst_sleep.h ไฟลไลบรารียอยการหนวงเวลา เปนไฟลไลบรารีบรรจุชุดคําสังเกี ่ ยวกั ่ บการหนวงเวลา กอนเรียกใชงานควรผนวกไฟลไลบรารีไว ในตอนตนของโปรแกรมดวยคําสัง่ #include <ipst_sleep.h> หรือเรียก #include <ipst.h>

5.4.1 sleep และ delay sleep และ delay เปนฟงกชันหน ่ วงเวลาโดยประมาณในหนวยมิลลิวินาที มีรายละเอียดดังนี้ รูปแบบ void sleep(unsigned int ms) void delay(unsigned int ms) พารามิเตอร ms - กําหนดคาเวลาทีต่ องการหนวงในหนวยมิลลิวินาที มีคา 0 ถึง 65,535 ตัวอยางที่ 5-1 sleep(20); delay(1000);

// หนวงเวลาประมาณ 20 มิลลิวินาที // หนวงเวลาประมาณ 1 วินาที

5.4.2 delay_us เปนฟงกชั่นหนวงเวลาโดยประมาณภายในโปรแกรมในหนวยไมโครวินาที รูปแบบ void delay_us(unsigned int us) พารามิเตอร us - กําหนดคาเวลาทีต่ องการหนวงในหนวยไมโครวินาที มีคา 0 ถึง 65,535 ตัวอยางที่ 5-2 delay_us(100); // หนวงเวลาประมาณ 100 ไมโครวินาที


    

73

5.5 ipst_sound.h ไฟลไลบรารีสรางสัญญาณเสียง เปนไฟลไลบรารีบรรจุชุดคําสั่งเกียวกั ่ บการสรางและขับสัญญาณเสียงไปยังลําโพงหรือแผง วงจรลําโพงเปยโซ กอนเรียกใชงานควรผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง #include <ipst_sound.h> หรือเรียก #include <ipst.h>

5.5.1 beep เปนฟงกชันกํ ่ าเนิดเสียง “ติด” ๊ มีความถี่ 500Hz นาน 100 มิลลิวินาที เพือขั ่ บออกลําโพงเปยโซ ตอง ตอวงจรขับลําโพงเปยโซหรือแผงวงจร ZX-SPEAKER เขาทีจุ่ ดตอพอรตใดๆ ของแผงวงจร IPST-SE รูปแบบ void beep(int pin) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 19 หรือ 20) ตัวอยางที่ 5-3 beep(19);

// กําเนิดเสียงความถี่ 500Hz นาน 100 มิลลิวินาทีออกทางจุดตอพอรต 19

5.5.2 sound เปนฟงกชั่นกําเนิดสัญญาณเสียงทีกํ่ าหนดความถี่, ระยะเวลาในการกําเนิดสัญญาณ และจุดตอ พอรตทีเลื ่ อกใชงานได รูปแบบ void sound(int pin, int freq, int time) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 19 หรือ 20) freq - กําหนดความถี่สัญญาณเสียง มีคา 0 ถึง 32,767 time - กําหนดคาเวลาในการกําเนิดสัญญาณเสียงในหนวย 1 มิลลิวินาที มีคา 0 ถึง 32,767 ตัวอยางที่ 5-4 sound(19,1200,500);

// กําเนิดสัญญาณเสียงออกทางจุดตอพอรต 19 // ดวยความถี่ 1200Hz นาน 500 มิลลิวินาที


     74

5.6 ipst_in_out.h ไฟลไลบรารียอยสําหรับติดตอพอรต เปนไลบรารีทีมี่ คําสังเกี ่ ยวกั ่ บการอานและเขียนคากับพอรตของแผงวงจร IPST-SE ในชุดกลอง สมองกล IPST-MicroBOX (SE) กอนเรียกใชงานฟงกชั่นตองผนวกไฟลไลบรารีนีไว ้ ในตอนตนของ โปรแกรมดวยคําสั่ง #include <ipst_in_out.h> หรือเรียก #inclue <atx.h> ฟงกชั่นทีสํ่ าคัญของไฟลไลบรารีนีประกอบด ้ วย

5.6.1 in เปนฟงกชั่นอานคาสถานะลอจิกของพอรตที่กําหนด รูปแบบ char in(x) พารามิเตอร x - กําหนดขาพอรตทีต่ องการอานคา มีคาตั้งแต 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 หมายเหตุ : ไมแนะนําใหใชฟงกชันนี ่ ้กับจุดตอ 19 และ 20 บนแผงวงจร IPST-SE การคืนคา เปน 0 หรือ 1 ตัวอยางที่ 5-5 char x; x = in(16);

// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจาการอานคาระดับสัญญาณ // อานคาดิจิตอลจากพอรตหมายเลข 16 แลวเก็บคาไวที่ตัวแปร x

5.6.2 out เปนฟงกชั่นกําหนดระดับสัญญาณหรือขอมูลดิจิตอลไปยังขาพอรตที่กําหนด รูปแบบ out(char _bit,char _dat) พารามิเตอร _bit - กําหนดขาพอรตทีต่ องการ มีคา 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 _dat - กําหนดขอมูลทีต่ องการสงออก มีคาเปน 0 หรือ 1 ตัวอยางที่ 5-6 out(17,1); out(18,0);

// กําหนดใหขาพอรต 17 เปน “1” // กําหนดใหขาพอรต 18 เปน “0”


    

75

5.5.3 sw1_press เปนฟงกชั่นวนตรวจสอบการกดสวิตช SW1 บนแผงวงจร IPST-SE ตองรอจนกระทั่ง SW1 ถูกปลอยหลังจากมีการกดสวิตช จึงจะผานพนการทํางานของฟงกชั่นนี้ไป รูปแบบ void sw1_press() ตัวอยางที่ 5-7 ............ sw1_press(); ................

// รอจนกระทั่งสวิตช SW1 ถูกกดและปลอย

5.5.4 sw1 เปนฟงกชั่นตรวจสอบการกดสวิตช SW1 ในขณะใดๆ รูปแบบ char sw1() การคืนคา เปน “0” เมือสวิ ่ ตช SW1 ถูกกด และ เปน “1” เมือไม ่ มีการกดสวิตช SW1 ตัวอยางที่ 5-8 char x; x = sw1();

// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจากการอานคาดิจิตอล // อานคาสถานะของสวิตช SW1 มาเก็บไวที่ตัวแปร x

 


     76

5.6 ipst_analog.h ไฟลไลบรารีจัดการสัญญาณอะนาลอก เปนไฟลไลบรารีที่บรรจุชุดคําสั่งที่เกียวกั ่ บการอานคาอินพุตอะนาลอก (A0 ถึง A6 และปุม KNOB) ของแผงวงจร IPST-SE ซึงใช ่ ในการเชือมต ่ อกับตัวตรวจจับทีให ่ ผลการทํางานในรูปแรงดันไฟฟา ในยาน 0 ถึง +5V กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสัง่ #include <ipst_analog.h> หรือ #inclue <ipst.h>

    

5.6.1 analog เปนฟงกชั่นอานคาจากการแปลงสัญญาณอะนาลอกของแผงวงจร IPST-SE ที่จุดตอ A0 ถึง A6 รูปแบบ unsigned int analog(unsigned char channel) พารามิเตอร channel - กําหนดชองอินพุตทีต่ องการ มีคา 0 ถึง 6 ซึงตรงกั ่ บขาพอรต A0 ถึง A6 การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟา 0 ถึง +5V จากชองอินพุตทีกํ่ าหนด มีคา 0 ถึง 1,023


77

    

ตัวอยางที่ 5-9 #include <ipst.h> int val=0; void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(1,0,"AnalogTest"); val = analog(2); setTextSize(3); glcd(2,2,"%d ",val); setTextSize(2); }

// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรสําหรับเก็บคาทีได ่ จากการแปลงสัญญาณแลว

// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

// แสดงขอความที่จอแสดงผล // อานคาของสัญญาณชอง A2 มาเก็บไวที่ตัวแปร val // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากจุดตอ A2 ที่หนาจอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

A

ZX-POTV

POTENTIOMETER

30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1

0000000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

AnalogTest

ON

KNOB

OK SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

543

Potentiometer

DC MOTOR

ZX-POTH

8 SCL 9 SDA

24 A0

A

USB


     78

5.6.2 knob( ) เปนฟงกชันอ ่ านคาขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีขาพอร ่ ต A7 ซึงต ่ อกับตัวตานทาน ปรับคาไดที่ตําแหนง KNOB รูปแบบ unsigned int knob() การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีมาจากการปรั ่ บคาทีปุ่ ม KNOB บนแผงวงจร IPSTSE มีคา 95 ถึง 1,023 ตัวอยางที่ 5-10 #include <ipst.h> void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(1,0," KnobTest"); setTextSize(3); glcd(2,2,"%d ",knob()); setTextSize(2); }

// ผนวกไฟลไลบรารีหลัก

// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

// แสดงขอความที่จอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากปุม KNOB ที่จอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ 8 SCL 9 SDA

30 A6 27 A3 24 A0

D

29 A5 26 A2 28 A4 25 A1

00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

KnobTest

ON

KNOB

OK SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

958

DC MOTOR

 

USB


    

79

5.6.3 sw_OK() เปนฟงกชั่นตรวจสอบสถานะสวิตช OK บนแผงวงจร IPST-SE โดยใหสถานะ “เปนจริง” เมื่อ มีการกดสวิตชและ “เปนเท็จ” เมื่อไมมีการกดสวิตช รูปแบบ unsigned char sw_ok() การคืนคา 1 (เปนจริง) เมือมี ่ การกดสวิตช 0 (เปนเท็จ) เมือไม ่ มีการกดสวิตช หมายเหตุ การกดสวิตช OK มีผลทําใหคาที่อานไดจาก knob() เปน 0 ดวย ตัวอยางที่ 5-11 #include <ipst.h> void setup() { glcdClear(); } void loop() { if (sw_OK()) { glcdFillScreen(GLCD_YELLOW); delay(3000); } glcdClear(); }

// ผนวกไฟลไลบรารีหลัก

// ตรวจสอบการกดสวิตช OK // เปลียนสี ่ พืนเป ้ นสีเหลือง // แสดงสีพืนใหม ้ นาน 3 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา

5.6.4 sw_OK_press() เปนฟงกชั่นวนตรวจสอบการกดสวิตช OK บนแผงวงจร IPST-SE ตองรอจนกระทั่งสวิตชถูก ปลอยหลังจากการกดสวิตชจึงจะผานฟงกชั่นนี้ไปกระทําคําสั่งอื่นๆ ตัวอยางที่ 5-12 ............ sw_OK_press(); .............

// รอจนกระทั่งเกิดกดสวิตช OK


     80

5.7 ipst_led8.h ไฟลไลบรารีขับ LED 8 ดวง เปนไฟลไลบรารีบรรจุชุดคําสังที ่ เกี ่ ยวกั ่ บการติดตอกับแผงวงจร ZX-LED8 เพื่อขับ LED 8 ดวง ใหแสดงผลตามตองการ กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสัง่ #include <ipst_led8.h> หรือ #inclue <ipst.h>

5.7.1 การเชือมต ่ อทางฮารดแวร ไฟลไลบรารีนีใช ้ งานกับจุดตอพอรตดิจิตอลทั้งหมดของแผงวงจร IPST-SE โดยใชเพียง 1 จุดตอพอรตในการติดตอกับแผงวงจร ZX-LED8 ดังในรูปที่ 5-1  7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

Serial LED-8 UART communication 9600 bps. Baud

+5V RxD GND

LED8

      

Secondary Education

30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

Rowl00 Wo rld00 00000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015

ON

UART1



16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

 

รูปที่ 5-1 การเชือมต ่ อเพือใช ่ งานแผงวงจร ZX-LED8 ของแผงวงจร IPST-SE เพือขั ่ บ LED 8 ดวง

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB


    

81

5.7.2 pinLED8 เปนฟงกชันกํ ่ าหนดจุดตอพอรตของแผงวงจร IPST-SE ที่ตองการเชื่อมตอกับแผงวงจร ZXLED8 รูปแบบ void pinLED8(int pin) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 16 ถึง 20) ตัวอยางที่ 5-13 pinLED8(20);

// เลือกจุดตอพอรต 20 ของแผงวงจร IPST-SE ในการตอกับแผงวงจร ZX-LED8

5.7.3 LED8 เปนฟงกชั่นกําหนดขอมูลสําหรับแสดงผลบนแผงวงจร ZX-LED8 รูปแบบ void LED8(unsigned char _dat) (ใชในกรณีทีมี่ การกําหนดขาเชือมต ่ อดวย pinLED8) void LED8(int pin, unsigned char _dat) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 16 ถึง 20) _dat - ขอมูลสําหรับนําไปแสดงผล มีคา 0 ถึง 255 ตัวอยางที่ 5-14 #include <ipst.h> void setup() { pinLED8(20); } void loop() { unsigned char i=0; while(1) { LED8(i++); delay(500); } }

// include file for IPST-SE // ใชจุดตอพอรต 20 ในการตอกับแผงวงจร ZX-LED8

// แสดงคาเลขฐานสอง 8 บิต (00000000 ถึง 11111111) // หนวงเวลา 0.5 วินาที


     82

ตัวอยางที่ 5-15 #include <ipst.h> void setup() {} void loop() { unsigned char i=0; while(1) { LED8(20,i++); }

// include file for IPST-SE

// เลือกจุดตอพอรต 20 ในการเชือมต ่ อกับแผงวงจร ZX-LED8 // แลวแสดงคาเลขฐานสอง 8 บิต (00000000 ถึง 11111111) // หนวงเวลา 0.5 วินาที

delay(500);

} 7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

LED8



+5V RxD GND

Serial LED-8 UART communication 9600 bps. Baud

Secondary Education

7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

LED8



+5V RxD GND

Serial LED-8 UART communication 9600 bps. Baud

Secondary Education

7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

LED8



+5V RxD GND

Serial LED-8 UART communication 9600 bps. Baud

Secondary Education

7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

+5V RxD GND

LED8 Serial LED-8 UART communication 9600 bps. Baud

 Secondary Education


83

    

5.8 ipst_motor.h ไลบรารีขับมอเตอรไฟตรง แผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE) ขับมอเตอรไฟตรงได 2 ตัว โดยตอมอเตอรไฟตรงขนาด 3 ถึง 9V เขาที่จุดตอมอเตอรชอง 1 และ 2 ฟงกชันที ่ ใช ่ ในการขับมอเตอร ไฟตรงมีดังนี้

5.8.1 motor เปนฟงกชั่นขับเคลือนมอเตอร ่ ไฟตรง รูปแบบ void motor(char _channel,int _power) พารามิเตอร _channel - กําหนดชองเอาตพุตมอเตอรไฟตรง มีคา 1 และ 2 _power - กําหนดกําลังขับมอเตอร มีคาในชวง -100 ถึง 100 ถากําหนดคา _power เปนบวก (1 ถึง 100) ทําใหมอเตอรหมุนไปในทิศทางหนึ่ง ถากําหนดคา _power เปนลบ (-1 ถึง -100) มอเตอรจะถูกขับใหหมุนไปในทิศทางตรงขาม ถากําหนดคา _power เปน 0 มอเตอรหยุดหมุน ไมแนะนําใหกําหนดคาเปน 0 หากตอง การใหมอเตอรหยุดหมุนควรเรียกใชฟงกชัน่ motor_stop ตัวอยางที่ 5-16 30 A6 27 A3

USB D

28 A4 25 A1 OK

Rowl00 Wo rld000 0000000 0Row0100000000 0000000 00Row020000000 0000000 000Row03000000 0000000 0000Row0400000 0000000 00000Row050000 0000000 000000R0006000 0000000 0000000R000700 0000000 00000000Row080 0000000 000000000Row09 0000000 0000000000Row0 1000000 00000000000Row 0110000 000000000000Ro w012000 0000000000000R ow01300 00000000000000 Row0140 00000000000000 0Row015

ON

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1



1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2

KNOB

8 SCL 9 SDA

24 A0

#include <ipst.h> // ผนวกไลบรารีหลัก void setup() {} void loop() { motor(1,60); // ขับมอเตอรชองที่ 1 ดวย // กําลัง 60% delay(500); // ขับนาน 0.5 วินาที motor(1,-60); // ขับมอเตอรชองที่ 1 // กลับทิศทางดวยกําลัง 60% delay(500); // ขับนาน 0.5 วินาที }


     84

5.8.2 motor_stop เปนฟงกชั่นหยุดขับมอเตอร รูปแบบ void motor_stop(char _channel) พารามิเตอร _channel - กําหนดชองเอาตพุตมอเตอรไฟตรง มีคา 1, 2 และ ALL โดย ALLเปนการเลือกใหมอเตอรทังหมดหยุ ้ ดทํางาน ตัวอยางที่ 5-17 #include <ipst.h> void setup() { sw_OK_press(); } void loop() { motor(1,60); delay(500); motor(1,-60); delay(500); if (sw1()) { motor_stop(1); while (1); } }

// ผนวกไลบรารีหลัก // ตรวจสอบการกดสวิตช OK

// มอเตอร 1 หมุนดวยกําลังไฟฟา 60% // หนวงเวลา 0.5 วินาที // มอเตอร 1 หมุนกลับทิศดวยกําลังไฟฟา 60% // หนวงเวลา 0.5 วินาที // ตรวจสอบการกดสวิตช SW1 // ถาสวิตช SW1 ถูกกด มอเตอรชอง 1 หยุดหมุน


    

ตัวอยางที่ 5-18 #include <ipst.h> void setup() {} void loop() { motor(1,50); motor(2,50); sleep(3000); motor(1,-50); motor(2,-50); sleep(3000); motor_stop(ALL); sleep(3000); } 30 A6 27 A3

USB D

Rowl00 Wo rld00 00000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015

ON

28 A4 25 A1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1



1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2 OK

// ขับมอเตอรชอง 1 ดวยกําลัง 50% ของกําลังสูงสุด // ขับมอเตอรชอง 2 ดวยกําลัง 50% ของกําลังสูงสุด // หนวงเวลา 3 วินาที // ขับมอเตอรชอง 1 กลับทิศทางดวยกําลัง 50% ของกําลังสูงสุด // ขับมอเตอรชอง 2 กลับทิศทางดวยกําลัง 50% ของกําลังสูงสุด // หนวงเวลา 3 วินาที // หยุดขับมอเตอรทั้งสองชอง // หนวงเวลา 3 วินาที 8 SCL 9 SDA

24 A0 KNOB

// ผนวกไฟลไลบรารีหลัก

SERVO



85


     86

5.9 ipst_servoMotor.h ไฟลไลบรารีขับเซอรโวมอเตอร เปนไฟลไลบรารีควบคุมเซอรโวมอเตอร มีฟงกชั่นสนับสนุนการควบคุมตําแหนงแกนหมุน ของเซอรโวมอเตอร โดยแผงวงจร IPST-SE ควบคุมเซอรโวมอเตอรได 4 ตัวในเวลาเดียวกัน กอนใช งานตองผนวกไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง #include <ipst_servoMotor.h> หรือ #inclue <atx.h> ในไฟลไลบรารีนีมี้ 1 ฟงกชั่นคือ servo เปนฟงกชั่นกําหนดตําแหนงแกนหมุนของเซอรโว มอเตอร รูปแบบ void servo(unsigned char _ch, int _angle) พารามิเตอร _ch - ชองเอาตพุตเซอรโวมอเตอร มีคา 0 ถึง 3 _pos - กําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร มีคาในชวง 0 ถึง 180 และ -1 ถากําหนดเปน -1 หมายถึง ไมใชงานเซอรโวมอเตอรทีช่ องนั้นๆ ตัวอยางที่ 5-19 #include <ipst.h> void setup() {} void loop() { servo(0,60); sleep(5000); servo(0,120); sleep(5000); }

// ผนวกไฟลไลบรารีหลัก

// ขับเซอรโวมอเตอรชอง 0 ไปยังตําแหนง 60 องศา // หนวงเวลา 5 วินาที // ขับเซอรโวมอเตอรชอง 0 ไปยังตําแหนง 120 องศา // หนวงเวลา 5 วินาที


    

87

5.10 ipst_serial.h ไลบรารีรับสงขอมูลอนุกรม เป นไฟลไลบรารี ที่ บรรจุชุ ดคําสั่งเกียวกั ่ บการรับสงขอมูลอนุกรมผานวงจรสื่อสารขอมูล อนุกรม (UART) ของไมโครคอนโทรลเลอรบนแผงวงจร IPST-SE ในชุดกลองสมองกล IPSTMicroBOX (SE) กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง #include <ipst_serial.h> หรือ #inclue <atx.h>

5.10.1 การเชือมต ่ อทางฮารดแวร เมือต ่ องการใชงานชอง UART0 (ทํางานผานพอรต USB) ใหตอสายจากจุดตอพอรต USB บนแผงวงจร IPST-SE (เปนจุดตอเดียวกับทีใช ่ ในการอัปโหลด) เขากับพอรต USB ของคอมพิวเตอร

เมือต ่ องการใชงานชอง UART1 ตอสายสัญญาณเขากับจุดตอ RXD1 (จุดตอพอรต 2) และ TXD1 (จุดตอพอรต 3) บนแผงวงจร IPST-SE

            

รูปที่ 5-2 แสดงจุดตอสัญญาณของแผงวงจร IPST-SE เมือมี ่ การใชงานไลบรารี ipst_serial.h


     88

5.10.2 uart เป นฟงกชั่นสําหรับสงขอมูลกลุมอักษรหรือสายอักขระหรือสตริง (string) ออกจากโมดูล UART0 ไปยังคอมพิวเตอรผานพอรต USB มีอัตราการถายทอดขอมูลเริ่มตนที่ 115,200 บิตตอวินาที รูปแบบ void uart(char *p,...) พารามิเตอร p - รับรหัสของกลุมขอความที่ตองการสงออกจากภาคสงของโมดูล UART0 กําหนดรูปแบบการแทรก สัญลักษณพิเศษเพื่อใชรวมในการแสดงผลไดดังนี้ รหัสบังคับ การทํางาน %c หรือ %C แสดงผลตัวอักษร 1 ตัว %d หรือ %D แสดงผลตัวเลขฐานสิบชวงตั้งแต -32,768 ถึง +32,767 %l หรือ %L แสดงผลตัวเลขฐานสิบชวงตั้งแต -2,147,483,648 ถึง +2,147,483,647 %f หรือ %F แสดงผลขอมูลแบบจํานวนจริง(แสดงทศนิยม 3 หลัก) \r กําหนดใหขอความชิดไปทางดานซายของบรรทัด \n กําหนดใหขอความขึ้นบรรทัดใหม

ตัวอยางที่ 5-20 #include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() {} void loop() { uart(“Hello IPST-MicroBOX (SE)!\r\n”); // สงขอมูลไปยังคอมพิวเตอรแบบขึนบรรทั ้ ดใหม sleep(2000); // หนวงเวลา 2 วินาที } ในการรันโปรแกรมนี้ตองตอสาย USB ระหวางแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอรไว หรือเลือกเมนู Tools > Serial Monitor ตลอดเวลา จากนันเป ้ ดหนาตาง Serial Monitor โดยคลิกทีปุ่ ม


    

89

จากนันรอสั ้ กครู หนาตาง Serial Monitor จะปรากฏขึนมา ้ พรอมกับแสดงขอความตามรูป ใหทําการ คลิกทําเครื่องหมายที่ชอง Auto Scroll และเลือก No line ending สวนชองสุดทายเลือกเปน 115200 Baud

5.10.3 uart_set_baud เปนฟงกชันกํ ่ าหนดอัตราหรือความเร็วในการสือสารข ่ อมูลของโมดูล UART0 กับคอมพิวเตอร รูปแบบ void uart_set_baud(unsigned int baud) พารามิเตอร baud - อัตราบอดในการสือสารของโมดู ่ ล UART0 กับคอมพิวเตอร มีคา 2400 ถึง 115,200 ตัวอยางที่ 5-21 uart_set_baud(4800);

// กําหนดอัตราบอดในการสือสารข ่ อมูลเปน 4,800 บิตตอวินาที

5.10.4 uart_available เปนฟงกชั่นตรวจสอบการรับขอมูลเขามาของโมดูล UART0 เมื่อติดตอกับคอมพิวเตอร รูปแบบ unsigned char uart_available(void) การคืนคา - เปน “0” เมื่อยังไมมีขอมูลเขามา - มากกวา 0 เมื่อมีขอมูลเขามา โดยมีคาเทากับจํานวนของอักขระที่ไดรับ ตัวอยางที่ 5-22 char x =uart_available(); // ตรวจสอบวา มีขอมูลเขามาทางภาครับของโมดูล UART0 หรือไม ถา x มีคามากกวา 0 แสดงวา // มีขอมูลเขามายังภาครับแลว ควรอานขอมูลออกดวยฟงกชัน่ uart_getkey ในลําดับถัดไปทันที


     90

5.10.5 uart_getkey เปนฟงกชั่นอานขอมูลจากบัฟเฟอรตัวรับของโมดูล UART0 รูปแบบ char uart_getkey(void) การคืนคา - เปน “0” เมื่อไมมีการรับอักขระใดๆ เขามายังวงจรภาครับของโมดูล UART - เปนคาของอักขระทีรั่ บไดในรูปแบบของรหัสแอสกี้ ตัวอยางที่ 5-23 #include <ipst.h> void setup() {} void loop() // ลูปการทํางานหลัก { if(uart_available()) // ตรวจสอบวามีขอมูลเขามาหรือไม { if(uart_getkey()==’a’) // ตรวจจับการกดคีย a วา ถูกกดหรือไม { glcd(3,1,“Key a Active!”); // แสดงขอความเพือตอบสนองต ่ อการตรวจพบวามีการคีย a sleep(2000); // หนวงเวลาแสดงขอความประมาณ 2 วินาที } else { glcdClear(); // เคลียรขอความที่หนาจอแสดงผล } } } หมายเหตุ เมือเรี ่ ยกใชฟงกชัน่ uart เพือส ่ งขอมูลออกทางโมดูลพอรตอนุกรมหรือ UART และ uart_getkey เพือ่ ตรวจจับอักขระใดๆ นัน้ อัตราการสื่อสารขอมูลจะถูกกําหนดเปน 115,200 บิตตอวินาที ขอมูล 8 บิต และไมมีการตรวจ สอบพาริตีโดยอั ้ ตโนมัติ และเปนคาตังต ้ น เพือลดความซั ่ บซอนในการเขียนโปรแกรมลง หากตองการเปลียนอั ่ ตราเร็วใน การสือสารข ่ อมูลตองใชคําสัง่ uart_set_baud อยางไรก็ตาม ตองคํานึงดวยวา เมืออั ่ ตราการสือสารสู ่ งขึนอาจส ้ งผลกระทบ ตอความถูกตองในการสือสารข ่ อมูลได ในการรันโปรแกรมนี้ตองตอสาย USB ระหวางแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอรไวตลอด เวลา จากนันเป ้ ดหนาตาง Serial Monitor โดยคลิกทีปุ่ ม หรือเลือกเมนู Tools > Serial Monitor


91

    

จากนันรอสั ้ กครู หนาตาง Serial Monitor จะปรากฏขึนมา ้ ใหกดปอนตัวอักษร a ที่ชองบนสุด แลวคลิก กดปุม Send ทางขวามือ โดยที่ชองดานลางเลือก No line ending สวนชองสุดทายดานลางขวามือเลือกเปน 115200 Baud

เมือส ่ งตัวอักษร a จากคอมพิวเตอรไปยังแผงวงจร IPST-SE แลว ที่แผงวงจร IPST-SE จะตรวจสอบการเขา มาของขอมูล หากถูกตอง จะแสดงขอความ Key a Active !

  30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

00 00000000 0 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 Key a Active! 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000

ON

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB


     92

5.10.6 uart1 เปนฟงกชั่นสงขอมูลสายอักขระออกทางภาคสงของโมดูล UART1 มีอัตราการรับสงขอมูล เริ่มตนที่ 9,600 บิตตอวินาที โดยการใชงานตองตอสายสัญญาณเขาที่จุด TXD1 รูปแบบ void uart1(char *p,...) พารามิเตอร p - รับรหัสของกลุมข  อความทีต่ องการสงออกจากภาคสงของโมดูล UART1 โดยสามารถกําหนด รูปแบบการแทรกสัญลักษณพิเศษเพือใช ่ รวมในการแสดงผลเหมือนกับฟงกชัน่ uart1

5.10.7 uart1_set_baud เปนฟงกชั่นกําหนดอัตราการรับสงขอมูลของโมดูล UART1 กับอุปกรณภายนอก รูปแบบ void uart1_set_baud(unsigned int baud) พารามิเตอร baud - กําหนดคาอัตราการรับสงขอมูลในการสือสารข ่ อมูลของโมดูล UART1 ตัวอยางที่ 5-24 uart1_set_baud(19200);

// กําหนดอัตราบอดในการสือสารเป ่ น 19,200 บิตตอวินาที

5.10.8 uart1_available เปนฟงกชั่นตรวจสอบการรับขอมูลเขามาของโมดูล UART1 เมื่อติดตอกับอุปกรณภายนอก โดยการใชงานตองตอสายสัญญาณเขาที่จุด RXD1 และ TXD1 รูปแบบ unsigned char uart1_available(void) การคืนคา - เปน 0 เมื่อไมมีขอมูลเขามา - มากกวา 0 โดยมีคาเทากับจํานวนของอักขระที่ไดรับ ตัวอยางที่ 5-25 char x =uart1_available(); // ตรวจสอบวามีขอมูลเขามาทางภาครับของโมดูล UART1 หรือไม // ถา x มีคามากกวา 0 แสดงวามีขอมูลเขามาแลว ควรอานออกไปดวยฟงกชัน่ uart1_getkey ทันที


93

    

5.10.9 uart1_getkey เปนฟงกชั่นอานขอมูลจากบัฟเฟอรตัวรับของโมดูล UART1 รูปแบบ char uart1_getkey(void) การคืนคา - เปน 0 เมื่อยังไมมีการรับอักขระใดๆ - เปนคาของอักขระทีรั่ บไดในรูปแบบของรหัสแอสกี้

   1. เมื่อตองการติดตอกับอุปกรณสื่อสารขอมูลไรสาย อาทิ โมดูลบลูทูธ, โมดูล XBEE เปนตน    

  Tx 

TXD1

Rx



RXD1



  2. เมื่อตองการสื่อสารขอมูลระหวางแผงวงจร IPST-SE 2 ชุด

28 A4 25 A1

29 A5 26 A2 28 A4 25 A1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

SERVO

15 SV0 14 SV1 13 SV2 12 SV3

ON

G 6V 12 G 6V 13 G 6V 14 G 6V 15

D

KNOB

OK

0 0 0000 0000 0 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000

ON

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

30 A6 27 A3

00 0 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00

DC MOTOR

8 SCL 9 SDA 0

USB

29 A5 26 A2

OK

30 A6 27 A3

KNOB

24 A0

24 A0

D

8 SCL 9 SDA

USB

SERVO

 

3. เมือต ่ องการติดตอกับอุปกรณภายนอกทีต่ องการรูปแบบขอมูลอนุกรมในการสือสาร ่ อาทิ แผงวงจรขับเซอร โวมอเตอร 16 ชอง (ZX-SERVO16i) , แผงวงจรโมดูล LCD แบบอนุกรม (SLCD16x2), แผงวงจรฐานเวลา นาฬิกาจริงแบบอนุกรม (ZX-17)


     94


    

95



    ในการพัฒนาโครงงานวิทยาศาสตรสมัยใหม ที่เกียวข ่ องกับการเขียนโปรแกรมและตองมี ระบบควบคุมอัตโนมัติเขามาเกียวข ่ อง รวมถึงตองมีการติดตอกับตัวตรวจจับ ซึงผู ่ ใช  งานตองการทราบ ถึงคาที่ตัวตรวจจับวัดหรือตรวจจับได อุปกรณตัวหนึ่งที่มีความสําคัญคือ อุปกรณแสดงผล อุปกรณ พื้นฐานทีสุ่ ดทีใช ่ ในการแสดงผลคือ LED หากตองการใหมีการแสดงผลเปนตัวเลข ก็จะเปลี ๋ ่ยนมาใช LED ตัวเลข 7 สวน หากมีความตองการเพิ่มขึ้นไปอีก นันคื ่ อ ตองการแสดงเปนขอความ เปนตัวอักษร จํานวนมากขึน้ โมดูล LCD แบบอักขระ (character LCD module) ก็จะเขามาทําหนาที่นี้ ในชุดกลองสมองกล IPST-MicroBOX Secondary Education (SE) รองรับทั้งการแสดงผล ดวยอุปกรณพื้นฐานอยาง LED และจอแสดงผลแบบกราฟก LCD สี ทําใหชุดกลองสมองกล IPSTMicroBOX (SE) นีความสมบู ้ รณพรอมในการแสดงผลการทํางานอยางเพียงพอ ในบทนีเป ้ นการนํา เสนอขอมู ลสําหรั บการใชงานจอแสดงผลแบบกราฟก LCD สีที่เปนอุปกรณแสดงผลหลักของ ชุดกลองสมองกล IPST-MicroBOX (SE) เพื่อใหนําไปใชงานไดอยางเกิดประโยชนสูงสุด

6.1 คุณสมบัติของจอแสดงผลแบบกราฟก LCD สีของแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE) คุณสมบัติที่สําคัญโดยสรุปของจอแสดงผลแบบกราฟก LCD สีของแผงวงจร IPST-SE มีดังนี้  ขนาดจอแสดงผล 1.8 นิว ้ ความละเอียด 128 x 160 จุด ้ 65,536 สี (ไมรองรับไฟลรูปภาพโดยตรง) พรอมไฟสองหลัง  แสดงภาพกราฟกลายเสนและพืนสี  แสดงผลเปนตัวอักษรขนาดปกติ (5 x 7 จุด) ได 21 ตัวอักษร 16 บรรทัด (หรือ 21 x16)  มีไฟลไลบรารี ipst_glcd.h รองรับเพื่อชวยใหการเขียนโปรแกรมเพื่อกําหนดรูปแบบการ แสดงผลทําไดหลากหลายแบบและสะดวกขึนอย ้ างมาก โดยเฉพาะการพัฒนาโปรแกรมภาษา C/C++ กับซอฟตแวร Wiring 1.0 IPST-SE


     96

  



 

012345 67 89abc defghijk 100000000000000000000 200000 0000d 0000000000 300000000000000000000 400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000

     

รูปที่ 6-1 แสดงการกําหนดตําแหนงของการแสดงผลสําหรับจอแสดงผลกราฟก LCD สีทีใช ่ บนแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE)

6.2 การเรียกใชไฟลไลบรารีสําหรับจอแสดงผลแบบกราฟก LCD สี ไฟลไลบรารีที่ใชในการติดตอและควบคุมการทํางานของจอแสดงผลกราฟก LCD สีจะไดรับ การติดตังไปพร ้ อมกับการติดตั้งติดตั้งซอฟตแวร Wiring 1.0 รุน IPST-SE แลว ไฟลไลบรารีชื่อ ipst_glcd.h ไดรับการคัดลอกลงในโฟลเดอร C:\WiringIPST\libraries\IPST ในการประกาศเพื่อผนวกไฟลไลบรารีนีในโปรแกรมหรื ้ อสเก็ตชของ Wiring 1.0 ทําไดดังนี้ #include <ipst_glcd.h> หรือ #include <ipst.h>


    

97

6.3 ฟงกชันเกี ่ ่ยวกับการแสดงผลจอภาพแบบกราฟก LCD สี 6.3.1 glcd เปนฟงกชั่นแสดงขอความที่หนาจอแสดงผลกราฟก LCD สี โดยแสดงตัวอักษรขนาดปกติได 21 ตัวอักษร 16 บรรทัด รูปแบบ void glcd(unsigned char x, unsigned char y ,char *p,...) พารามิเตอร x คือตําแหนงบรรทัดมีคาตั้งแต 0 ถึง 15 y คือตําแหนงตัวอักษรมีคาตั้งแต 0 ถึง 20 *p คือขอความทีต่ องการนํามาแสดงรวมถึงรหัสที่ใชกําหนดรูปแบบพิเศษเพือร ่ วมแสดงผลขอมูลตัวเลขใน รูปแบบอืนๆ ่ ประกอบดวย %c หรือ %C - รับคาแสดงผลตัวอักษร 1 ตัวอักษร %d หรือ %D - รับคาแสดงผลตัวเลขจํานวนเต็มในชวง -32,768 ถึง 32,767 %l หรือ %L - รับคาแสดงผลตัวเลขจํานวนเต็มในชวง -2,147,483,648 ถึง 2,147,483,647 %f หรือ %F - รับคาเพือแสดงผลตั ่ วเลขจํานวนจริง (แสดงทศนิยม 3 หลัก)

ตัวอยางที่ 6-1 glcd(2,0,“Hello World”); // แสดงขอความ Hello World ทีตํ่ าแหนงซายสุดของบรรทัด 2 (บรรทัดที่ 3)

 



  

 012345 67 89abc defghijk  100000000000000000000  Hello 0 World 0000000000 300000000000000000000 400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000

 


     98

ตัวอยางที่ 6-2 int x=20; glcd(1,2,”Value = %d”,x); // แสดงตัวอักษรและตัวเลขบนบรรทัดเดียวกัน เริ่มตนที่คอลัมน 2 ของบรรทัด 1 (บรรทัดที่ 2) 8 SCL 9 SDA

USB

30 A6 27 A3 29 A5 26 A2

24 A0

D Hello0 Wo rld0000000000 00 Valu e0=020000000000 Hello0 World 0000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

ON

28 A4 25 A1

6.3.2 colorRGB เปนฟงกชั่นเปลี่ยนคาสีในรูปแบบ RGB (แดง เขียว นําเงิ ้ น) ใหอยูในรูปของตัวเลข 16 บิต โดย แบงเปนคาของสีแดง 5 บิต ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีนําเงิ ้ น 5 บิต รูปแบบ unsigned int colorRGB(uint red,uint green,uint blue) พารามิเตอร red - เปนคาของสีแดง มีคา 0 ถึง 31 ถาคาทีป่ อนมากกวา 31 จะปรับลดใหเทากับ 31 green - คาของสีเขียว มีคา 0 ถึง 63 ถาคาทีป่ อนมากกวา 63 จะถูกปรับลดใหเทากับ 63 blue - คาของสีนํ้าเงิน มีคา 0 ถึง 31 ถาคาทีป่ อนมากกวา 31 จะปรับลดใหเทากับ 31

ตัวอยางที่ 6-3 #include <ipst.h> int colors; void setup() { int colors; colors=colorRGB(31,0,0); glcdFillScreen(colors); } void loop() {}

// สงคาสี 16 บิตของสีแดงใหตัวแปร colors // นําคาไปแสดงเปนสีพืนของจอแสดงผล ้


    

99

6.3.3 color[ ] เปนตัวแปรอะเรยทีใช ่ กําหนดสีจํานวน 8 สีที่เปนสีพืนฐาน ้ ผูพัฒนาโปรแกรมสามารถเรียกใช ตัวแปร color[] หรือเรียกใชชื่อสีตรงๆ ก็ได รูปแบบ unsigned int color[]={ GLCD_RED, GLCD_GREEN, GLCD_BLUE, GLCD_YELLOW, GLCD_BLACK, GLCD_WHITE, GLCD_SKY, GLCD_MAGENTA}; พารามิเตอร GLCD_RED - ใชกําหนดสีแดง GLCD_GREEN - ใชกําหนดสีเขียว GLCD_BLUE - ใชกําหนดสีนํ้าเงิน GLCD_YELLOW - ใชกําหนดสีเหลือง GLCD_BLACK - ใชกําหนดสีดํา GLCD_WHITE - ใชกําหนดสีขาว GLCD_SKY - ใชกําหนดสีฟา GLCD_MAGENTA - ใชกําหนดสีบานเย็น

ตัวอยางที่ 6-4 glcdFillScreen(color[5]);

// กําหนดใหพืนหลั ้ งเปนสีขาว

ตัวอยางที่ 6-5 glcdFillScreen(GLCD_BLUE); // กําหนดใหพืนหลั ้ งเปนสีนํ้าเงิน


     100

6.3.4 glcdSetColorWordBGR เปนฟงกชั่นกําหนดการเรียงบิตขอมูลสีใหเปนแบบ BGR (5-6-5) นันคื ่ อ คาของสีนําเงิ ้ น 5 บิต ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีแดง 5 บิต ทั้งนีเนื ้ องจากผู ่ ผลิตจอแสดงผลกราฟก LCD สีมีการผลิตจอแสดงที่มีคุณสมบัติเหมือนกันออกมา 2 รุน แตมีการเรียงบิตขอมูลสีตางกัน คือ เรียง แบบ BGR และเรียงแบบ RGB อยางไรก็ตาม คาตังต ้ นของไฟลไลบรารี ipst_glcd.h เลือกใชการเรียงบิตขอมูลสีใหเปนแบบ BGR นันคื ่ อ มีการเรียกใชฟงกชั่นนี้ตังแต ้ ตน จึงไมตองเขียนฟงกชั่นนี้ลงในโปรแกรม รูปแบบ glcdSetColorWordBGR() ตัวอยางที่ 6-6 #include <ipst.h> void setup() { glcdSetColorWordBGR(); // เขียนฟงกชันนี ่ ้ลงไปหรือไมก็ได } void loop() {}

6.3.5 glcdSetColorWordRGB( );

เปนฟงกชั่นกําหนดการเรียงบิตขอมูลสีใหเปนแบบ RGB (5-6-5) นั่นคือ คาของสีแดง 5 บิต ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีนําเงิ ้ น 5 บิต ทังนี ้ เนื ้ องจากผู ่ ผลิตจอแสดงผลกราฟก LCD สีมีการผลิตจอแสดงผลแบบนี้ 2 รุน โดยมีการเรียงบิตขอมูลสีแบบ BGR และแบบ RGB หากผูใชงานแผงวงจร IPST-SE และทดลองกําหนดสีของภาพหรือตัวอักษรแลวพบวา สีที่ได ไมถูกตอง จะตองเรียกใชฟงกชั่นนี้ โดยบรรจุไวใน setup() ที่ตอนตนของโปรแกรม รูปแบบ glcdSetColorWordRGB() ตัวอยางที่ 6-7 #include <ipst.h> void setup() { glcdSetColorWordBGR(); // เลือกรูปแบบการเรียงบิตสีเปนแบบ RGB } void loop() {}


    

101

6.3.6 setTextColor เปนการกําหนดคาสีของตัวอักษรที่แสดงดวยฟงกชั่น glcd() โดยคาตังต ้ นกําหนดเปนสีขาว รูปแบบ void setTextColor(unsigned int newColor) พารามิเตอร newColor คือสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-8 setTextColor(GLCD_YELLOW); // กําหนดใหสีของตัวอักษรเปนสีเหลือง

6.3.7 setTextBackgroundColor เปนฟงกชั่นกําหนดสีของพื้นหลังตัวอักษร โดยคาตังต ้ นเปนสีดํา สีของพื้นหลังตัวอักษรจะ เปนคนละสวนกับสีของพืนจอภาพ ้ (screen background) ซึงต ่ องกําหนดคาผานฟงกชัน่ glcdFillScreen รูปแบบ void setTextBackgroundColor(unsigned int newColor) พารามิเตอร newColor คือสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-9 setTextBackgroundColor(GLCD_GREEN); // กําหนดใหสีพืนหลั ้ งตัวอักษรเปนสีเขียว

29 A5 26 A2 28 A4 25 A1 SW1

D Hello0Wo rl d0000000000 000000000000000000000 Hello 0World0000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

ON

G 6V 12 G 6V 13 G 6V 14

14 SV1 13 SV2 12 SV3

30 A6 27 A3 OK

8 SCL 9 SDA

24 A0 KNOB

USB


     102

6.3.8 glcdClear เปนการเคลียรหนาจอแสดงผล โดยสีของพืนหลั ้ งจะเปนสีพืนหลั ้ งของตัวอักษรลาสุด โดยถาไม ไดกําหนดดวยคําสัง่ setTextBackGroundColor() มากอนหนานี้ หลังจากทําคําสัง่ glcdClear()แลว พืนหลั ้ งจะเปนสีดํา รูปแบบ void glcdClear() ตัวอยางที่ 6-10 glcdClear();

// เคลียรหนาจอแสดงผล



 

IPST-SE



 


    

103

6.3.9 glcdFillScreen เปนการเคลียรหนาจอแสดงผล แลวเปลียนสี ่ พื้นหลังของจอแสดงผลดวยสีที่ระบุ รูปแบบ void glcdFillScreen(unsigned int color) พารามิเตอร Color คือสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-11 glcdFillScreen(GLCD_YELLOW); // กําหนดสีพืนหลั ้ งของจอภาพเปนสีเหลือง














     104

6.3.10 glcdMode เปนการกําหนดทิศทางแสดงผลของจอกราฟก LCD สี โดยกําหนดใหขอความหรือภาพหนา จอใหแสดงภาพตังฉากตรงหน ้ า (โหมด 0), หมุนขวา 90 องศา (โหมด 1), หมุน 180 องศาหรือกลับ หัว (โหมด 2) และหมุน 270 องศา (โหมด 3) รูปแบบ glcdMode(unsigned int modeset) พารามิเตอร modeset คือคาทิศทางของการหมุนมีคา 0 ถึง 3 โดยใชแทนทิศทาง 0, 90, 180 หรือ 270 องศา โดยมีคา เริ่มตนคือ 0 องศา ทํางานอยูในแนวตั  ้ง

 

 

IPST-SE

IPST-SE

 

IPST-SE

 

IPST-SE

ตัวอยางที่ 6-12 #include <ipst.h> void setup() { setTextSize(2); } void loop() { glcdClear(); glcdMode(0); glcd(0,0,"IPST-SE"); sw_ok_press(); glcdClear();

// ขนาดตัวอักษร 2 เทา

// เคลียรหนาจอ // โหมด 0 องศา // แสดงขอความ // รอกดสวิตชเขาโหมดตอไป

}

glcdMode(1); glcd(0,0,"IPST-SE"); sw_ok_press(); glcdClear(); glcdMode(2); glcd(0,0,"IPST-SE"); sw_ok_press(); glcdClear(); glcdMode(3); glcd(0,0,"IPST-SE"); sw_ok_press();


    

105

6.3.11 setTextSize เปนการกําหนดขนาดตัวอักษรโดยระบุเปนจํานวนเทาของขนาดปกติ คาตังต ้ นเมือเริ ่ ่มทํางาน ทุกครั้งคือ ขนาดตัวอักษรปกติ ใชพื้นทีรวมระยะช ่ องไฟคือ 6 x 10 พิกเซลตอ 1 ตัวอักษร จึงแสดงได 21 ตัวอักษร 16 บรรทัดในแนวตั้ง

  

 

    รูปแบบ setTextSize(unsigned int newSize) พารามิเตอร newSize คือคาขนาดจํานวนเทาของขนาดปกติ มีคา 1 ถึง 16 เพือให ่ ตัวอักษรที่แสดงไมลนหนาจอ ถาหากกําหนดเปน 1 เทา แสดงตัวอักษรได 21 ตัว 16 บรรทัด ถาหากกําหนดเปน 2 เทา แสดงตัวอักษรได 10 ตัว 8 บรรทัด ถาหากกําหนดเปน 3 เทา แสดงตัวอักษรได 7 ตัว 5 บรรทัด ถาหากกําหนดเปน 4 เทา แสดงตัวอักษรได 5 ตัว 4 บรรทัด ถาหากกําหนดเปน 5 เทา แสดงตัวอักษรได 4 ตัว 3 บรรทัด ถาหากกําหนดเปน 6 และ 7 เทา แสดงตัวอักษรได 3 ตัว 2 บรรทัด ถาหากกําหนดเปน 8 เทา แสดงตัวอักษรได 2 ตัว 2 บรรทัด ถาหากกําหนดเปน 9 และ 10 เทา แสดงตัวอักษรได 2 ตัว 1 บรรทัด ถาหากกําหนดเปน 11 ถึง 16 เทา แสดงตัวอักษรได 1 ตัว 1 บรรทัด (แบบไมลนจอแสดงผล)


     106

ตัวอยางที่ 6-13 #include <ipst.h> void setup() { setTextSize(1); setTextColor(GLCD_GREEN);

//

glcd(0,0,"Size1"); setTextSize(2); glcd(1,0,"Size2"); setTextSize(3);

//

กําหนดขนาดขอความ 1 เทา สีตัวอักษรเปนสีเขียว แสดงขอความ

//

กําหนดขนาดขอความ 2 เทา

glcd(2,0,"Size3"); setTextSize(4); glcd(3,0,"Size4");

//

กําหนดขนาดขอความ 3 เทา

//

กําหนดขนาดขอความ 4 เทา

//

} void loop() {}

6.3.12 getTextColor เปนคําสั่งคืนคาสีปจจุบันของตัวอักษร รูปแบบ unsigned int getTextColor() การคืนคา textColor เปนคาสีแสดงอยูในรูปของตัวเลข 16 บิต ดูรูปแบบไดจากฟงกชัน่ colorRGB()

ตัวอยางที่ 6-14 unsigned int color; color=getTextColor();

// นําคาสีของตัวอักษรเก็บไวที่ตัวแปร color


    

107

6.3.13 getTextBackgroundColor เปนคําสั่งคืนคาสีพื้นหลังของตัวอักษรในปจจุบัน รูปแบบ unsigned int getTextBackgroundColor() การคืนคา  ปของตัวเลข 16 บิต ดูรูปแบบไดจากฟงกชัน่ colorRGB() textBackgroundColor เปนคาสีแสดงอยูในรู

ตัวอยางที่ 6-15 unsigned int color; color=getTextBackgroundColor();

// นําคาสีพืนหลั ้ งของตัวอักษรเก็บในตัวแปร color

6.3.14 getTextSize คืนคาขนาดของตัวอักษรออกมาเปนจํานวนเทาของคาปกติ รูปแบบ unsigned int getTextSize() การคืนคา textSize เปนคาจํานวนเทาของขนาดตัวอักษร

ตัวอยางที่ 6-16 unsigned int textSize; textSize=getTextSize(); // นําคาจํานวนเทาของขนาดของตัวอักษรเก็บในตัวแปร textSize

6.3.15 glcdGetMode เปนคําสังคื ่ นคาของโหมดทิศทางการแสดงผลในปจจุบัน รูปแบบ unsigned int glcdGetMode() การคืนคา mode เปนคาของโหมดทิศทางการแสดงผล เปนตัวเลข 0 ถึง 3 เพือแสดงผลในทิ ่ ศทาง 0 องศา, หมุน 90 องศา, หมุน 180 องศา และหมุน 270 องศาตามลําดับ

ตัวอยางที่ 6-17 unsigned int Mode; Mode=glcdGetMode(); // คืนคาทิศทางการแสดงผลของหนาจอ GLCD


     108

6.3.16 glcdPixel เปนคําสั่งพล็อตจุดบนจอภาพตามพิกัดทีกํ่ าหนด โดยอางอิงจอภาพขนาด 128 x 160 พิกเซล รูปแบบ void glcdPixel(unsigned int x,unsigned int y,unsigned int color) พารามิเตอร x คือคาพิกัดในแนวนอนหรือแกน x มีคาระหวาง 0 ถึง 127 y คือคาพิกัดในแนวตังหรื ้ อแกน y มีคาระหวาง 0 ถึง 159 color คือคาของสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-18 #include <ipst.h> int i; void setup() { for (i=0;i<128;i+=4) { glcdPixel(i,80,GLCD_RED); } for (i=0;i<160;i+=4) { glcdPixel(64,i,GLCD_RED); } } void loop() {}

// พล็อตจุดทุกๆ 4 พิกเซลในแนวแกน x กลางจอ

// พล็อตจุดทุกๆ 4 พิกเซลในแนวแกน y กลางจอ


    

109

6.3.1.17 glcdRect เปนฟงกชันลากเส ่ นจากพิกัดทีกํ่ าหนดมายังพิกัดปลายทาง โดยอางอิงถึงตําแหนงของพิกเซล หรือจุดของจอแสดงผลที่ความละเอียด 128 x 160 จุด ดังรูปที่ 6-2 รูปแบบ void glcdRect(unsigned int x1,unsigned int y1,unsigned int width,unsigned int height,unsigned int color) พารามิเตอร x1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ x มีคาระหวาง 0 ถึง 127 y1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ y มีคาระหวาง 0 ถึง 159 width คือ คาความกวางของรูปสี่เหลียม ่ (แนวนอน) มีคาระหวาง 1 ถึง 128 height คือ คาความสูงของรูปสี่เหลียม ่ (แนวตั้ง) มีคาระหวาง 1 ถึง 158 color คือ สีของเสน เปนคาตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[] 







   



  

รูปที่ 6-2 แสดงการกําหนดตําแหนงของพิกเซลหรือจุดของจอแสดงผลกราฟก LCD สีทีใช ่ บนแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE)


     110

ตัวอยางที่ 6-19 #include <ipst.h> void setup() { glcdRect(32,40,64,80,GLCD_RED); // วาดรูปสี่เหลียมเส ่ นสีแดง ขนาด 64 x 80 พิกเซล } void loop() {}

   

 

  300000000000000000000  400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000






111

    

6.3.18 glcdFillRect เปนการระบายสีพื้นของรูปสีเหลี ่ ยม ่ โดยกําหนดจุดเริ่มตนและความกวางยาวของรูปสีเหลี ่ ยม ่ ที่ตองการ ฟงกชั่นนี้เปนการสรางรูปสี่เหลี่ยมที่มีสีพื้นแตไมมีเสนกรอบ ในขณะที่ฟงกชั่น glcdRect เปนการวาดรูปกรอบสี่เหลี่ยมที่กําหนดสีของเสนกรอบได แตภายในกรอบไมมีสี รูปแบบ void glcdFillRect(unsigned int x1, unsigned int y1, unsigned int width, unsigned int height,unsigned int color) พารามิเตอร x1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ x มีคาระหวาง 0 ถึง 127 y1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ y มีคาระหวาง 0 ถึง 159 width คือ คาความกวางของรูปสี่เหลียม ่ (แนวนอน) มีคาระหวาง 1 ถึง 128 height คือ คาความสูงของรูปสี่เหลียม ่ (แนวตั้ง) มีคาระหวาง 1 ถึง 158 color คือ สีของเสน เปนคาตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-20 #include <ipst.h> void setup() { glcdFillRect(32,40,64,80,GLCD_RED); // สรางภาพสีเหลี ่ ยมพื ่ ้นสีแดง ขนาด 64 x 80 พิกเซล } void loop() {}

   

 

  300000000000000000000  400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000






     112

6.3.19 glcdLine เปนฟงกชั่นลากเสนจากจุดหนึ่งไปยังอีกจุดหนึ่ง กําหนดเปนพิกัดในแนวแกนนอน (x) และ แกนตั้ง (y) รูปแบบ void glcdLine(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned int color) พารามิเตอร x1 คือคาตําแหนงเริ่มตนของเสนบนแกน x มีคาระหวาง 0 ถึง 127 y1 คือคาตําแหนงเริ่มตนของเสนบนแกน y มีคาระหวาง 0 ถึง 159 x2 คือคาตําแหนงสิ้นสุดของเสนบนแกน x มีคาระหวาง 0 ถึง 127 y2 คือคาตําแหนงสิ้นสุดของเสนบนแกน y มีคาระหวาง 0 ถึง 159 color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-21 #include <ipst.h> void setup() { glcdLine(0,0,127,159,GLCD_RED); // ลากเสนสีแดงทแยงมุมจากดานบนซายลงมาดานลางขวา } void loop() {}   3  4

0 0 0000000000000000 0000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000

   34

0 0


    

113

6.3.20 glcdCircle เปนฟงกชั่นวาดเสนรูปวงกลมจากการกําหนดจุดกึ่งกลางของวงกลมและความยาวของรัศมี รูปแบบ void glcdCircle(unsgined int x, unsgined int y, unsgined int radius,unsgined int color) พารามิเตอร x คือ พิกัดจุดศูนยกลางของวงกลมบนแกน x มีคาระหวาง 0 ถึง 127 y คือ พิกัดจุดศูนยกลางของวงกลมบนแกน y มีคาระหวาง 0 ถึง 159 radius คือ คารัศมีของวงกลม color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-22 #include <ipst.h> void setup() { glcdCircle(32,120,31,GLCD_RED);// } void loop() {}

สรางเสนวงกลมสีแดง มีรัศมี 31 พิกเซล

0000000000000000 0000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000 00000000 a000000000 0000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000

 



 


     114

6.3.21 glcdFillCircle เปนฟงกชันวาดรู ่ ปวงกลมที่มีสีพืนจากการกํ ้ าหนดจุดศูนยกลางของวงกลม และความยาวของ รัศมี ฟงกชั่นนี้เปนการสรางรูปวงกลมที่มีสีพื้นแตไมมีเสนกรอบ ในขณะที่ฟงกชั่น glcdCircle เปน การวาดรูปวงกลมที่กําหนดสีของเสนรอบวงได แตภายในวงกลมไมมีสี รูปแบบ void glcdFillCircle(unsigned int x,unsigned int y,unsigned int radius,unsigned int color) พารามิเตอร x คือ พิกัดจุดศูนยกลางของวงกลมบนแกน x มีคาระหวาง 0 ถึง 127 y คือ พิกัดจุดศูนยกลางของวงกลมบนแกน y มีคาระหวาง 0 ถึง 159 radius คือ คารัศมีของวงกลม color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]

ตัวอยางที่ 6-23 #include <ipst.h> void setup() { glcdFillCircle(32,120,31,GLCD_RED); // สรางรูปวงกลมพืนสี ้ แดง รัศมี 31 พิกเซล } void loop() {}

0000000000000000 0000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000 00000000 a000000000 0000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000

 

  


    

115

6.3.22 glcdArc เปนฟงกชั่นวาดสวนโคงของวงกลม โดยระบุตําแหนงจุดกึ่งกลาง รัศมี ตําแหนงจุดเริม่ จุดสิน้ สุดและสีของเสน รูปแบบ void glcdArc(unsigned int x,unsigned int y,unsigned int r,int start_angle,int end_angle,uint color) พารามิเตอร x คือตําแหนงจุดกึ่งกลางในแนวแกน x y คือตําแหนงจุดกึ่งกลางในแนวแกน y r คือรัศมีของเสนโคง start_angle คือตําแหนงมุมของจุดเริ่มตนของวงกลม end_angle คือตําแหนงมุมจุดสินสุ ้ ดของวงกลม color คือสีของเสนวงกลม

ตัวอยางที่ 6-24 #include <ipst.h> void setup() { glcdArc(48,80,16,30,150,GLCD_RED); glcdCircle(48,75,5,GLCD_YELLOW); glcdCircle(80,75,5,GLCD_YELLOW); glcdArc(80,80,16,30,150,GLCD_RED); glcdFillCircle(64,90,7,GLCD_GREEN); glcdArc(64,100,30,220,320,GLCD_RED); } void loop() {}


     116


  

117

 

    7.1 LED คืออะไร LED (Light Emiting Diode) หรือไดโอดเปลงแสงเปนอุปกรณเอาตพุตสําหรับการแสดงผล ซึงสามารถติ ่ ดสวางไดเมื่อไดรับแรงดันกระตุนอย  างเหมาะสม โดย LED มีใหเลือกใชงานไดหลายสี อาทิ สีแดง, เหลือง, เขียว, นําเงิ ้ น, ขาว, สม, มวง เปนตน LED สามารถกําเนิดแสงออกมาไดเมื่อไดรับจายไฟอยางถูกตอง การจายไฟให LED ทํางาน เรียกวา การไบแอส (bias) และการไบแอสที่ทําให LED ทํางาน เรียกวา การไบแอสตรง (forward bias) โดยปกติแรงดันทีใช ่ ในการขับหรือไบแอสให LED ทํางานจะมีคาอยูระหวาง 1-4.5 V ขึนอยู ้ กั บ สารทีนํ่ ามาใชทํา LED และขึนอยู ้ กั บปริมาณกระแสทีไหลผ ่ าน กลาวคือ ถากระแสไหลผาน LED มาก มีผลทําใหแรงดันที่ตกครอม LED มีคามากและแสงที่ LED กําเนิดออกมาก็จะสวางมากขึนด ้ วย โดย ปกติมักจะกําหนดใหแรงดันไบแอสตรงของ LED เทากับ 2V ในรูปที่ 7-1 เปนสัญลักษณ, โครงสราง และการจัดขาของ LED LED สามารถเปลงแสงออกไดหลายสีขึนอยู ้ กั บวา นําสารกึงตั ่ วนําชนิดใดมาสรางเปน LED ถาหากเปนสีแดงและเหลืองทํามาจากแกลเลียมอาร ่ เซไนดฟอสไฟด (GaAsP) สวนสีเขียวทํามาจาก แกลเลียมฟอสไฟด ่ (GaP) และ LED ที่ใหแสงอินฟาเรดซึงทํ ่ ามาจากแกลเลียมอาร ่ เซไนด (GaAs) R1

A

K

(ก) สัญลักษณของ LED

ขาแคโทด

ขาแอโนด

(ข) โครงสรางภายในของ LED

Vs

LED1

+

I1

รูปที่ 7-1 แสดงสัญลักษณ, โครงสรางและการจัดขาของไดโอด รูปที่ 7-2 การตอตัวตานทานเพื่อ เปลงแสงหรือ LED จํากัดกระแสใหแก LED


   118

7.2 การใชงาน LED LED ตองการแรงดันไบแอสตรงประมาณ 2V และยอมใหกระแสไฟฟาไหลผานไดไมเกิน 40mA แตปริมาณกระแสไฟฟาทีเหมาะสมคื ่ อ 10 ถึง 20mA ดังนันการใช ้ งาน LED จึงตองมีตัวตานทานจํากัด กระแสไฟฟาตออนุกรมรวมอยูดวย ดังในรูปที่ 7-2 การหาคาของตัวตานทานที่ใชในการจํากัดกระแสไฟฟาให LED ทําไดโดยใชสูตร RS 

Vcc  VF IF

โดยที่ VCC คือไฟเลี้ยง VF คือแรงดันไบแอสตรงที่ตกครอม LED IF คือกระแสไฟฟาทีไหลผ ่ าน LED เมื่อไดรับไบแอสตรง ในทางตรงกันขาม หากจายแรงดันไบแอสกลับแก LED นอกจาก LED จะไมทํางานแลว อาจ ทําให LED เสียหายเนืองจาก ่ LED มีอัตราการทนแรงดันยอนกลับไดไมสูงนัก เพียง 3 ถึง 10V เทานัน้

7.3 การควบคุม LED ดวยไมโครคอนโทรลเลอรและโปรแกรมภาษา C การควบคุมการติด/ดับของ LED นันผู ้ พั ฒนาสามารถใชสญญาณจากจุ ั ดตอพอรตใดๆ ของแผง วงจร IPST-SE ก็ได โดยในการเขียนโปรแกรมควบคุมการติด/ดับของ LED นันใช ้ กลุมคํ  าสังเอาต ่ พุตเพือ่ ควบคุมสถานะของจุดตอพอรตทีเชื ่ อมต ่ อกับ LED ฟงกชันหรื ่ อคําสังหลั ่ กของโปรแกรมภาษา C/C++ สําหรับชุดกลองสมองกล IPST-MicroBOX (SE) ที่นํามาใชควบคุมการทํางานของ LED คือ out ซึงบรรจุ ่ อยูในไลบรารี ipst_in_out.h ในการใช งานจึงตองผนวกไฟลไบรารี ipst_in_out.h หรือ ipst.h ดวยคําสั่ง #include ที่สวนหัวของโปรแกรม กอนเสมอ ฟงกชั่น out มีรูปแบบและการเรียกใชดังนี้ out เปนฟงกชันกํ ่ าหนดระดับสัญญาณหรือขอมูลดิจิตอลไปยังขาพอรตที่กําหนด รูปแบบ out(char _bit,char _dat) พารามิเตอร _bit - กําหนดขาพอรตทีต่ องการ มีคา 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 _dat - กําหนดขอมูลที่ตองการสงออก มีคาเปน 0 หรือ 1

ตัวอยางที่ 7-1 out(17,1); out(18,0);

// กําหนดใหขาพอรต 17 เปน “1” // กําหนดใหขาพอรต 18 เปน “0”


  

119

     เพื่อใหเครื่องมือและอุปกรณอยูในสภาพที  พร ่ อมทํางานตลอดเวลา สิ่งที่ควรกระทําทุกครั้ง ทีใช ่ งานชุดกลองสมองกล IPST-MicroBOX คือ 1. ปดสวิตชไฟเลี้ยงทุกครั้งทีมี่ การถอดหรือตอสายเขากับคอมพิวเตอรและชุดโปรแกรม 2. ปดสวิ ตชไฟเลี้ยงทุกครั้งที่มีการตอหรือปลดสายของแผงวงจรตรวจจับสัญญาณหรือ อุปกรณใดๆ เขากับแผงวงจรควบคุม IPST-SE 3. หลังจากทีทดลองเสร็ ่ จในแตละการทดลอง ควรปดสวิตชไฟเลียงก ้ อนทีจะทํ ่ าการปลดสาย สัญญาณเพือต ่ อแผงวงจรใหมเขาไปเพื่อทําการทดลองในหัวขอใหม 4. ไมควรปลดหรือตอสายสัญญาณของแผงวงจรใดๆ เขากับแผงวงจร IPST-SE ในขณะที่ แผงวงจรกําลังทํางาน เวนแตมีขันตอนการปฏิ ้ บัติอืนใดที ่ ระบุ ่ เจาะจงวาตองสายสัญญาณในขณะ ทํางานของการทดลองนั้นๆ 5. หากมีความผิดพลาดใดๆ เกิดขึ้น ตองปดสวิตชไฟเลี้ยงทันที 6. ไมใชอะแดปเตอรไฟตรงที่มีแรงดันขาออกเกิน +9V กับแผงวงจร IPST-SE 7. หลังจากเสร็จสินการทดลอง ้ ใหปลดสายเชือมต ่ อคอมพิวเตอรและสายของอะแดปเตอร หรือแหลงจายไฟออกจากแผงวงจร IPST-SE เสมอ


   120

     ปฏิบัติการที่ 1-1 สั่งการให LED ติดสวาง การเชือมต ่ อทางฮารดแวร เขากับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE 30 A6 27 A3 28 A4 25 A1

S

O

KNOB

OK

Hello0Wo rld00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

ON

SW1

UART1

16

18

17

19

+5

20

RESET

#include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() {} void loop() { out(17,1); // สั่งให LED ที่จุดตอพอรต 17 ติดสวาง delay(500); // หนวงเวลา 0.5 วินาที out(17,0); // สั่งให LED ที่จุดตอพอรต 17 ดับ delay(500); // หนวงเวลา 0.5 วินาที }

LOW

1

2 RxD1 3 TxD1

2

DC MOTOR



D

29 A5 26 A2

+

USB

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0

ZX-LED + S

8 SCL 9 SDA

่ อแผงวงจร ZX-LED  เชือมต

SERVO

คําอธิบายโปรแกรม โปรแกรมจะสั่งใหสงสัญญาณ “1” ออกมา ทางจุดตอพอรต 17 สัญญาณ “1” มีแรงดัน ไฟฟา +5V จึงทําให LED ติดสวางได และ กําหนดใหติดนาน 0.5 วินาที จากนันจึ ้ งสั่งให ดับดวยการสงสัญญาณ “0” ซึงมี ่ แรงดันไฟฟา 0V ทําใหไมมีแรงดันและกระแสไฟฟาสงไปขับ LED ได LED ที่แผงวงจร ZX-LED จึงดับลง

โปรแกรมที่ L1-1 : ไฟล LedTest01.pde โปรแกรมภาษา C สําหรับทดลองขับ LED เบืองต ้ น


  

121

ขันตอนการทดลอง ้ 1.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชือ่ LEDtest01 1.1.2 เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 2

 3

  30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

ON

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

 

USB

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0

4

KNOB

8 SCL 9 SDA

1

SERVO

1.1.3 เลือกชนิดหรือรุนของฮาร  ดแวรใหถูกตอง โดยเลือกทีเมนู ่ Tools > Board > IPST-SE > ATmega644P ดังรูป


   122

1.1.4 เลือกพอรตติดตอกับแผงวงจร IPST-SE โดยเลือกที่เมนู Tools > Serial Port ดังรูป (ตําแหนงของพอรตที่ ใชเชือมต ่ ออาจแตกตางกันในคอมพิวเตอรแตละเครื่อง)

1.1.5 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม to Wiring Hardware

หรือเลือกทีเมนู ่ File > Upload

1.1.6 รันโปรแกรม สังเกตการทํางานของ LED LED ที่ตอกับจุดตอพอรต 17 ติด-ดับทุกๆ 0.5 วินาที เพิ่มเติม ผูพั ฒนาสามารถกําหนดอัตราในการติด-ดับหรืออัตราการกะพริบของ LED ได ดวยการ ปรับคาเวลาในฟงกชัน่ delay(); ภายในโปรแกรมที่ L1-1 1.1.7 ทดลองแกไขโปรแกรมที่ L1-1 ให LED มีความเร็วในการติด-ดับชาลง 1.1.8 ทดลองแกไขโปรแกรมที่ L1-1 ให LED มีความเร็วในการติด-ดับเร็วขึ้น 1.1.9 ทดลองแกไขโปรแกรมที่ L1-1 เพื่อเปลียนจุดตอพอรตจากเดิมพอรตหมายเลข 17 เปนพอรตอืนๆ ่ เชน 18, 19 และ 20


  

123

ปฏิบัติการที่ 1-2 ควบคุม LED ดวยเวลา การเชือมต ่ อทางฮารดแวร ่ อแผงวงจร ZX-LED กับจุดตอพอรต 17  เชือมต

ของแผงวงจรหลัก IPST-SE

ขันตอนการทดลอง ้ 1.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-2 บันทึกในชือ่ LEDtimer 1.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม to Wiring Hardware

หรือเลือกทีเมนู ่ File > Upload

1.2.3 รันโปรแกรม สังเกตการทํางานของ LED LED จะติดนาน 4 วินาที หลังจากนั้นจึงดับลง 1.2.4 แกไขโปรแกรมที่ L1-2 ให LED ติดสวางนานขึ้น 1.2.5 แกไขโปรแกรมที่ L1-2 ให LED ดับเร็วขึ้น #include <ipst.h> void setup() {} void loop() { out(17,1); delay(4000); out(17,0); while(1); } คําอธิบายโปรแกรม

// ผนวกไฟลไลบรารีหลัก

// สั่งให LED ทีจุ่ ดตอพอรต 17 ติดสวาง // หนวงเวลา 4 วินาที // สั่งให LED ทีจุ่ ดตอพอรต 17 ดับ // วนทํางานทีคํ่ าสั่งนี้

ในโปรแกรมจะกําหนดใหเขียนขอมูล “1” ไปยังขาพอรต 17 ซึงต ่ อกับ ZX-LED ทําให LED ติดสวางนาน ประมาณ 4 วินาทีกอนทีจะดั ่ บลง เนืองจากเมื ่ อสั ่ งให ่ LED ติดสวางจากการสังขั ่ บสัญญาณเอาตพุตเปน “1”แลว ตอดวยการหนวงเวลาดวยฟงกชัน่ delay หรือ sleep โปรแกรมจะทํางานอยูที คํ่ าสังนี ่ นานเป ้ นเวลาประมาณ 4000 มิลลิวินาที หรือ 4 วินาที หลังจากครบรอบเวลา จึงสงสัญญาณ “0” เพือควบคุ ่ มให LED ดับ และวนอยูที ่คําสั่ง while(); ทําใหไมมีการทํางานใดๆ LED จึงดับจนกวาจะมีการกดสวิตช RESET หรือปดเปดไฟเลียงใหม ้

โปรแกรมที่ L1-2 : ไฟล Ledtimer.c โปรแกรมภาษา C สําหรับทดลองควบคุม การทํางานของ LED ดวยเวลา


   124


    

125



   ในบทที่ผานมาเปนการนําเสนอการควบคุม LED ดวยกระบวนการทางซอฟตแวร แต LED ที่ควบคุมนันมี ้ เพียงชองเดียว ในบทนีนํ้ าเสนอการควบคุม LED ในจํานวนมากชองขึนถึ ้ ง 8 ชองใน เวลาเดียวกัน อุปกรณเอาตพุตที่นํามาใชในการเรียนรูคือ แผงวงจร ZX-LED8 ซึงมี ่ LED 8 ดวงพรอมวงจร ประกอบ การควบคุม LED ทั้ง 8 ดวงใหทํางานพรอมกัน หรือทํางานแยกกันตองใชความรูเกียวกั ่ บ ระบบเลขฐานสองและโครงสรางของขอมูลทังแบบบิ ้ ตและไบตในการกําหนดรูปแบบของขอมูลทีนํ่ า มาแสดงผล

8.1 เลขฐานสอง ในระบบตัวเลขฐานสองนี้มีตัวเลขเพียง 2 ตัวคือ “0” และ “1” ซึงสามารถใช ่ แทนสถานะตํา่ สูง, เปด-ปด, ไมตอ-ตอ, ดับ-ติด เปนตน แตถาหากนําตัวเลขฐานสองมากกวา 1 หลักมาพิจารณา เชน 2 หลัก จะทําใหเกิดจํานวนของการเปลียนแปลงเป ่ น 4 สถานะ หากแทนดวยการติด-ดับของหลอด ไฟ จะได ดับ-ดับ, ดับ-ติด, ติด-ดับ และติด-ติด ถาหากมี 3 หลักก็จะเกิดการเปลี่ยนแปลง 8 สถานะ จึงสามารถสรุปเปนสมการคณิตศาสตรและความสัมพันธของจํานวนหลักและสถานะของการเปลียน ่ แปลงไดดังนี้ จํานวนของการเปลี่ยนแปลง = 2 จํานวนหลัก ถามี 2 หลักจะไดจํานวนของการเปลี่ยนแปลง 22 = 4 ถามี 3 หลักจะไดจํานวนของการเปลี่ยนแปลง 23 = 8 ถามี 4 หลักจะไดจํานวนของการเปลี่ยนแปลง 24 = 16


     126

8.1.1 การนับจํานวนของระบบเลขฐานสอง เนืองจากเลขฐานสองมี ่ ตัวเลขเพียง 2 ตัวคือ 0 และ 1 เมือมี ่ การนับจํานวนขึน้ จึงตองมีการเพิม่ จํานวนหลัก ดังนันเพื ้ อให ่ เห็นการเปลียนแปลงอย ่ างชัดเจนจะใชเลขฐานสิบเปนตัวเปรียบเทียบดังนี้ เลขฐานสอง 00 01 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111

เลขฐานสิบ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

8.1.2 ตัวแปรของเลขฐานสอง (bit variables) เมือเลขฐานสองถู ่ กนํามาใชงานมากขึนจาก ้ 1 หลักเปน 2, 3 จนถึง 8 หลัก ทําใหเกิดตัวแปรใหมๆ ดังนี้ (1) บิต (bit) หมายถึง หนึ่งหลักของเลขฐานสอง (binary digit) มีเลข 0 กับ 1 เทานัน้ (2) ไบต (byte) หมายถึง เลขฐานสองจํานวน 8 หลักหรือเทากับ 8 บิต ไบตมีความสําคัญ มากเพราะในระบบคอมพิวเตอรจะประมวลขอมูลเลขฐานสองครังละ ้ 8 บิตหรือ 1 ไบตเปนอยางนอยเสมอ (3) LSB : Least Significant Bit หรือบิตนัยสําคัญตํ่าสุด หมายถึง บิตทีอยู ่ ในตําแหนง ขวาสุดของเลขฐานสอง มีคานําหนั ้ กประจําหลักตํ่าสุดคือ 20 ถาเปน “1” คาของหลักสุดทายเทากับ 1 x 20 = 1 x 1 = 1 แตถาบิตสุดทายนีเป ้ น “0” คาของหลักสุดทายจะเทากับ 0 x 20 = 0 x 1= 0


    

127

(4) การกําหนดชื่อหลักของเลขฐานสอง บิตทีอยู ่ ขวามือสุดจะถูกเรียกวา บิตศูนย (bit 0 : b0) หรือบิต LSB บิตถัดมาเรียกวา บิตหนึ่ง (bit 1 : b1) ไลไปทางซายจนครบ สามารถสรุปชื่อหลัก ของเลขฐานสองไดคือ b7 b6 b5 b4 b3 b2 b1 b0 โดยตัวเลขแสดงตําแหนง 0-7 ตองเขียนเปนตัวหอย เสมอ แตเพื่อความสะดวกจึงขอเขียนในระดับเดียวกันเปน b7 b6 b5 b4 b3 b2 b1 b0 (5) MSB : Most Significant Bit หรือบิตนัยสําคัญสูงสุด หมายถึงบิตทีอยู ่ ในตําแหนง ซายมือสุดของเลขฐานสองจํานวนนั้นๆ หากเลขฐานสองมีจํานวน 8 บิต บิต MSB คือบิต 7 (bit 7 : ้ กประจําหลักเทากับ 27 หรือ 128 แตถาหากจํานวนบิตมีนอยกวานัน้ เชน 6 บิต, 5 บิต b7) มีคานําหนั หรือ 4 บิต บิต MSB จะมีคานําหนั ้ กประจําหลักเปลี่ยนเปน 25, 24 และ 23 ตามลําดับ

8.1.3 คานําหนั ้ กประจําหลัก ในเลขฐานสิบจะมีคานําหนั ้ กประจําหลัก โดยคิดจากจํานวนสิบยกกําลัง โดยในหลักหนวยมี คานําหนั ้ กประจําหลักเปน 100 หรือ 1 หลักสิบมีคานําหนั ้ กประจําหลักเปน 101 หรือ 10 ในหลักรอย มีคานําหนั ้ กประจําหลักเปน 102 หรือ 100 เปนตน ในเลขฐานสองก็มีคานําหนั ้ กประจําหลักเชนกัน แตจะคิดจากจํานวนสองยกกําลัง โดยในหลัก ขวาสุดคือ บิต 0 หรือบิต LSB มีคานําหนั ้ กประจําหลักเปน 20 หรือเทากับ 1 หลักถัดมาคือบิต 1 มีคา นําหนั ้ กเปน 21 หรือ 2 ถัดมาเปนบิต 2 มีคานําหนั ้ กเปน 22 หรือ 4 เมื่อพิจารณาที่เลขฐานสอง 8 บิต คานําหนั ้ กประจําหลักสามารถสรุปไดดังนี้ บิต 0 1 2 3 4 5 6 7

คานํ้าหนักประจําหลัก 20 21 22 23 24 25 26 27

เลขฐานสิบ 1 2 4 8 16 32 64 128

จากคานําหนั ้ กประจําหลักจึงสามารถแปลงเลขฐานสองเปนฐานสิบ หรือแปลงฐานสิบเปนฐาน สองได


     128

8.2 การแปลงเลขฐานสองและฐานสิบ 8.2.1 การแปลงเลขฐานสองเปนฐานสิบ เริ่มตนดวยการกําหนดคานําหนั ้ กประจําหลักของเลขฐานสองแตละหลัก แลวคูณดวยคาของ เลขฐานสองในหลักนันๆ ้ สุดทายนําผลคูณทั้งหมดมารวมกัน ก็จะไดเปนเลขฐานสิบที่ตองการ ตัวอยางที่ 8-1 จงแปลงเลขฐานสอง 1011 เปนฐานสิบ (1) กําหนดคานํ้าหนักประจําหลัก หลัก b3 b2 b1 b0 22 21 20 คานํ้าหนักประจําหลักคือ 23 เลขฐานสอง 1 0 1 1 (2) จากนั้นนําคานําหนั ้ กประจําหลักคูณกับคาของเลขฐานสองประจําบิตนั้นแลว นําผลคูณของทุกหลัก มารวมกัน เลขฐานสิบ

= (1x23) + (0x22) + (1x21) + (1x20) = (1x8) + (0x4) + (1x2) + (1x1) = 8+0+2+1 = 11

8.2.2 การแปลงเลขฐานสิบเปนเลขฐานสอง จะใชวิธีการหารเลขฐานสิบจํานวนนันด ้ วย 2 แลวเก็บคาของเศษทีได ่ จากการหารเปนเลขฐานสอง ในแตละหลัก โดยเศษทีได ่ จากการหารครังแรกไม ้ วาจะเปน “0” หรือ “1” จะเปนหลักทีมี่ นัยสําคัญตําสุ ่ ด หรือบิต LSB หรือบิต 0 (b0) และเศษตัวสุดทายจะเปนเลขฐานสองหลักทีมี่ นัยสําคัญสูงสุดหรือบิต MSB ตัวอยางที่ 8-2 จงแปลงเลขฐานสิบ 13 เปนเลขฐานสอง (1) หาร 13 ดวย 2 ได 6 เศษ 1 เศษทีได ่ จะเปนบิตศูนย (bo) หรือบิต LSB นันคื ่ อ บิต LSB = 1 (2) หาร 6 ดวย 2 ได 3 เศษ 0 เศษที่ไดจะเปนบิตหนึง่ (b1) ซึ่งก็คือ 0 (3) หาร 3 ดวย 2 ได 1 เศษ 1 เศษที่ไดจะเปนบิตสอง (b2) ซึ่งก็คือ 1 (4) หาร 1 ดวย 2 ได 0 เศษ 1 เศษที่ไดจะเปนบิตสาม (b3) และเปนบิต MSB ซึ่งก็คือ 1 ดังนั้นจะไดเลขฐานสองเทากับ 1101


    

129

8.3 เครื่องหมายของเลขฐานสอง ในเลขฐานสองสามารถที่จะมีทั้งคาตัวเลขที่เปนบวกและลบเชนเดียวกับเลขฐานอืนๆ ่ โดยจะ ใชบิต MSB เปนตัวกําหนดเครื่องหมายของเลขฐานสอง ถากําหนดบิต MSB เปน “0” เลขจํานวน นันจะมี ้ คาเปนบวก และหากกําหนดบิต MSB เปน “1” เลขจํานวนนั้นจะมีคาเปนลบ ขอมูลตอไปนีจะเป ้ นการแสดงคาของจํานวนเลขฐานสอง เมือคิ ่ ดเครื่องหมายและไมคิดเครือง ่ หมายโดยไดทําการแปลงเปนเลขฐานสิบเปรียบเทียบเพื่อใหเห็นความแตกตางอยางชัดเจน เลขฐานสอง 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

เลขฐานสิบ คิดเครืองหมาย ่ 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1

ไมคิดเครื่องหมาย 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

ในกรณีคิดเครื่องหมาย เมื่อนับถอยหลังจาก 0000 ก็จะเปน 1111 นันคื ่ อเกิดการถอยหลังหนึ่ง จํานวนหรือ -1 นับถอยหลังตอไปจะเปน 1110 ซึ่งก็คือ -2 เมื่อเปนเชนนี้การแปลงเลขฐานสองที่คิด เครืองหมายเป ่ นฐานสิบจึงไมสามารถใชวิธีการแปลงแบบเดิมได แตก็พอมีเทคนิคในการพิจารณา โดย ใชหลักเกณฑคานําหนั ้ กประจําหลัก ยกตัวอยาง เลขฐานสอง 1000 เลข 1 ที่อยูหนาสุด มีคานําหนั ้ ก ประจําหลักเทากับ 23 หรือ 8 จากการกําหนดวา ถาคิดเครื่องหมาย เมื่อบิต MSB เปน “1” จะตองเปน คาลบ ดังนันจึ ้ งเปน -8 สวนอีก 3 หลักที่เหลือจะเปนเลขบวกจึงกลายเปน -8+0 = -8 มาพิจารณาที่เลข ฐานสอง 1101 บิตแรกเปนลบเทากับ -8 สวน 3 บิตหลังเปนบวกมีคา +5 จึงได -8+5= -3 เปนตน


     130

8.4 สวนประกอบของขอมูล ขอมูลทีใช ่ ในการประมวลผลของไมโครคอนโทรลเลอรนันสามารถกระทํ ้ าไดตังแต ้ 1 บิตขึนไป ้ สําหรับไมโครคอนโทรลเลอร ATmega16 ในชุด IPST-MicroBOX จะทํางานกับขอมูล 1 ถึง 16 บิต โดย มีการกําหนดโครงสรางสวนประกอบของขอมูลทีเป ่ นมาตรฐานเดียวกับไมโครคอนโทรลเลอรตัวอืน่ ทัวโลกและเหมื ่ อนกับในคอมพิวเตอรดวย ดังนี้ เวิรด ไบตสูง (8 บิตบน) ไบตต่ํา (8 บิตลาง) MSB LSB 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

บิต ขอมูล * 1 1 1 0 1 1 1 0 0 0 1 1 1 0 0 1 คาน้ําหนัก 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 * สามารถเปลี่ยนแปลงได

บิต-นิบเบล-ไบต ิ -เวริ ด เปนชือหน ่ วยของขอมูลทีใช ่ ในการประมวลผลของไมโครคอนโทรลเลอร บิต (bit) เปนขนาดของขอมูลเลขฐานสองที่เล็กที่สุด เทากับ 1 หลักของเลขฐานสอง นิบเบิล (nibble) มีขนาดเทากับ 4 บิต ไบต (byte) มีขนาดเทากับ 8 บิต เวิรด (word) มีขนาดเทากับ 16 บิต หรือ 2 ไบต

8.5 แผงวงจรไฟแสดงผล 8 ดวง : ZX-LED8 เปนแผงวงจรที่มี LED ขนาด 3 มิลลิเมตรสําหรับแสดงผล 8 ดวง พรอมจุดตอพวงเอาตพุตเพื่อ นําไปใชในการขับรีเลยไดดวย โดยแผงวงจร ZX-LED8 นีจะต ้ อเขากับขาพอรตใดของแผงวงจร IPSTSE ก็ได โดยใชขาพอรตเพียงขาเดียวในการควบคุมและขับ LED ใหติดดับตามที่ตองการไดพรอมกัน ถึง 8 ดวง มีหนาตาและวงจรทางไฟฟาของแผงวงจร ZX-LED8 แสดงในรูปที่ 8-1 ในแผงวงจร ZX-LED8 ใชการติดตอกับแผงวงจรหลัก IPST-SE ในแบบสือสารข ่ อมูลอนุกรม รวมกับคําสังทางซอฟต ่ แวร ผูพัฒนาโปรแกรมสามารถเขียนโปรแกรมให ZX-LED8 ติดดับไดตังแต ้ 1 ถึง 8 ตัว หรือจะเขียนโปรแกรมใหทํางานเปนไฟวิงได ่ ตังแต ้ 1 ถึง 8 ดวงเชนกัน


131

    

MSB D7

D6

D5

D4

D3

D2

D1

LSB D0

7

6

5

4

3

2

1

0

+5V

47

47

47

47

47

47

47

47

7

6

5

4

3

2

1

510

510

510

510

510

9

8

5

6

7

D7

D6

D5

D4

D3

510

510

14

15

D2

XT2

2

3

RXD 12

+5V 4k7

VDD

RST

1

4

510

16

D1

D0

ZX-LED controller PIC18F14K50 with firmware UART 9600 bps. to 8 bit parallel outputs XT1

0

VDDU

VSS 20

PGD 19

PGC 18

17

0.1F 63V

4k7

Ceramic Resonator (Option) 47F 6.3V

0.1F 63V

GND RxD +5V

ICSP

รูปที่ 8-1 ลักษณะและวงจรทางไฟฟาของแผงวงจรไฟแสดงผล ZX-LED8 ทีใช ่ ในชุดกลองสมองกล IPSTMicroBOX (SE)


     132

 7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

LED8 +5V RxD GND

Serial LED-8 UART communication 9600 bps. Baud

      

Secondary Education

30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

Rowl00 Wo rld00 00000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015

ON

UART1



16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB

SERVO

 

รูปที่ 8-2 แนวทางการตอใชงานแผงวงจรไฟแสดงผล ZX-LED8 กับแผงวงจรหลัก IPST-SE ในชุดกลอง สมองกล IPST-MicroBOX (SE) ที่ดานบนของแผงวงจร ZX-LED8 มีจุดตอ JST ซึงต ่ อพวงมาจาก LED ทํางานทีลอจิ ่ ก “1” มี ระดับแรงดันไฟตรงขาออกประมาณ +5V ดังแสดงในรูปที่ 8-3 จึงสามารถใชสัญญาณเอาตพุตจากจุด นีไปต ้ อกับวงจรขับโหลดกระแสไฟฟาสูง อาทิ แผงวงจรขับรีเลย ไดทันที โดยไมตองเขียนโปรแกรม ควบคุมเพิ่มเติม

8.6 กลุมคําสั่งโปรแกรมภาษา C/C++ ของไลบรารี ipst.h ทีใช ่ ควบคุม LED 8 ดวงบนแผงวงจร ZX-LED8 pinLED8(); LED8

ใชกําหนดจุดตอพอรตของแผงวงจร IPST-SE ทีต่ อกับแผงวงจร ZX-LED8 ใชกําหนดคาการแสดงผลของ LED 8 ดวงบนแผงวงจร ZX-LED8


133

    

+5V

+5V +5V

+5V

7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

Serial LED-8 UART communication 9600 bps. Baud

+5V RxD GND

LED8

     

Secondary Education

30 A6 27 A3

D

28 A4 25 A1 OK

Rowl00Wo rld000 0000000 0Row0100000000 0000000 00Row020000000 0000000 000Row03000000 0000000 0000Row0400000 0000000 00000Row050000 0000000 000000R0006000 0000000 0000000R000700 0000000 00000000Row080 0000000 000000000Row09 0000000 0000000000Row0 1000000 00000000000Row 0110000 000000000000Ro w012000 0000000000000R ow01300 00000000000000 Row0140 00000000000000 0Row015

ON

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2

KNOB

8 SCL 9 SDA

24 A0

  

USB

SERVO

 

รูปที่ 8-3 แสดงความสัมพันธของการติดดับของ LED กับระดับแรงดันไฟฟาทีจุ่ ดตอเอาตพุต 0 ถึง 7 ของ แผงวงจรไฟแสดงผล ZX-LED8


     134

    ปฏิบัติการที่ 2-1 ควบคุม LED ดวยขอมูลเลขฐานสอง ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ติดหรือ ดับดวยขอมูลทีกํ่ าหนดไว

การเชือมต ่ อทางฮารดแวร  เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก

IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย

สายสัญญาณ JST3AA-8

ขั้นตอนการทดลอง 2.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L2-1 บันทึกในชื่อ LED8test.pde 2.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม

7

6

5

4

3

2

1

0

7 MSB

6

5

4

3

2

1

0 LSB

Serial LED-8 UART communication 9600 bps. Baud

+5V RxD GND

LED8 Secondary Education

30 A6 27 A3

D

29 A5 26 A2 28 A4 25 A1 OK

Rowl00 Wo rld00 0000 0000 0Row010000000 0000 0000 00Row0200 0000 0000 0000 000Row0300000 0000 0000 0000Ro w040000 0000 0000 00000Row050000000 0000 000000 R000600 0000 0000 000000 0R0 00700000 0000 000000 00Row080000 0000 000000 000Row090000000 000000 0000Row01000000 000000 00000Ro w011 0000 000000 000000Row012000 000000 0000000 Row01300 000000 0000000 0Row0140 000000 0000000 00Ro w015

ON

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1



รูปที่ L2-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 2 และ 3

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

24 A0 KNOB

8 SCL 9 SDA

USB


    

#include <ipst.h> void setup() { pinLED8(20); }

135

// ผนวกไลบรารีหลัก // เชือมต ่ อ ZX-LED8 ผานทางจุดตอพอรต 20

void loop() { LED8(0b10000001); } คําอธิบายโปรแกรม

// LED บิต 7 และ 0 ติดสวาง ที่เหลือดับหมด

การทํางานของโปรแกรมนี้ ขอมูลเลขฐานสอง 10000001 ถูกสงไปยังแผงวงจร ZX-LED8 ผานฟงกชั่น LED8 โดยใชจุดตอพอรต 20 ซึ่งประกาศไวดวยฟงกชั่น pinLED8 ทีส่ วนของ setup() ขอมูล 8 บิตที่สงไปในรูปของเลขฐานสองสามารถเทียบเคียงไดกับตําแหนงหลักของ LED ทัง้ 8 ดวง นันเอง ่ โดยคาของหลักขอมูลใดเปน “1” LEDประจําหลักนั้นจะติดสวาง ในทางกลับกันถามีคาเปน “0” LED ก็จะดับ ดังนั้นถาทําการแกไขโปรแกรมเพื่อสงคาใหมจะไดผลลัพธทีแตกต ่ างกันไป

โปรแกรมที่ L2-1 : ไฟล LED8test.pde โปรแกรมภาษา C สําหรับทดลองควบคุม LED 8 ดวง 2.1.3 สังเกตผลการทํางานทีแผงวงจร ่ ZX-LED8 LED ทีหลั ่ ก 0 และ 7 ของแผงวงจร ZX-LED8 ติดสวาง จากผลของขอมูล 10000001 ทีกํ่ าหนดในโปรแกรม 7

6

5

4

3

2

1

0

2.1.4 ทดลองแกไขขอมูลแสดงผลเปน LED8(0b11110000); ทําการคอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE ไดผลการทํางานดังนี้ 7

6

5

4

3

2

1

0

2.1.5 ทดลองแกไขขอมูลแสดงผลเปน led8(0b00011000); ทําการคอมไพลไฟลโปรเจ็กตใหม แลวดาวนโหลด โปรแกรมไปยังแผงวงจร IPST-SE ไดผลการทํางานดังนี้ 7

6

5

4

3

2

1

0


     136

#include <ipst.h> // ผนวกไลบรารีหลัก void setup() {} void loop() { unsigned char i=0; while(1) { LED8(20,i++); // กําหนดใหใชจุดตอพอรต 20 ในการควบคุม ZX-LED8 // โดยแสดงผลดวยคาของ i ที่เปลียนแปลงจาก ่ 00000000 ถึง 11111111 delay(300); } } คําอธิบายโปรแกรม การทํางานของโปรแกรมนี้ ขอมูลเลขฐานสองทีกํ่ าหนดโดยตัวแปร i ถูกสงออกไปยังแผงวงจร ZX-LED8 ผานฟงกชั่น LED8 ทีเขี ่ ยนในแบบใหม ใหเหลือเพียงบรรทัดเดียว โดยกําหนดพอรตที่ใชในการติดตอแลวตอ ดวยขอมูลทีต่ องการแสดงผล ทําใหโปรแกรมกระชับขึน้ โดยขอมูล 8 บิตที่สงไปในรูปของเลขฐานสองนันมี ้ คา 00000000 ถึง 11111111 ตามชนิดของตัวแปร i ทีกํ่ าหนดใหเปนแบบ char ซึ่งมีขนาด 8 บิต

โปรแกรมที่ L2-2 : ไฟล LED8binary.pde โปรแกรมภาษา C/C++ สําหรับทดลองควบคุม LED 8 ดวง ใหแสดงผลตามคาของเลขฐานสองขนาด 8 บิต จาก 00000000 ถึง 11111111 2.1.6 เขียนโปรแกรมที่ L2-2 บันทึกไฟลเปน LED8binary.pde จากนั้นทําการคอมไพลและอัปโหลดโปรแกรมไป ยังแผงวงจร IPST-SE โดยคลิกที่ปุม 2.1.6 สังเกตผลการทํางานทีแผงวงจร ่ ZX-LED8 LED ทัง้ 8 ดวงแสดงเปนรหัสเลขฐานสอง 8 บิต เริ่มจาก 00000000 ถึง 11111111 แลวกลับมาเริมต ่ น ที่ 00000000 ใหมอีกครั้ง โดยมีอัตราการเปลี่ยนขอมูลทุกๆ 0.3 วินาที


    

137

ปฏิบัติการที่ 2-2 ไฟกะพริบ LED 8 ดวง ในการทดลองนีเป ้ นการเขียนโปรแกรมแกรมควบคุมให LED 8 ดวงบนแผงวงจร ZX-LED8 ติดหรือดับ ดวยขอมูลทีกํ่ าหนด โดยในการทดลองนีจะส ้ งขอมูล 11111111 ไปแสดงผลในแบบไฟกะพริบ

การเชือมต ่ อทางฮารดแวร  เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก

IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย

สายสัญญาณ JST3AA-8

ขั้นตอนการทดลอง 2.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L2-3 บันทึกในชื่อ LED8blink.pde 2.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 2.2.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8 LED ทัง้ 8 ดวงของแผงวงจร ZX-LED8 ติดกะพริบในทุกๆ 1 วินาที โดยประมาณ #include <ipst.h> void setup() {} void loop() { LED8(20,0b11111111); sleep(500); LED8(20,0b00000000); sleep(500); } คําอธิบายโปรแกรม

// ผนวกไลบรารีหลัก

// กําหนดให LED ทั้ง 8 ดวงติดหมด // หนวงเวลา 0.5 วินาที // กําหนดให LED ทั้ง 8 ดวงดับหมด // หนวงเวลา 0.5 วินาที

การทํางานของโปรแกรมนี้ มีขอมูลเลขฐานสอง 2 ชุดที่สงออกไปยังแผงวงจร ZX-LED8 ดวยฟงกชั่น LED8 ที่เขียนในแบบกําหนดพอรตที่ใชในการติดตอแลวตอดวยขอมูลที่ตองการแสดงผล โดยชุดแรกคือ 11111111 ทําให LED 8 ดวงติดสวางทังหมด ้ สวนชุดที่ 2 คือ 00000000 ทําให LED ทังหมดดั ้ บ อัตราการติดดับหรือกะพริบถูกกําหนดโดยฟงกชั่น sleep() ซึ่งมีการทํางานเหมือนกับ delay() โดยใน โปรแกรมนี้กําหนดใหเทากับ 500 มิลลิวินาทีหรือ 0.5 วินาที

โปรแกรมที่ L2-3 : ไฟล LED8blink.pde โปรแกรมภาษา C/C++ สําหรับควบคุม LED กะพริบ 8 ดวง


     138

      ปฏิบัติการที่ 3-1 ไฟวิ่ง LED 8 ดวง ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ทํางาน ในลักษณะไฟวิงทางซ ่ ายและขวา

การเชือมต ่ อทางฮารดแวร  เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก

IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย สายสัญญาณ JST3AA-8 (รูปที่ L2-1 ในปฏิบัติการที่ 2 ของบทที่ 8)

ขั้นตอนการทดลอง 3.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L3-1 บันทึกในชื่อ LED8running.pde 3.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 3.1.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร DSP-4 LED จะติดครั้งละ 1 ดวงจากตําแหนงที่อยูทางขวาสุด (บิต 0) ไลมาตามลําดับในลักษณะไฟวิ่งจาก ขวาไปซายจนสุดทางขวา (บิต 7) จากนั้นจะไลกลับทิศทางเปนติดจากดวงซายสุด (บิต 7) กลับมายังดวงขวา สุด (บิต 0) ในลักษณะไฟวิ่งจากซายมาขวา วนทํางานเชนนี้ไปตลอด 7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0




    

139

#include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() { // แสดงขอความของการทดลอง glcdClear(); glcd(0,0,"Example: LED8_02"); glcd(2,0,"connect LED8 to (20)"); glcd(4,0,"LED running LEFT"); glcd(5,0," and RIGHT"); }

pinLED8(20);

void loop() { int i; for (i=0;i<8;i++) { LED8(0x01<<i); delay(300); } for (i=6;i>0;i--) { LED8(0x01<<i); delay(300); } } คําอธิบายโปรแกรม

// ใชจุดตอพอรต 20 ในการเชือมต ่ อ

// กําหนดใหเลื่อนขอมูลไปทางซาย // เลื่อนบิตไปทางซายแลวสงไปแสดงที่ ZX-LED8 โดยมีคาตั้งตนที่ 00000001 // หนวงเวลา 0.3 วินาที // กําหนดใหเลื่อนขอมูลไปทางขวา // เลื่อนบิตไปทางขวาแลวสงไปแสดงที่ ZX-LED8 // หนวงเวลา 0.3 วินาที

โปรแกรมนีทํ้ างานโดยอาศัยการสงขอมูลผานฟงกชัน่ LED8 เพือให ่ LED ติดครังละ ้ 1 ดวงนานประมาณ 0.3 วินาที โดยไลลําดับจากบิต 0 ไปยังบิต 7 และวนกลับจากบิต 7 กลับมายังบิต 0 เปนเชนนี้อยางตอเนือง ่ การทํางานของ LED ในลักษณะไฟวิ่งนี้ของโปรแกรมนี้เกิดจากการเลื่อนบิตขอมูลทังทางซ ้ ายและขวา โดยหลังจากเลื่อนขอมูล 1 ครั้งก็จะสงไปแสดงผลนาน 0.3 วินาที จากนั้นจึงเลือนข ่ อมูลในครั้งตอไป ดานอัตราเร็วในการแสดงผลของ LED จะขึนอยู ้ กับคาหนวงเวลาของฟงกชัน่ delay (หรืออาจใช sleep ก็ได) ถากําหนดใหมีคานอยกวา 300 ก็จะทําให LED แสดงผลการเปลี่ยนแปลงไดเร็วมากขึ้น นันคื ่ อ ไดเห็น ไฟวิงเร็ ่ วขึ้นนั่นเอง

โปรแกรมที่ L3-1 : ไฟล LED8running โปรแกรมภาษา C/C++ สําหรับทดลองควบคุมไฟวิง่ LED 8 ดวง


     140

ปฏิบัติการที่ 3-2 ขับ LED 8 ดวง ดวยรูปแบบขอมูลทีกํ่ าหนดลวงหนา ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ทํางาน ในลักษณะไฟวิ่งตามรูปแบบขอมูลทีกํ่ าหนดไวลวงหนา โดยใชตัวแปรแบบอะเรยในการเก็บตารางรูปแบบขอมูล

การเชือมต ่ อทางฮารดแวร  เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก

IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย สายสัญญาณ JST3AA-8 (รูปที่ L2-1 ในปฏิบัติการที่ 2 ของบทที่ 8)

ขั้นตอนการทดลอง 3.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L3-2 บันทึกในชื่อ LED8pattern.pde 3.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 3.2.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8 LED จะติดตามขอมูลทีกํ่ าหนด ซึ่งมีดวยกัน 4 แบบ โดยเริ่มจากแบบที่ 1 ไปถึง 4 แลวทํางานยอนกลับ จากแบบที่ 4 มายังแบบที่ 1 วนทํางานเชนนี้ไปตลอด

       

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

2

1

0

3




    

#include <ipst.h>

// ผนวกไลบรารีหลัก

int pattern[]={ 0b00011000, 0b00111100, 0b01111110, 0b11111111};

// กําหนดรูปแบบขอมูลแสดงผล // รูปแบบขอมูล #1 // รูปแบบขอมูล #2 // รูปแบบขอมูล #3 // รูปแบบขอมูล #4

141

void setup() { // แสดงขอความของการทดลอง glcdClear(); glcd(0,0,"Example: LED8_pattern"); glcd(2,0,"connect LED8 to (20)"); glcd(4,0,"Pattern LED demo"); }

pinLED8(20);

void loop() { int i; for (i=0;i<4;i++) { LED8(pattern[i]); delay(300); } for (i=2;i>0;i--) { LED8(pattern[i]); delay(300); } } คําอธิบายโปรแกรม

// ใชจุดตอพอรต 20 ในการเชือมต ่ อ

// เปลียนรู ่ ปแบบขอมูลแสดงผล // แสดงผลตามรูปแบบขอมูลจาก 1 ถึง 4 // เปลียนรู ่ ปแบบขอมูลแสดงผล // แสดงผลตามรูปแบบขอมูลจาก 4 ถึง 1

ขอมูลสําหรับการแสดงผลของโปรแกรมจะแตกตางไปจากตัวอยางทีผ่ านๆ มา ในโปรแกรมมีการกําหนด ตารางรูปแบบขอมูลไวลวงหนาเก็บไวในตัวแปร pattern ทีเป ่ นตัวแปรแบบอะเรย 4 ชุด จากนั้นโปรแกรมจะ ใชตัวแปร i เปนตัวชีข้ อมูลของ pattern ออกมาแสดงผลโดยผานฟงกชั่น LED8 ขอมูลแตละชุดจะไดรับการ แสดงผลนานประมาณ 0.3 วินาที

โปรแกรมที่ L3-2 : ไฟล LED8pattern.pde โปรแกรมภาษา C/C++ สําหรับควบคุมไฟวิง่ LED 8 ดวง ในแบบกําหนดรูปแบบการแสดงผลดวยตัวแปรชนิดอะเรย


     142

ปฏิบัติการที่ 3-3 ขับ LED 8 ดวง แสดงผลในแบบกราฟแทง ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ทํางาน ในลักษณะไฟวิ่งตามรูปแบบขอมูลทีกํ่ าหนดไวลวงหนา โดยใชตัวแปรแบบอะเรยในการเก็บตารางรูปแบบขอมูล

การเชือมต ่ อทางฮารดแวร  เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก

IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย สายสัญญาณ JST3AA-8 (รูปที่ L2-1 ในปฏิบัติการที่ 2 ของบทที่ 8)

ขั้นตอนการทดลอง 3.3.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L3-3 บันทึกในชื่อ LED8bargraph.pde 3.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 3.3.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8 LED จะเริ่มติดจากดวงซายสุด (บิต 0) ตามดวยบิต 1 โดยที่ LED ของบิต 0 ยังติดอยู จากนั้นจะทยอย คิดสวางเพิมขึ ่ ้นทีละดวง จนครบ 8 ดวง จากนั้นจะเริ่มดับลงทีละดวงจาก LED บิต 7 ไลตามลําดับจนถึงบิต 1 จากนั้นวนกลับ LED บิต 1 ติดสวาง ตามดวยบิต 2 วนทํางานเชนนี้ไปตลอด ทําใหดูแลวคลายกราฟแทงที่มีการ เพิมค ่ าและลดคาตลอดเวลา 7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0



ตอยอด ผู พัฒนาโปรแกรมสามารถนําเทคนิคนี้ไปใชในการเขียนโปรแกรมเพือแสดงค ่ าของสัญญาณไฟฟาที่ได จากตัวตรวจจับแบบอะนาลอก โดยเมื่อคาของสัญญาณไฟฟามีคาตํา้ LED จะติดดวงเดียว และคิดเพิ่มขึ้นเมื่อ ระดับสัญญาณไฟฟามีคาสูงขึ้น


    

143

#include <ipst.h> // ผนวกไลบรารีหลัก void setup() { // แสดงขอความของการทดลอง glcdClear(); glcd(0,0,"Example: LED8_bar"); glcd(2,0,"connect LED8 to (20)"); glcd(4,0,"Solid bargraph demo"); }

pinLED8(20);

void loop() { int i,n; n=0; for (i=0;i<8;i++) { n|=(0x01<<i); LED8(n); delay(300); } for (i=7;i>0;i--) { n&=0xff^(0x01<<i); LED8(n); delay(300); }

// ใชจุดตอพอรต 20 ในการเชือมต ่ อ

// สรางขอมูลแสดงผลดวยการออรบิต

// สรางขอมูลแสดงผลดวยการแอนดบิต

} คําอธิบายโปรแกรม

ขอมูลสําหรับการแสดงผลของโปรแกรมนีจะใช ้ ตัวดําเนินการตรรกะหรือลอจิกในระดับบิตทังการออร ้ (|) และการแอนด (&) โดยการออรบิตในโปรแกรมทําใหบิตขอมูลทีเป ่ น “1” อยูแต  เดิมไมเปลียน ่ จึงนํามาใชในการ เพิมจํ ่ านวนบิตที่ทําให LED ติดสวาง สวนการแอนดบิตในโปรแกรมนีจะทํ ้ าใหบิตที่มีนัยสําคัญสูงเปลี่ยนเปน “0” ทีละบิต ทําใหจํานวนของ LED ทีติ่ ดสวางลดลง

โปรแกรมที่ L3-3 : ไฟล LED8bargraph.pde โปรแกรมภาษา C/C++ สําหรับทดลองควบคุมไฟวิง่ LED 8 ดวง ในแบบกราฟแทง


     144


    

145



  ในบทนี้ เป นการนําแผงวงจรสวิตชเขามาตอทํางานรวมกับไมโครคอนโทรลเลอรของแผง วงจร IPST-SE อันเปนการเรียนรูการอานคาจากอินพุตมาประมวลผลเพือส ่ งสัญญาณออกไปควบคุม อุปกรณทางเอาตพุตอยางงายนันเอง ่ ปฏิบัติการทังหมดที ้ นํ่ าเสนอในบทนี้ ผูพั ฒนาสามารถนําความรูไปใช  สรางระบบควบคุมอยางงาย ทีมี่ การตรวจจับอินพุตจากการกดสวิตช แลวกําหนดใหโปรแกรมทีออกแบบนั ่ นมี ้ การตอบสนองอะไร บางอยางออกมา เชน เมือมี ่ การกดสวิตช ระบบตอบสนองดวยการเปด/ปดไฟ, ควบคุมมอเตอร หรือสง ขอมูลอุณหภูมิไปแสดงผลยังคอมพิวเตอรทีเชื ่ อมต ่ ออยู เปนตน

9.1 ความรูเบืองต ้ นเกี่ยวกับการทํางานของสวิตช สวิตชเปนอุปกรณพื้นฐานทีมี่ บทบาทและใชประโยชนอยางมากในวงจรอิเล็กทรอนิกส โดย เฉพาะอยางยิ่งในการใชงานเปนอุปกรณตัดตอหรืออุปกรณสําหรับสรางสัญญาณอินพุตใหแกวงจร โดยเฉพาะอยางยิ่งกับวงจรดิจิตอล

9.1.1 สวิตชกดติดปลอยดับ (Push-button switch/Tact switch) เปนอุปกรณสําหรับตัดตอวงจรไฟฟาที่นิยมใชอยางมากในระบบไมโครคอนโทรลเลอร โดย สวิตชแบบนีปกติ ้ เมือไม ่ มีการกด หนาสัมผัสของสวิตชจะแยกออกจากกันหรือเรียกวา เปดวงจร เมือมี ่ การ กดลงบนปุมด  านบนซึงทํ ่ ามาจากยางสังเคราะหหรือพลาสติก ทําใหหนาสัมผัสตัวนําภายในสวิตชตอถึง กัน กระแสไฟฟาก็จะสามารถไหลผานไปได รูปรางของสวิตชกดติดปลอยดับมีดวยกันหลายแบบ ทั้งแบบบัดกรีตอสาย แบบลงแผนวงจร พิมพ แบบติดหนาปด และในบางแบบมีไฟแสดงในตัว สวนขาตอใชงานมีตังแต ้ 2 ขาขึนไป ้ ในการ ใชงานกับไมโครคอนโทรลเลอรนั้นมักใชสวิตชเปนอุปกรณสรางสัญญาณอินพุตแบบหนึ่ง โดยตอ ปลายขางหนึงกั ่ บตัวตานทาน และปลายของตัวตานทานนันต ้ อกับไฟเลียงหรื ้ อทีเรี่ ยกวา “พูลอัป” ทีจุ่ ด


     146 ปุมยางสําหรับกด

+5V R1 4k7

เอาตพุต = +5V เปน ลอจิก "1" ไมม ีกระแสไฟฟาไหล เนื่องจากเปด วงจร

S1

(ก) รูปรางของสวิตชกดติดปลอยดับ +5V R1 4k7

(ข) วงจรสมมูลของสวิตชกดติดปลอยดับ

กดสวิต ช เกิด การตอ วงจร

(ค) สัญลักษณทีใช ่ ในวงจร

S1

เอาตพุต = 0V เกิดลอจิก "0" ทิศ ทางการไหลของ กระแสไฟฟา

(ง) แสดงวงจรการนําสวิตชกดติดปลอยดับไปใชใน การสรางสัญญาณลอจิกใหแกไมโครคอนโทรลเลอร

รูปที่ 9-1 แสดงรูปรางและสัญลักษณของสวิตชแบบกดติดปลอยดับทีใช ่ ในการทดลอง ตอวงจรระหวางสวิตชกับตัวตานทานจะเปนจุดที่ตอเขากับไมโครคอนโทรลเลอรเพื่ออานคาลอจิก ของการกดสวิตชดังแสดงในรูปที่ 2-1 (ง) ถาหากไมมีการกดสวิตช สถานะลอจิกขอสวิตชตัวนันจะเป ้ น “1” อันเนื่องจากการตอตัวตานทานพูลอัป และเมื่อมีการกดสวิตช จะเกิดสถานะลอจิกเปน “0” เนือง ่ จากจุดตอสัญญาณนั้นถูกตอลงกราวด

9.1.2 การตอสวิตชเพือกํ ่ าหนดลอจิกทางอินพุต ในรูปที่ 9-2 เปนการตอสวิตชกดติดปลอยดับเพื่อสรางสัญญาณอินพุตลอจิก “0” ใหแกวงจร โดยเมื่อกดสวิตช S1 จะเปนการตอขาอินพุตลงกราวด อยางไรก็ตาม การตอสวิตชเพียงตัวเดียวอาจ ทําใหสถานะลอจิกทางอินพุตในขณะที่ไมมีการกดสวิตชมีความไมแนนอน จึงควรตอตัวตานทานเขา กับไฟเลี้ยงหรือลงกราวดเพื่อกําหนดสถานะทางลอจิกในขณะที่ไมมีการกดสวิตชใหแกวงจร S1

เอาตพุตตอกับ ขาพอรตอินพุตของ ไมโครคอนโทรลเลอร

รูปที่ 9-2 การเชือมต ่ อสวิตชกดติดปลอยดับเขา กับอินพุตของไมโครคอนโทรลเลอรอยางงาย


    

+5V

S1

R1 10k

+5V S1

เอาตพุตตอกับ ขาพอรต อินพุตของ ไมโครคอนโทรลเลอร

รูปที่ 9-3 การเชื่อมตอสวิตชกดติดปลอยดับเขา กับอินพุตของไมโครคอนโทรลเลอรแบบมีตัวตานทาน ตอพูลอัป ทําใหสถานะลอจิกเมือไม ่ มีการกดสวิตช เปนลอจิก "1"

R1 100k

147

เอาตพุตตอกับ ขาพอรตอินพุตของ ไมโครคอนโทรลเลอร

รู ปที่ 9-4 การเชื่อมตอสวิตชกดติดปลอยดับเขา กับอินพุตของไมโครคอนโทรลเลอรแบบมีตัวตานทาน ตอพูลดาวน ทําใหสถานะลอจิกเมือไม ่ กดสวิตชเปน ลอจิก "0"

ในรูปที่ 9-3 เปนการตอสวิตชเขากับอินพุตของไมโครคอนโทรลเลอร โดยมีการตอตัวตานทาน เขาที่ขาอินพุตของวงจรและไฟเลี้ยง +5V เรียกการตอตัวตานทานแบบนีว้ า การตอตัวตานทานพูลอัป (pull-up) ดวยการตอตัวตานทานในลักษณะนีทํ้ าใหเมื่อยังไมมีการกดสวิตช สถานะลอจิกที่อินพุตตอง เปนลอจิก “1” อยางแนนอน สวนในรูปที่ 9-4 เปนการตอสวิตชเขากับอินพุตในอีกลักษณะหนึงที ่ ่มีการตอตัวตานทานเขาที่ ขาอินพุตของวงจรและกราวด จะเรียกการตอตัวตานทานแบบนีว้ า การตอตัวตานทานพูลดาวน (pulldown) ดวยการตอตัวตานทานในลักษณะนีทํ้ าใหเมื่อยังไมมีการกดสวิตชสถานะลอจิกทีขาอิ ่ นพุตเปน ลอจิก “0”

9.1.3 สัญญาณรบกวนของการกดสวิตช ในทางทฤษฎี เมือสวิ ่ ตชมีการเปดปดวงจร สัญญาณไฟฟาจะถูกปลดหรือตอเขาไปในวงจรและ สามารถวิเคราะหผลการทํางานได แตในความเปนจริง เมือมี ่ การกดและปลอยสวิตช หนาสัมผัสของสวิตช จะเกิดการสันและกว ่ าทีจะต ่ อหรือเปดวงจรอยางสมบูรณนันจะต ้ องใชเวลาชัวขณะหนึ ่ ง่ ซึงมนุ ่ ษยไมสามารถ มองเห็นภาวะนันได ้ แตวงจรอิเล็กทรอนิกสจะตรวจจับความไมคงทีนั่ นได ้ และมองเปนสัญญาณรบกวน สัญญาณรบกวนที่เกิดขึ้นนั้นเรียกวา สัญญาณรบกวนจากการสั่นของหนาสัมผัสสวิตช หรือ การเบาซ (bounce) ถาหากนําสวิตชนันไปใช ้ เปนอุปกรณเพื่อปอนสัญญาณอินพุตใหแกวงจรนับ ใน ทางอุดมคติเมื่อกดสวิตช 1 ครั้ง จะไดสัญญาณพัลสเพียง 1 ลูกเพื่อสงไปยังวงจรเพื่อเปลี่ยนคาหนึ่งคา แตทางปฏิบัติ จะมีสัญญาณพัลสสงออกไปอาจจะมีเพียง 1 ลูกตามตองการหรือมากกวานั้นก็ได ซึง่ ไมอาจคาดเดาได โดยสัญญาณพัลสที่เกิดขึ้นนั้นจะเกิดขึ้นเมือสวิ ่ ตชเริ่มตอวงจร และเมื่อสวิตชกําลัง เปดวงจรเนืองจากการปล ่ อยสวิตช ในรูปที่ 9-5 แสดงปรากฏการณดังกลาว


     148

+5V

+5V

R1 10k

S1

+5V

R1 10k

OUTPUT

R1 10k

OUTPUT

S1

S1

+5V

+5V

+5V

0V

0V

0V

สัญญาณรบกวนที่เกิดขึ้น จากการกดสวิตช

สัญญาณรบกวนที่เกิดขึ้น จากการปลอยสวิตช

รูปที่ 9-5 แสดงการเกิดสัญญาณรบกวนเมือมี ่ การกดและปลอยสวิตชในวงจรดิจิตอล

9.1.4 การแกไขสัญญาณรบกวนของการกดสวิตชเมือใช ่ งานกับไมโครคอนโทรลเลอร หลักการแกไขสัญญาณรบกวนแบบนีคื้ อ หนวงเวลาการเกิดขึนของสั ้ ญญาณพัลสเล็กนอย เพือให ่ วงจรไมสนใจสัญญาณทีเกิ่ ดขึนในช ้ วงเริมต ่ นกดสวิตช เรียกการแกไขสัญญาณรบกวนนีว้ า ดีเบาซ (debounce) วิธีการแรก ทําไดโดยใชอุปกรณอิเล็กทรอนิกสพืนฐานอย ้ างตัวตานทานและตัวเก็บประจุ โดยตอ กันในลักษณะวงจร RC อินติเกรเตอร ดังในรูปที่ 9-6 ดวยวิธีการนีจะช ้ วยลดผลของสัญญาณรบกวนที่ เกิดขึนจากการกดสวิ ้ ตชไดในระดับหนึง่ โดยประสิทธิภาพของวงจรจะขึนกั ้ บการเลือกคาของตัวตานทาน และตัวเก็บประจุ หากเลือกคาของตัวเก็บประจุนอยเกินไป อาจไมสามารถลดสัญญาณรบกวนได แตถา เลือกคามากเกินไป จะทําใหความไวในการตรวจจับการกดสวิตชลดลง นันคื ่ อ อาจตองกดสวิตชมากกวา 1 ครังเพื ้ อให ่ ไดสัญญาณที่ตองการ +5V R1 10k

S1 R2

R3

OUTPUT

C1

วงจร RC อินติเกรเตอร รูปที่ 9-6 การตอวงจร RC อินติเกรเตอรเพือแก ่ ไขปญหาสัญญาณรบกวนจากการกดสวิตช


    

149

วิธีการที่สองคือ ใชกระบวนการทางซอฟตแวรเขามาชวย ซึงมี ่ ขันตอนโดยสรุ ้ ปดังนี้ (1) อานคาการกดสวิตชครั้งแรกเขามากอน (2) หนวงเวลาประมาณ 0.1 ถึง 1 วินาที (3) อานคาของการกดสวิตชอีกครั้ง ถาหากคาที่อานไดเหมือนกับการอานครังแรก ้ แสดงวา มีการกดสวิตชเกิดขึ้นจริง ถาคาที่อานไดไมเหมือนกับการอานครังแรก ้ แสดงวา สัญญาณที่เกิดขึ้นอาจเปนเพียงพัลสแคบๆ อาจตีความไดวา เปนสัญญาณรบกวน จึงยังไมมีการกดสวิตชเกิดขึ้นจริง

9.2 ฟงกชันโปรแกรมภาษา ่ C/C++ ในไลบรารี ipst.h ทีใช ่ ในการทดลอง สําหรับคําสั่งหรือฟงกชั่นของโปรแกรมภาษา C/C++ ที่ใชในการทดลองทั้งหมดในบทนี้ ได รับการบรรจุไวในไฟลไลบรารี ipst.h คือ คําสั่ง in, sw_OK และ sw1

9.2.1 in เปนฟงกชั่นอานคาสถานะลอจิกของพอรตที่กําหนด รูปแบบ char in(x) พารามิเตอร x - กําหนดขาพอรตทีต่ องการอานคา มีคาตั้งแต 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 หมายเหตุ : ไมแนะนําใหใชฟงกชันนี ่ ้กับจุดตอ 19 และ 20 บนแผงวงจร IPST-SE การคืนคา เปน 0 หรือ 1 ตัวอยางที่ 9-1 char x; x = in(16);

// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจาการอานคาระดับสัญญาณ // อานคาดิจิตอลจากพอรตหมายเลข 16 แลวเก็บคาไวที่ตัวแปร x


     150

9.2.2 sw_OK() เปนฟงกชั่นตรวจสอบสถานะสวิตช OK บนแผงวงจร IPST-SE โดยใหสถานะ “เปนจริง” เมื่อ มีการกดสวิตชและ “เปนเท็จ” เมื่อไมมีการกดสวิตช รูปแบบ unsigned char sw_ok() การคืนคา 1 (เปนจริง) เมื่อมีการกดสวิตช 0 (เปนเท็จ) เมื่อไมมีการกดสวิตช

ตัวอยางที่ 9-2

#include <ipst.h> void setup() { glcdClear(); } void loop() { if (sw_OK()) { glcdFillScreen(GLCD_YELLOW); delay(3000); } glcdClear(); }

// ผนวกไฟลไลบรารีหลัก

// ตรวจสอบการกดสวิตช OK // เปลียนสี ่ พืนเป ้ นสีเหลือง // แสดงสีพืนใหม ้ นาน 3 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา

9.2.3 sw_OK_press() เปนฟงกชั่นวนตรวจสอบการกดสวิตช OK บนแผงวงจร IPST-SE ตองรอจนกระทั่งสวิตชถูก ปลอยหลังจากการกดสวิตชจึงจะผานฟงกชั่นนี้ไปกระทําคําสั่งอื่นๆ ตัวอยางที่ 9-3 ............ sw_OK_press(); ............

// รอจนกระทั่งเกิดกดสวิตช OK


    

151

9.2.4 sw1_press เปนฟงกชั่นวนตรวจสอบการกดสวิตช SW1 บนแผงวงจร IPST-SE ตองรอจนกระทั่ง SW1 ถูกปลอยหลังจากมีการกดสวิตช จึงจะผานพนการทํางานของฟงกชั่นนี้ไป รูปแบบ void sw1_press() ตัวอยางที่ 9-4 ............ sw1_press(); ................

// รอจนกระทั่งสวิตช SW1 ถูกกดและปลอย

9.2.5 sw1 เปนฟงกชั่นตรวจสอบการกดสวิตช SW1 ในขณะใดๆ รูปแบบ char sw1() การคืนคา เปน “0” เมือสวิ ่ ตช SW1 ถูกกด และ เปน “1” เมือไม ่ มีการกดสวิตช SW1 ตัวอยางที่ 9-5 char x; x = sw1();

// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจากการอานคาดิจิตอล // อานคาสถานะของสวิตช SW1 มาเก็บไวที่ตัวแปร x


     152

  ปฏิบัติการที่ 4-1 ควบคุม LED ดวยการกดสวิตช OK การเชือมต ่ อทางฮารดแวร  ตอแผงวงจร ZX-LED กับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE

ขั้นตอนการทดลอง 4.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ swOK_LED 4.1.2 เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 4.1.3 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม

30 A6 27 A3 28 A4 25 A1

S

OK

OK

ON

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

รูปที่ L4-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 4

1

2

DC MOTOR

+

Hell o0World0000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2

O

KNOB



8 SCL 9 SDA

ZX-LED

24 A0

D

Press

+ S

     

USB


    

#include <ipst.h> void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_OK_press(); glcdClear(); } void loop() { if (sw_OK()) { out(17,0); delay(2000); } out(17,1); } คําอธิบายโปรแกรม

153

// ผนวกไฟลไลบรารีหลัก // กําหนดขนาดตัวอักษร 2 เทา // แสดงขอความออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา

// ตรวจสอบการกดสวิตช OK // ดับ LED ทีจุ่ ดตอพอรต 17 // นาน 2 วินาที // ขับ LED ทีจุ่ ดตอพอรต 17 ใหติดสวาง

การทํางานของโปรแกรมเริ่มตนดวยการแสดงขอความแจงใหกดสวิตช OK บนแผงวงจร IPST-SE เมื่อ กดแลว จะเขาสูลู ปการทํางานหลักในฟงกชั่น loop() เพือตรวจสอบต ่ อไปวา มีการกดสวิตช OK หรือไม ถาไม มี จะสงขอมูล “1” ออกไปยังจุดตอพอรต 17 ทําให LED ทีต่ ออยูติ ดสวาง และยังคงสวางอยูเชนนั้นจนกวาจะ มีการกดสวิตช OK เมื่อสวิตช OK ถูกกด จะทําใหเงือนไขการตรวจสอบเป ่ นจริง เกิดการตอบสนองดวยการสงขอมูล “0” ไปทีจุ่ ดตอพอรต 17 ทําให LED ทีต่ ออยูดั บลงเปนเวลา 2 วินาที ตามการทํางานของฟงกชั่น delay จากนันก็ ้ จะหลุดออกจากการตรวจสอบ มาพบฟงกชั่น out เพือขั ่ บให LED กลับมาติดอีกครั้ง แลววนรอการกดสวิตช OK ในรอบใหม

โปรแกรมที่ L4-1 : ไฟล swOK_LED.pde โปรแกรมภาษา C/C++ สําหรับทดลองควบคุม LED ดวยสวิตช 4.1.4 รันโปรแกรม ทีจอแสดงผลกราฟ ่ ก LCD จะแจงใหกดสวิตช OK ทันทีทีกดสวิ ่ ตช OK บนแผงวงจร IPST-SE จะทําให LED ของแผงวงจร ZX-LED ทีต่ อกับจุดตอพอรต 17 ติดสวาง 4.15 กดสวิตช OK อีก 1 ครั้ง แลวปลอย สังเกตการทํางานของ LED LED ของแผงวงจร ZX-LED จะดับลงนาน 2 วินาที จากนั้นจะกลับมาติดสวางใหมอีกครั้ง และจะทํา งานในลักษณะนีไปตลอด ้ จนกวาจะมีการรีเซตระบบ หรือปดเปดจายไฟเลี้ยงใหม


     154

ปฏิบัติการที่ 4-2 ควบคุม LED ดวยการกดสวิตช SW1 ในการทดลองนี้จะเพิ่มเติมสวิตชเขามาอีก 1 ตัวคือ SW1 โดยสวิตช SW1 ถูกติดตั้งไวพรอมใชงานบน แผงวงจร IPST-SE อยูแลว โดยในปฏิบัติการนีต้ องการนําสวิตช SW1 มาควบคุมการเปดปด LED ในแบบท็อก เกิล (toggle) นันคื ่ อ เมื่อกดสวิตชหนึ่งครั้ง LED ติด และเมื่อกดซํ้า LED จะดับ สลับกันเชนนี้

การเชือมต ่ อทางฮารดแวร  ตอแผงวงจร ZX-LED กับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE

ขั้นตอนการทดลอง 4.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ sw1_LED 4.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 4.2.3 รันโปรแกรม ทีจอแสดงผลกราฟ ่ ก LCD จะแจงใหกดสวิตช OK 4.2.4 กดสวิตช OK อีก 1 ครั้ง แลวปลอย 4.2.5 ทดลองกดสวิตช SW1 แลวปลอย 3 ครั้ง สังเกตการทํางานของ ZX-LED LED ของแผงวงจร ZX-LED จะติดและดับ กลับสถานะกันในทุกครังที ้ มี่ การกดสวิตช SW1 นันคื ่ อ จากเดิม ดับจะกลายเปนติดสวาง และจากติดสวางจะกลายเปนดับ 4.2.6 กดสวิตช SW1 คางไวครูหนึ่ง แลวจึงปลอย สังเกตการทํางานของ LED เมื่อสวิตชยังถูกกดคาง สถานะของ LED จะไมมีการเปลี่ยนแปลง จนกวาสวิตชจะถูกปลอย


    

#include <ipst.h> int i=0; void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_OK_press(); glcdClear(); } void loop() { if (sw1()) { out(17,i^=1); while(sw1()) delay(5); } } คําอธิบายโปรแกรม

155

// ผนวกไฟลไลบรารีหลัก

// กําหนดขนาดตัวอักษร 2 เทา // แสดงขอความออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา

// ตรวจสอบการกดสวิตช OK // ดับ LED ทีจุ่ ดตอพอรต 17

โปรแกรมจะมีตัวอยางการรับคาสวิตช 2 ตัวคือ สวิตช OK (ใชฟงกชัน่ sw_OK_press()) และสวิตช SW1 (ใชฟงกชั่น sw1()) โดยตัวแรกจะอยูในฟงกชั่น setup เพื่อวนรอการกดสวิตช OK เพือเริ ่ ่มตนการทํางาน หลังจากมีการกดสวิตช OK จะเขาสูลู ปการทํางานของฟงกชั่น loop เพือวนรอการกดสวิ ่ ตช SW1 เมื่อ สวิตช SW1 ถูกกด จะทําการสงสัญญาณออกมายังพอรต 17 โดยคาที่สงออกมาจะไดมาจากการเอ็กคลูซีฟ ออรคาของตัวแปร i กับ 1 จากคําสัง่ i^=1 ทําใหคาที่ไดมีการกลับสถานะทุกครังที ้ ่มีการเรียกใหทํางาน ซึ่งการ ทํางานในลักษณะนีสามารถใช ้ คําสัง่ i=~i ก็ได แตเนื่องจากในคอมพิวเตอรบางเครื่อง (โดยเฉพาะเครื่อง คอมพิวเตอร Macintosh) ไมมีคีย ~ ใหใช จึงตองเขียนคําสังด ่ วยการทําเอ็กคลูซีฟ-ออรแทน ดังนั้นเมื่อมีการกดสวิตช SW1 ทุกครั้ง ก็จะมีการกลับสถานะลอจิกเดิมที่จุดตอพอรต 17 ทําให LED ของแผงวงจร ZX-LED ทีต่ ออยูเกิ  ดการติดและดับสลับกันในทุกครั้งที่กดสวิตช สําหรับคําสัง่ while(sw1()) และ dealy(5); ทําหนาทีลดสั ่ ญญาณรบกวนทีเกิ ่ ดจากการกดสวิตช ทําใหก ารกดสวิตช SW1 ในแตละครั้งมีความแนนอนมากขึน้

โปรแกรมที่ L4-2 : ไฟล sw1_LED โปรแกรมภาษา C/C++ สําหรับทดลองควบคุม LED ดวยสวิตช SW1 ในลักษณะกลับสถานะการทํางานในทุกครังที ้ ่มีการกดสวิตช SW1


     156

   การเชือมต ่ อทางฮารดแวร  ตอแผงวงจร ZX-SWITCH01 กับจุดตอพอรต 16 ของแผงวงจรหลัก IPST-SE

ขั้นตอนการทดลอง 5.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ swOK_LED 5.2 เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 5.3 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 5.4 รันโปรแกรม ทีจอแสดงผลกราฟ ่ ก LCD แสดงขอความ Start ใหกดสวิตช OK 5.5 กดสวิตช OK 1 ครั้ง แลวปลอย ทีจอแสดงผลกราฟ ่ ก LCD แสดงขอความ COUNTER ใหเริ่มการนับดวยการกดสวิตชทีต่ อกับพอรต 16 5.6 กดสวิตชทีแผงวงจร ่ ZX-SWITCH01 ทีต่ อกับพอรต 16 สังเกตการทํางานที่จอแสดงผลของแผงวงจร IPST-SE ทีจอแสดงผลจะเริ ่ ่มตนแสดงคาการนับจํานวนการกดสวิตช โดยเริ่มจาก 0 คาจะเปลียนทั ่ นที่ทีมี่ การกด สวิตชทีพอร ่ ต 16 และจะทําการับคาตอไปได ก็ตอเมื่อมีการปลอยสวิตช แลวกดใหม หากสวิตชยังถูกกดคาง คาการนับจะไมมีการเปลี่ยนแปลง จนกวาสวิตชจะถูกปลอย และกดเขามาใหม 8 SCL 9 SDA

30 A6 27 A3

D Hello0World00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

28 A4 25 A1

COUNTER

27

S

KNOB



OK

  

SW1

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

รูปที่ L5-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 5

1

2

DC MOTOR

+

+ S

ON

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

29 A5 26 A2

D

24 A0

ZX-Switch01

USB


    

#include <ipst.h> int i=0; void setup() { setTextSize(2); glcd(1,3,"Start"); sw_OK_press(); glcdClear(); glcd(1,2,"COUNTER"); setTextSize(3); glcd(3,3,"0"); } void loop() { if (in(16)==0) { i=i++; glcd(3,3,"%d",i); while(in(16)==0) delay(5); } } คําอธิบายโปรแกรม

157

// ผนวกไฟลไลบรารีหลัก // ประกาศตัวแปรเก็บคาการนับ // กําหนดขนาดตัวอักษร 2 เทา // แสดงขอความ Start ออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // แสดงขอความ COUNTER เพือแจ ่ งชื่อการทดลอง // กําหนดขนาดตัวอักษร 3 เทา // กําหนดคาเริ่มตนเปน 0

// ตรวจสอบการกดสวิตชที่พอรต 16 // เพิมค ่ าตัวนับ // แสดงคาการนับ // ตรวจสอบการปลอยสวิตช

โปรแกรมนีใช ้ ฟงกชัน่ in ในการตรวจจับและอานคาจากการกดสวิตชทีพอร ่ ต 16 โดยตรงสอบวาทีพอร ่ ต 16 เปนลอจิก “0” หรือไม ถาใชแสดงวา มีการกดสวิตชเปดขึน้ จากนันจะทํ ้ าการเพิมค ่ าตัวนับ แลวนํามาแสดง ผลทีจอแสดงผลกราฟ ่ ก LCD ของแผงวงจร IPST-SE คําสัง่ while(in(16)==0) และ dealy(5); ทําหนาที่ลดสัญญาณรบกวนทีเกิ ่ ดจากการกดสวิตช โดยจะ ตรวจสอบวา มีการปลอยสวิตชแลวหรือไม ถาไม ก็จะวนทํางานอยูทีคํ่ าสังนั ่ ้น ชวยใหไมเกิดการนับคาโดยไม ตั้งใจขึ้น ดังนั้นการกดสวิตชทีพอร ่ ต 16 ในแตละครั้งจึงมีความแนนอนสูง

โปรแกรมที่ L5-1 : ไฟล CounterSwitch โปรแกรมภาษา C/C++ สําหรับทดลองใชงานสวิตชในการ สรางเครื่องนับจํานวนอยางงาย จากทังสองปฏิ ้ บัติการผูพัฒนาสามารถนําไปประยุกตใชงานสวิตชหลายๆ ตัวพรอมกันและมี ความสามารถที่แตกตางกันไปแลวแตจุดประสงค เชน สวิตชบางตัวสามารถกําหนดใหเมื่อกดสวิตช คางแลวสามารถเพิ่มคาหรือลดคาขอมูลทีกํ่ าหนดได ในขณะทีสวิ ่ ตชบางตัวอาจกําหนดใหไมสามารถ กดคางได เปนตน


     158


    

159

  สัญญาณทางไฟฟาแบงออก 2 แบบหลักคือ สัญญาณอะนาลอก (analog) และดิจิตอล (digital) สัญญาณอะนาลอกก็คือ สัญญาณไฟฟาที่มีการเปลียนแปลงสั ่ มพันธกับคาเวลา โดยการเปลี่ยนแปลง นันจะเพิ ้ ่มขึ้นหรือลดลงก็ได และมีระดับแรงดันเทาใดก็ได สวนสัญญาณดิจิตอลเปนสัญญาณที่มีการ เปลี่ยนแปลงเพียง 2 ระดับที่แตกตางกัน กลาวคือ มีระดับสัญญาณสูง และตํา่ (เกือบหรือเทากับ 0V) โดยปกติจะมีระดับแรงดันเทากับ +5V สําหรับระดับแรงดันสูง หรือเรียกวา ลอจิก “1” และ 0V สําหรับ ระดับแรงดันตํ่า หรือเรียกวา ลอจิก “0” แตในปจจุบันระดับแรงดันของลอจิก “1” อาจเทากับ +3.3V หรือ 1.8V ขึนอยู ้ กั บเทคโนโลยีของอุปกรณดิจิตอล อยางไรก็ตาม สําหรับการเรียนรูโดยพื้นฐานนี้จะ อธิบายระดับลอจิก “1” ดวยคาแรงดัน +5V เปนหลัก ในรูปที่ 10-1 แสดงความแตกตางระหวางสัญญาณ อะนาลอกกับดิจิตอล V

Data

Vp

1

t

00101 10

t

V Data Vp 1

t 11010 01

V

t

Data

Vp

t

1

1010 10

(ก) ตัวอยางสัญญาณอะนาลอก ระดับของสัญญาณเปลี่ยนแปลง สัมพันธกับคาเวลา

t

(ข) ตัวอยางสัญญาณดิจิตอล จะเห็นวา มีเพียง 2 ระดับสัญญาณเทานั้นคือ ระดับสูง ("1") และระดับต่ํา ("0")

รูปที่ 10-1 ตัวอยางของสัญญาณอะนาลอกและดิจิตอล


     160

10.1 สัญญาณอะนาลอก แบงได 3 แบบ คือ แบบสัญญาณไฟตรง (analog DC signals), แบบเปลียนค ่ าตามเวลา (timedomain) และ แบบเปลียนค ่ าตามความถี่ (frequency-domain) สัญญาณอะนาลอกไฟตรง มั กเปนคาที่ไดจากการวัดขนาดหรือระดับของสัญญาณ ซึ่งมีการ เปลี่ยนแปลงคาสัญญาณในเวลาที่ไมเร็วมากนัก อาทิ คาอุณหภูมิ, ระดับของไหล, ความดัน, อัตราการ ไหล, นําหนั ้ ก เปนตน สามารถใชวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล (ADC : Analog to Digital Converter) ที่มีอัตราการสุมสั  ญญาณไมเร็วมากได สัญญาณอะนาลอกแบบเปลี่ยนคาตามเวลา เปนสัญญาณที่วัดเพือพิ ่ จารณาลักษณะรูปสัญญาณ เปนหลัก อาทิ สัญญาณคลืนหั ่ วใจมนุษย (ECG) ซึงมี ่ ความจําเปนตองใชวงจรแปลงสัญญาณอะนาลอก เปนดิจิตอลที่มีความเร็วในการสุมสั  ญญาณสูง สัญญาณอะนาลอกแบบเปลี่ยนคาตามความถี่ ไดแก สัญญาณความถี่วิทยุ (radio frequency : RF) และสัญญาณคลืนเสี ่ ยง เปนตน ในการวิเคราะหจําเปนตองมีฮารดแวรพิเศษเพือช ่ วยวิเคราะหอยาง DSP (digital signal processing) ทํางานรวมกับวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลดวย

10.2 ทําไมไมโครคอนโทรลเลอรตองอานคาสัญญาณอะนาลอก สาเหตุหลักที่ ไมโครคอนโทรลเลอรตองติดตอกับสัญญาณอะนาลอกคือ ต องการอานคา ปริมาณทางฟสิกสในรูปของสัญญาณไฟฟา เพือนํ ่ าไปประมวลผลและควบคุมระบบตอไป ในรูปที่ 10-2 แสดงไดอะแกรมการทํางานเบื้ องตนของการอานคาสัญญาณอะนาลอกของ ไมโครคอนโทรลเลอร มีสวนประกอบสําคัญ 4 สวนคือ 1. สวนตรวจจับสัญญาณกายภาพ (Transducer/Sensor/Detector) 2. วงจรปรับสภาพสัญญาณ (Signal conditioning) 3. วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล (Analog to Digital Converter : ADC) 4. ไมโครคอนโทรลเลอร

10.2.1 สวนชุดตรวจจับสัญญาณกายภาพ ชุดตรวจจับสัญญาณกายภาพ หรือ ทรานสดิวเซอร (transducer) คือตัวแปลงสัญญาณทางกายภาพ เชน อุณหภูมิ ความดัน ระดับของไหล ความยาว ตําแหนงการเคลือนที ่ ่ ฯลฯ ใหเปนในรูปสัญญาณทางไฟฟา นันเอง ่ หรือบางครังเรี ้ ยกอุปกรณเหลานีว้ า ตัวตรวจจับ (sensor) ซึงมี ่ ดวยกันหลากหลายรูปแบบ อาทิ เทอรโม คัปเปล (thermocouple) , เทอรมิสเตอร (thermistor), ตัวตรวจจับการไหล (flow sensor) เปนตน


    

   o

 

 

C

  

161

      

 

    

10001000 01110110 00011101 11100110 11111010

 

รูปที่ 10-2 แสดงกระบวนการอานคาสัญญาณอะนาลอกของไมโครคอนโทรลเลอร

10.1.2 สวนปรับสภาพสัญญาณ หนาที่หลักของสวนปรับสภาพสัญญาณนีคื้ อ ปรับปรุงคุณภาพของสัญญาณไฟฟาที่ไดจากชุด ตรวจจับกอนสงสัญญาณตอไปยังฮารดแวรที่เชื่อมตอกับไมโครคอนโทรลเลอร ซึงอาจมี ่ ความจําเปน ตองปรับสเกลสัญญาณ, ขยายขนาดสัญญาณ, แปลงรูปสัญญาณใหเปนเชิงเสน (linearization), กรอง คลืนสั ่ ญญาณและแยกกราวดของสัญญาณ (common-mode rejection) หนาทีเด ่ นของสวนปรับสภาพสัญญาณคือ ขยายขนาดสัญญาณ (amplifly) เพราะโดยสวนใหญ สัญญาณที่ ไดจากชุดตรวจจับจะมีขนาดสัญญาณที่ตํ่ามาก มีขนาดแรงดันไฟฟาในหนวยมิลลิโวลต (millivolt : mV) หรือ 1/1000V และมักมีสัญญาณรบกวนจากแหลงจายไฟปะปนมา ซึงอาจรบกวน ่ สัญญาณดานอินพุตในขณะที่สัญญาณเขาสูระบบ ทําใหคาสัญญาณที่วัดไมถูกตองและไมเที่ยงตรง นอกจากนั้นวงจรปรับสภาพสัญญาณยังใชในการแปลงสัญญาณไฟฟาที่ไมไดอยูในรูปของ แรงดันไฟฟา เชน กระแสไฟฟาหรือความตานไฟฟามาอยูในรู  ปของแรงดันไฟฟาใหเหมาะสมกับวงจร แปลงสัญญาณอะนาลอกเปนดิจิตอล อาทิ แปลงคากระแสไฟฟา 4 ถึง 20mA จากตัวตรวจจับที่ให ผลแบบกระแสไฟฟาเปนแรงดันไฟตรง 0 ถึง +5V เปนตน


     162

10.1.3 วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล วงจรนีทํ้ าหนารับสัญญาณอะนาลอกที่ผานมาจากวงจรปรับสภาพสัญญาณ เพื่อทําการแปลง เปนขอมูลทางดิจิตอลเพือส ่ งไปยังประมวลผลยังไมโครคอนโทรลเลอรตอไป จุดทีต่ องใหความสนใจ ในสวนนี้คือ ความละเอียดในการแปลงสัญญาณ วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลที่เหมาะ สมในการนํามาใชในการทดลองวิทยาศาสตรควรมีความละเอียดไมนอยกวา 8 บิต ซึงให ่ ความแตกตาง ของขอมูล 256 คา และถายิ่งมีความละเอียดสูงเทาใดยิงดี ่ เพราะจะใหผลการแปลงที่แมนยํามากขึน้ แตนั่นจะทําใหตนทุนของระบบสูงขึนตามไปด ้ วย

10.1.4 ไมโครคอนโทรลเลอร ไมโครคอนโทรลเลอรเปนหนึงในอุ ่ ปกรณของระบบดิจิตอล ดังนันการอ ้ านคาสัญญาณอะนา ลอกโดยตรงจึงตองใชอุปกรณชวยเพิ่มเติม นันคื ่ อ วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล (analog to digital converter) ไมโครคอนโทรลเลอรในอดีตจะไมมีวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล บรรจุอยูภายในตัวชิป จึงตองใชไอซีแปลงสัญญาณอะนาลอกเปนดิจิตอลเขามาชวย โดยไอซีแปลง สัญญาณนีจะให ้ ผลลัพธออกมาเปนขอมูลดิจิตอลที่มีความละเอียดของขอมูลตางกันไป แลวแตความ สามารถของไอซี โดยจะเริ่มตังแต ้ 8, 10, 12, 16 บิตหรือสูงกวา ในปจจุบัน ไมโครคอนโทรลเลอรไดรวมเอาวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลเขามา ไวภายในชิป ทั้งนีเพื ้ ่อลดขนาดของระบบโดยรวมลง ทําใหการประมวลผลสัญญาณทําไดเร็วขึ้น และ ตนทุนรวมของระบบลดลงตามไปดวย ขอมูลดิจิตอลที่ไดมาจากวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล ไมวาจะเปนแบบไอซี แปลงสัญญาณภายนอก หรือจากโมดูลที่อยูภายในไมโครคอนโทรลเลอรจะถูกสงเขามาในระบบบัส ขอมูลเพื่อทําการประมวลผลและนําไปใชในการตัดสินใจเพื่อควบคุมการทํางานของระบบตอไป สําหรับในชุด IPST-microBOX ไดเลือกใชไมโครคอนโทรลเลอร ATmega16 อันเปนไมโคร คอนโทรลเลอรที่มีวงจรแปลงสัญญาณอะนาอลกเปนดิจิตอล 8 ชองอยูภายในชิปแลว จึงทําใหการนํา แผงวงจรควบคุมไปใชในการเชื่อมตอกับตัวตรวจจับแบบตางๆ เพื่ออานคาสามารถกระทําไดงายและ สะดวกขึ้น


    

163

10.2 การแปลงสัญญาณอะนาลอกเปนดิจิตอล (ADC) การแปลงสัญญาณอะนาลอกเปนดิจิตอล สัญญาณจะไดรับการแปลงเปนจํานวนทางดิจิตอล โดยการสุมหรื  อแซมปลิง้ (sampling) ดังในรูปที่ 10-3 ถาหากวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล มีความละเอียด 8 บิต จะมีความแตกตางทางผลลัพธเลขฐานสองทั้งหมด 28 หรือ 256 คา และถาหาก มีความละเอียด 10 บิต ก็จะใหผลลัพธของขอมูลเลขฐานสองสูงถึง 210 หรือ 1,024 คา คาความละเอียดของตัวแปลงสัญญาณอะนาลอกเปนดิจิตอลถูกอธิบายเปนระยะหางที่นอย ที่สุดของคาแรงดันทางอิ นพุตที่เพิ่มขึน้ ซึ่งถูกกําหนดโดยตัวแปลงสัญญาณนัน้ ระยะหางยิ่งนอย เทาไหร คาความละเอียดยิ่งสูงขึ้น โดยคาความละเอียดแปรผันตรงกับจํานวนของบิตเอาตพุต ยกตัว อยางเชน ถาวงจรแปลงสัญญาณมีความละเอียด 10 บิต ทําใหเกิดผลลัพธที่แทนคาสัญญาณมากถึง 1,024 ระดับสัญญาณอินพุตถูกแทนเปนรหัสเลขฐานสองจาก 0000000000 ถึง 1111111111 ถายาน อินพุตเริ่มตนจาก 0 ถึง +5 V ดังนันความละเอี ้ ยดเทากับ (คาโดยประมาณ) 5  0.005 V 1024

ถาเอาตพุตรหัสเลขฐานสองเปน 0000000001 แทนแรงดัน 0.005 V ดังนันข ้ อมูลของแรงดัน 3V จะมีคาเทากับ 3  600 10 0 .005

ทําการแปลงเปนเลขฐานสองจะไดคาเทากับ 10010110002 ขอมูลดิจิตอล 1101100111 0101101111

สัญญาณ อะนาลอกอินพุต

ระยะหางของการสุม

รูปที่ 10-3 การสุมสัญญาณอะนาลอกเพื่อกําหนดขอมูลดิจิตอล


     164

10.3 ฟงกชันของโปรแกรมภาษา ่ C/C++ ทีใช ่ อานคาสัญญาณอะนาลอกของ IPST-MicroBOX (SE) เพื่ออํานวยความสะดวกในการเขียนโปรแกรมภาษา C/C++ เพื่อควบคุมกลองสมองกล IPSTMicroBOX (SE) เพื่อใหอานคาสัญญาณอะนาลอกจากตัวตรวจจับตางๆ ในไฟลไลบรารี ipst.h จึงได บรรจุฟงกชั่นสําหรับอานคาสัญญาณอะนาลอกโดยเฉพาะ 2 ฟงกชั่นคือ analog() และ knob(); การอานคาผานฟงกชั่น analog() และ knob() จะไดผลลัพธคืนคากลับมาในชวง 0 ถึง 1,023 ของเลขฐานสิบ หรือ 0x0000 ถึง 0x03FF ของเลขฐานสิบหก เนืองจากความละเอี ่ ยดในการแปลง สัญญาณอะนาลอกเปนดิจิตอลเทากับ 10 บิต (เกิดคาได 1,024 คา)

10.3.1 analog เปนฟงกชั่นอานคาจากการแปลงสัญญาณอะนาลอกของแผงวงจร IPST-SE ที่จุดตอ A0 ถึง A6 รูปแบบ unsigned int analog(unsigned char channel) พารามิเตอร channel - กําหนดชองอินพุตทีต่ องการ มีคา 0 ถึง 6 ซึงตรงกั ่ บขาพอรต A0 ถึง A6 การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟา 0 ถึง +5V จากชองอินพุตทีกํ่ าหนด มีคา 0 ถึง 1,023

10.3.2 knob( ) เปนฟงกชันอ ่ านคาขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีขาพอร ่ ต A7 ซึงต ่ อกับตัวตานทาน ปรับคาไดที่ตําแหนง KNOB รูปแบบ unsigned int knob() การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีมาจากการปรั ่ บคาทีปุ่ ม KNOB บนแผงวงจร IPSTSE มีคา 95 ถึง 1,023


165

    

    ในปฏิบัติการนีเป ้ นการแนะนําการเชื่อมตอชุดกลองสมองกล IPST-MicroBOX (SE) กับอุปกรณทีให ่ ผล การทํางานเปนแรงดันไฟตรง เพือทดสอบการอ ่ านคาสัญญาณอะนาลอกหรือสัญญาณไฟตรงมาแสดงผลเปนตัว เลขทีเข ่ าใจไดงายขึน้ ซึงการทํ ่ างานของอุปกรณแบบนีจะแตกต ้ างกันไปตามลักษณะและจุดประสงค เชน ตัวตรวจ จับอุณหภู มิที่ใหผลการเปลี่ ยนแปลงอุณหภูมิสัมพันธกับแรงดันทางเอาตพุต, ตัวตานทานแปรคาตามแสงที่ สามารถใหแรงดันไฟตรงเอาตพุตเปลี่ยนแปลงตามความเขมของแสงทีมาตกกระทบตั ่ วมัน เปนตน ตัวแทนของ อุปกรณในลักษณะนีในขั ้ นพื ้ นฐานที ้ สุ่ ดคือ ZX-POT แผงวงจรตัวตานทานปรับคาได (Potentiometer) โดยในปฏิบัติ การนีจะแสดงให ้ เห็นถึงการอานคาและนําผลลัพธมาประยุกตใชงานรวมกับแผงวงจรหลัก IPST-SE

ปฏิบัติการที่ 6-1 อานคาตัวตรวจจับมาแสดงผล ในปฏิบัติการนีนํ้ าเสนอการเขียนโปรแกรมภาษา C/C++ เพืออ ่ านคาสัญญาณไฟฟาแบบอะนาลอกจาก แผงวงจรตัวตานทานปรับคาไดทีต่ อกับจุดตอพอรต A1 มาแสดงผลทีจอแสดงผลกราฟ ่ ก LCD สีบนแผงวงจรหลัก IPST-SE

การเชือมต ่ อทางฮารดแวร หรือเอาตพุตปรับแรงดันเพิมเมื ่ อหมุ ่ นตามตามเข็มนาฬิกาของแผงวงจร ZX-POTV หรือ ZX-POTH กับจุดตอ A1 ของแผงวงจรหลัก IPST-SE

A

ZX-POTV

 ตอเอาตพุต

30 A6 27 A3

D

29 A5 26 A2

00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

Analog

ON

583

Potentiometer

Volts

KNOB

2.847

OK

UART1

16

18

17

19

+5

20

RESET

รูปที่ L6-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 6

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

28 A4 25 A1

ZX-POTH

8 SCL 9 SDA

24 A0

A

USB


     166

ขั้นตอนการทดลอง 6.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L6-1 บันทึกในชื่อ AnalogTest 6.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(0,2,"Analog"); val = analog(1); setTextSize(3); glcd(1,2,"%d ",val); setTextSize(2); glcd(5,3,"Volts"); volts = (float(val)*5)/1024; setTextSize(3); glcd(4,1,"%f",volts); setTextSize(2); } คําอธิบายโปรแกรม

// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

// แสดงขอความที่จอแสดงผล // อานคาของสัญญาณชอง A1 มาเก็บไวที่ตัวแปร val // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความ Volts // แปลงขอมูลเปนหนวยแรงดัน // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาแรงดันความละเอียดทศนิยม 3 ตําแหนง // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

คาของแรงดันไฟตรงทีได ่ จากตัวตรวจจับหรือตัวตานทานปรับคาไดทีจุ่ ดตอ A1 ของแผงวงจร IPST-SE จะถูกแปลงเปนขอมูลดิจิตอลและจัดรูปแบบเปนเลขฐานสิบไดคาในชวง 0 ถึง 1023 จากการทํางานของฟงกชัน่ analog() จากนันข ้ อมูลนันได ้ รับการสงตอไปแสดงทีจอแสดงผลกราฟ ่ ก LCD สีดวยฟงกชัน่ glcd อยางตอเนือง ่ นอกจากนันในโปรแกรมยั ้ งนําขอมูลทีได ่ จากการแปลงสัญญาณมาคํานวณกลับ เพือให ่ ไดเปนคาแรงดัน ไฟตรง โดยใชสมการ volts = (val x 5) / 1024 แลวใชตัวแปร volts ทีเป ่ นตัวแปรแบบทศนิยมมารับคาที่ได จากคํานวณเพื่อนําไปแสดงผลที่จอกราฟก LCD สี โดยแสดงเปนคาแรงดันในหนวยโวลต ดวยความละเอียด ทศนิยม 3 ตําแหนง ในโปรแกรมมีการกําหนดขนาดของตัวอักษรทีใช ่ แสดงผลตางกัน เนืองจากต ่ องการแยกขอความและ ขอมูลออกจากกันใหชัดเจน

โปรแกรมที่ L6-1 : ไฟล AnalogTest.pde โปรแกรมภาษา C/C++ สําหรับอานคาสัญญาณอะนาลอกของ แผงวงจร IPST-SE


167

    

6.1.3 รันโปรแกรม ทดลองหมุนแกนของตัวตานทานบนแผงวงจรตัวตานทานปรับคาได ZX-POTH หรือ ZX-POTV สังเกตผลการทํางานผานทางจอแสดงผลของแผงวงจร IPST-SE ทีจอแสดงผลกราฟ ่ ก LCD ชวงบนแสดงคาขอมูลทีได ่ จากการแปลงสัญญาณทีจุ่ ดตอ A1 ซึ่งตอกับแผง วงจรตัวตานทานปรับคาได ZX-POT โดยมีคาระหวาง 0 ถึง 1023 (เทียบกับแรงดัน 0 ถึง +5V)

A

ZX-POTV

ทีช่ วงลางของจอแสดงผลกราฟก LCD สีแสดงคาแรงดันไฟตรงในหนวย โวลต (Volts) ทีได ่ จากการปรับ คาของตัวตานทานบนแผงวงจรตัวตานทานปรับคาได ZX-POT โดยมีคาระหวาง 0.000 ถึง 4.995 (เทียบกับขอมูล 0 ถึง 1023)

30 A6 27 A3 29 A5 26 A2

00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

Analog

ON

Volts

KNOB

0.000

OK

UART1

18

17

19

+5

20

RESET

LOW

1

2

SERVO

2 RxD1 3 TxD1

A

ZX-POTV

16

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

28 A4 25 A1

ZX-POTH

D

0

Potentiometer

  

8 SCL 9 SDA

24 A0

A

USB

29 A5 26 A2

00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

Analog

ON

Volts

KNOB

4.995

OK

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

28 A4 25 A1

ZX-POTH

30 A6 27 A3

D

1023

Potentiometer

  

8 SCL 9 SDA

24 A0

A

USB


     168

ปฏิบัติการที่ 6.2 ควบคุมการเปด/ปด LED ดวยแผงวงจรตัวตานทานปรับคาได ในปฏิบัติการนีเป ้ นการนําขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาซึงมาจากการปรั ่ บคาของ ZX-POTV (ZXPOTH) แผงวงจรตัวตานทานปรับคาไดมากําหนดเงือนไขในการเป ่ ด/ปด LED เพือให ่ เห็นแนวทางในการประยุกต ใชงานเบื้องตน

การเชือมต ่ อทางฮารดแวร  เชือมต ่ อแผงวงจร ZX-LED เขากับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE  ตอเอาตพุต

หรือเอาตพุตปรับแรงดันเพิมเมื ่ อหมุ ่ นตามตามเข็มนาฬิกาของแผงวงจร ZX-POTV หรือ ZX-POTH กับจุดตอพอรต A1 ของแผงวงจรหลัก IPST-SE

ขั้นตอนการทดลอง 6.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L6-1 บันทึกในชื่อ AnalogTest 6.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม

A

ZX-POTV

  30 A6 27 A3 28 A4 25 A1 ZX-LED

KNOB

Analog control Switch

ON

108

OK SW1

+ S O

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

รูปที่ L6-2 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 6-2

1

2

DC MOTOR

S

+

00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO

15 SV0 14 SV1 13 SV2 12 SV3

ZX-POTH

D

29 A5 26 A2

Potentiometer

8 SCL 9 SDA

24 A0

A

USB


    

#include <ipst.h> int val=0; void setup() { glcdClear(); setTextSize(2); glcd(1,2,"Analog"); glcd(2,2,"control"); glcd(3,2,"Switch"); } void loop() { val = analog(1); if(val>512) { setTextSize(4); setTextColor(GLCD_RED); glcd(3,1,"%d ",val); out(17,1); } else { setTextSize(4); setTextColor(GLCD_WHITE); glcd(3,1,"%d ",val); out(17,0); } setTextSize(2); } คําอธิบายโปรแกรม

169

// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรเก็บคาทีได ่ จากการแปลงสัญญาณแลว

// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความที่จอแสดงผล

// อานคาของสัญญาณชอง A1 มาเก็บไวที่ตัวแปร val // ตรวจสอบวาคาทีอ่ านไดมากกวา 512 หรือไม // เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // เปลียนเปนสีแดง // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // ถาคา val มากกวา 512 ทําการขับ LED ที่พอรต 17

// เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // แสดงตัวอักษรสีขาว // แสดงคาทีอ่ านไดจากจุดตอ A2 ที่หนาจอแสดงผล // ถาคา val นอยกวา 512 ทําการปด LED ที่พอรต 17 // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

สัญญาณไฟฟาจากแผงวงจรตัวตานทานปรับคาไดจะถูกอานดวยคําสัง่ analog() เก็บไวทีตั่ วแปร val เพือนํ ่ าไปตรวจสอบและสงไปแสดงผลยังจอแสดงผลกราฟก LCD สี หากคาที่ได นอยกวา 512 ตัวเลขที่แสดง ผลยังเปนสีขาว และสงขอมูล “0” ไปยังพอรต 17 ทําให LED ที่ตออยูไม  ทํางาน เมื่อคาของ val มากกวา 512 ตัวเลขแสดงผลจะเปลียนเป ่ นสีแดง และมีการสงขอมูล “1” ไปยังพอรต 17 ทําให LED ที่ตออยูติ ดสวาง

โปรแกรมที่ L6-2 : ไฟล AnalogSwitch.pde โปรแกรมภาษา C/C++ สําหรับอานคาสัญญาณไฟฟาเพื่อ นํามาควบคุมอุปกรณเอาตพุต


     170

6.2.3 รันโปรแกรม ทดลองปรับคาที่แกนหมุนของตัวตานทานปรับคาไดบนแผงวงจร ZX-POT สังเกตการทํางาน ของจอแสดงผลบนแผงวงจร IPST-SE และ LED บนแผงวงจร ZX-LED เมือปรั ่ บคาทีแกนของตั ่ วตานทาน สังเกตผลลัพธทีจอแสดงผล ่ มันจะแสดงคา 0 ถึง 1023 เมือปรั ่ บคาที่ แผงวงจร ZX-POT ถามีคานอยกวา 512 ตัวเลขจะเปนสีขาว และ LED ดับ เมื่อใดปรับคาจนไดมากกวา 512 คาตัวเลขทีจอแสดงผลจะเปลี ่ ยนเป ่ นสีแดง และ LED ทีต่ อกับพอรต 17 ติดสวาง

A

ZX-POTV

  30 A6 27 A3 KNOB

Analog control Switch

ON

SW1

+ S S

DC MOTOR

O

UART1

16

18

17

19

+5

20

1

LOW

2

SERVO

2 RxD1 3 TxD1

RESET

G 6V 12 G 6V 13 G 6V 14 G 6V 15



420

OK

+

0000 000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000

15 SV0 14 SV1 13 SV2 12 SV3

ZX-POTH

28 A4 25 A1 ZX-LED



D

29 A5 26 A2

Potentiometer

8 SCL 9 SDA

24 A0

A

USB

A

ZX-POTV

  30 A6 27 A3 KNOB

Analog control Switch

520

OK

ON

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

S

O

UART1

16

G 6V 12 G 6V 13 G 6V 14 G 6V 15



SW1

+ S +

00 00000 000 0 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000

15 SV0 14 SV1 13 SV2 12 SV3

ZX-POTH

28 A4 25 A1 ZX-LED



D

29 A5 26 A2

Potentiometer

8 SCL 9 SDA

24 A0

A

USB

SERVO


171

    

ปฏิบัติการที่ 6.3 ควบคุมการเปด/ปด LED ดวยแผงวงจรตรวจจับแสง ในปฏิบัติการนีเป ้ นการตอยอดจากปฏิบัติการที่ 6.2 โดยเปลียนจากการปรั ่ บคาของ ZX-POTV (ZX-POTH) แผงวงจรตัวตานทานปรับคาไดเปนการตรวจจับแสงโดยใชแผงวงจรตัวตานทานแปรคาตามแสดงหรือ ZX-LDR โดยยังคงใชเงือนไขในการเป ่ ด/ปด LED ในแบบเดียวกัน

การเชือมต ่ อทางฮารดแวร  เชือมต ่ อแผงวงจร ZX-LED เขากับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE

+

 ตอเอาตพุต

หรือเอาตพุตแรงดันแปรคาตามแสงของแผงวงจร ZX-LDR กับจุดตอพอรต A1 ของแผง

วงจรหลัก IPST-SE

ขั้นตอนการทดลอง 6.3.1 เขียนโปรแกรมที่ L6-3 บันทึกในชื่อ NightSwitch

ZX-LDR

+

Light sensor

+

30 A6 27 A3

00 00 000000 0 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000

Night Switch

ON

98

SW1

+ S S

O

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

28 A4 25 A1 KNOB

OK

+

D

29 A5 26 A2

ZX-LED

   

24 A0

  

USB

DC MOTOR

Potentiometer

8 SCL 9 SDA

A

6.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม

SERVO

รูปที่ L6-3 การตอวงจรเพือทดสอบการทํ ่ างานของแผงวงจรตรวจจับแสงเพื่อใชกําหนดเงื่อนไขในการ เปด-ปดอุปกรณเอาตพุต


     172

#include <ipst.h> int val=0; void setup() { glcdClear(); setTextSize(2); setTextColor(GLCD_YELLOW); glcd(1,2,"Night"); glcd(2,2,"Switch"); } void loop() { val = analog(1); if(val<100) { setTextSize(4); setTextColor(GLCD_WHITE); glcd(3,1,"%d ",val); out(17,1); } else { setTextSize(4); setTextColor(GLCD_BLUE); glcd(3,1,"%d ",val); out(17,0); } setTextSize(2); } คําอธิบายโปรแกรม

// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรสําหรับเก็บคาทีได ่ จากการแปลงสัญญาณ

// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความที่จอแสดงผล

// อานคาของสัญญาณชอง A1 มาเก็บไวที่ตัวแปร val // ตรวจสอบวาคาทีอ่ านไดมากกวา 512 หรือไม // เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // เปลียนเปนสีขาว // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // ถาคา val นอยกวา 100 ทําการขับ LED ที่พอรต 17

// เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // แสดงตัวอักษรสีนํ้าเงิน // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // ถาคา val มากกวา 100 ทําการปด LED ที่พอรต 17 // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ

ในโปรแกรมนีจะตรวจสอบค ้ าจากแผงวงจรตรวจจับแสงทีอ่ านดวยคําสัง่ analog(1); เก็บไวทีตั่ วแปร val หากคาที่ไดมากกวา 100 ตัวเลขที่แสดงผลเปนสีนําเงิ ้ น และสงขอมูล “0” ไปยังพอรต 17 ทําให LED ทีต่ ออยู ไมทํางาน เมื่อคาของ val นอยกวา 100 ตัวเลขแสดงผลจะเปลียนเป ่ นสีขาว และมีการสงขอมูล “1” ไปยังพอรต 17 ทําให LED ที่ตออยูติ ดสวาง

โปรแกรมที่ L6-3 : ไฟล NightSwitch.pde โปรแกรมภาษา C/C++ สําหรับควบคุมการเปดปดอุปกรณ เอาตพุตดวยแสง


    

173

6.3.3 รันโปรแกรม ทดลองใชมือหรือแปนกระดาษโปรงแสงบังแสงที่สองมายังตัวตานทานแปรคาตามแสงหรือ LDR บนแผงวงจร ZX-LDR สังเกตการทํางานของจอแสดงผลบนแผงวงจร IPST-SE และ LED บนแผงวงจร ZXLED หาก ZX-LDR ไดรับแสงมาก สังเกตไดจากคาที่แสดงบนจอแสดงผล นั่นคือ มีคามากกวา 100 (ตัวเลข เปนสีนําเงิ ้ น) จะสมมติสถานการณวา เปนตอนกลางวัน จึงไมมีเปดไฟสองสวาง ซึ่งในที่นีใช ้ LED บนแผงวงจร ZX-LED ทําหนาทีแทน ่ แตถัาหาก ZX-LDR ไดรับแสงลดลงจนตํ่ากวา 100 จะถือวา เปนตอนกลางคืน ระบบจะทํางานสั่งให LED ทีพอร ่ ต 17 ติดสวาง จนกวา ZX-LDR จะไดรับแสงมากเพียงพอ ซึ่งอาจตีความวา เปนตอนเชาแลว วงจร ขับ LED หยุดทํางาน ทําให LED ทีพอร ่ ต 17 ดับ ดังนั้น จึงอาจเรียกการทํางานของปฏิบัติการนีว้ า สวิตชสนธยา (Twilight Switch) หรือสวิตชกลางคืน (Night Switch) ก็ได


     174

       ในปฏิบัติ การนี้เปนการนําไอซีวัดอุณหภูมิทีให ่ ผลการทํางานเปนแรงดันไฟฟามาเชื่อมตอกับชุดกลอง สมองกล IPST-MicroBOX (SE) เพือสร ่ างเปนเครื่องวัดอุณหภูมิระบบตัวเลขอยางงาย

รูจั กกับ MCP9701 ไอซีวัดอุณหภูมิ เปนอุปกรณตรวจจับและวัดอุณหภูมิทีให ่ ผลการทํางานเปนแรงดันไฟฟาแบบเชิงเสน รับรูการเปลี  ยนแปลง ่ ของอุณหภูมิภายในเวลาไมถึง 2 วินาที เชื่อมตอกับอินพุตอะนาลอก A0 ถึง A6 ของแผงวงจรหลัก IPST-SE ได คุณสมบัติทางเทคนิคของ MCP9701 ทีควรทราบ ่  เปนไอซีวัดอุณหภูมิในกลุมเทอรมิสเตอรแบบแอกตีฟที่ใหผลการทํางานแบบเชิงเสน  ยานวัด -40 ถึง +125 องศาเซลเซียส  ผลการวัดอางอิงกับหนวยขององศาเซลเซียสโดยตรง  ความผิดพลาดเฉลี่ย 2 องศาเซลเซียส  ยานไฟเลี้ยง +3.1 ถึง +5.5V กินกระแสไฟฟาเพียง 6uA ใชแบตเตอรี่เปนแหลงจายไฟได  คาแรงดันเอาตพุต

500mV (ที่ 0๐C) ถึง 2.9375V (ที่ 125๐)

 คาแรงดันเอาตพุตตอการเปลียนแปลงอุ ่ ณหภูมิ 19.5mV/๐C ใชงานกับวงจรแปลงสัญญาณอะนาลอก

เปนดิจิตอลความละเอียดตั้งแต 8 บิตได โดยมีความคลาดเคลื่อนตํ่า

รูปที่ L7-1 การจัดขาของ MCP9701, หนาตาเมื่อตอสายสัญญาณพรอมใชงานและกราฟคุณสมบัติ


175

    

8 SCL 9 SDA

30 A6 27 A3

USB

24 A0

D

29 A5 26 A2

00 00000 000 0 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000

Digital THERMO METER

ON

28 A4 25 A1

26.740

KNOB

Celsius

OK

UART1

16

18

17

19

+5

20

RESET

LOW

2 RxD1 3 TxD1

1

2

DC MOTOR

SW1

G 6V 12 G 6V 13 G 6V 14 G 6V 15

15 SV0 14 SV1 13 SV2 12 SV3

 

SERVO

รูปที่ L7-2 การตอวงจรเพือใช ่ งานชุดกลองสมองกล IPST-MicroBOX (SE) กับไอซีวัดอุณหภูมิ MCP9701

การเชือมต ่ อทางฮารดแวร ่ ่อมตอกับไอซี MCP9701 เขากับจุดตอ A3 ของแผงวงจรหลัก IPST-SE  ตอสายวัดอุณหภูมิทีเชื

ขั้นตอนการทดลอง 7.1 เขียนโปรแกรมที่ L7-1 บันทึกในชื่อ MCP9701_Thermometer.pde 7..2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 7.3 รันโปรแกรม ทดลองใชมือจับที่ตัวไอซีวัดอุณหภูมิ หรือนําหัววัดอุณหภูมิไปแชในนําแข็ ้ ง สังเกตการทํางานที่ จอแสดงผลบนแผงวงจร IPST-SE แผงวงจร IPST-SE แสดงขอความแจงหนาที่การทํางาน และแสดงคาอุณหภูมิในหนวยองศาเซลเซียส (Celsius) ดวยความละเอียดทศนิยม 3 ตําแหนง โดยที่คาของอุณหภูมิจะแสดงดวยตัวเลขสีเหลืองขนาดใหญ (3x)


     176

#include <ipst.h> int val,i; float Temp; void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(1,2,"Digital"); glcd(2,2,"THERMO"); glcd(3,3,"METER"); val=0; for (i=0;i<20;i++) { val = val+analog(3); } val = val/20; Temp = (float(val)*0.25) - 20.51 ; setTextSize(3); setTextColor(GLCD_YELLOW); glcd(3,1,"%f",Temp); setTextColor(GLCD_WHITE); setTextSize(2); glcd(6,2,"Celsius"); delay(500);

// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรเก็บคาทีอ่ านไดจาก MCP9701 // ประกาศตัวแปรคาอุณหภูมืในแบบทศนิยม // เคลียรจอแสดงผล // เลือกขนาดตัวอักษร 2 เทา

// แสดงขอความเริ่มตน

// กําหนดรอบการอานคาจาก MCP9701 รวม 20 ครั้ง // อานคาจากอินพุต A3 // หาคาเฉลี่ยจากการอานคา 20 ครั้ง // แปลงคาเปนอุณหภูมิในหนวยองศาเซลเซียส // เปลียนขนาดตั ่ วอักษรเปน 3 เทา // เปลียนสีตัวอักษรเปนสีเหลือง // แสดงคาอุณหภูมิดวยความละเอียดทศนิยม 3 ตําแหนง // เปลียนสีตัวอักษรเปนสีขาว // เปลียนขนาดตั ่ วอักษรเปน 2 เทา // แสดงหนวยองศาเซลเซียส // หนวงเวลากอนเริ่มตนการอานคาในรอบใหม

} คําอธิบายโปรแกรม ในโปรแกรมนี้หัวใจสําคัญคือ การคํานวณเพื่อเปลียนข ่ อมูลดิจิตอลทีได ่ จากการแปลงแรงดันเอาตพุต ของไอซี MCP9701 เปนคาอุณหภูมิในหนวยองศาเซลเซียส กระบวนการจะเริ่มจากการอานและแปลงคาของ แรงดันไฟตรงทีจุ่ ดตอ A3 ซึงได ่ มาจากการทํางานของไอซี MCP9701 มาเก็บไวในตัวแปร val จากนันนํ ้ าขอมูล ทีได ่ มาคํานวณดวยสูตร Temp = (val x 0.25) - 20.51 จากนั้นนําคาอุณหภูมิไดมาแสดงผลดวยความละเอียด ทศนิยม 3 ตําแหนง

โปรแกรมที่ L7-1 : ไฟล MCP9701_Thermometer.pde โปรแกรมภาษา C/C++ สําหรับพัฒนากลอง สมองกล IPST-MicroBOX (SE) เปนเครื่องวัดอุณหภูมิระบบตัวเลขอยางงาย


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.