วันพฤหัสบดีที่ 11 กันยายน พ.ศ. 2557

Assignment III

AssignmentIII


1. เขียนโค้ดสำหรับบอร์ด Arduino โดยสร้างเป็น C# class ดังต่อไปนี้    Class StringStack เป็นโครงสร้างข้อมูลแบบ Stack (กองซ้อน) สำหรับเก็บ String Object


การทำงานของโปรแกรมประกอบไปด้วย 3 ส่วน คือ StringStack.h StringStack.cpp และ StringStack.ino

ส่วนที่ 1 : StringStack.cpp เป็นส่วนที่เขียนลายละเอียดเกี่ยวกับคลาส และแต่ละ method ว่ามีการทำงานอย่างไร รวมถึงจะต้อง include ไฟล์.h ที่เป็น header 
     
       constructor เป็นส่วนที่ใช้กำหนดคุณสมบัติและกำหนดค่าเริ่มต้นของคลาส

method put : ถ้า Stack ยังไม่เต็ม จะนำค่าพารามิเตอร์ที่รับเข้ามา มาเก็บใน stack โดยมีตัวแปร pointer ชี้ที่อยู่ของแต่ละข้อมูล และเพิ่มค่า count ขึ้นอีก 1


method get : ถ้า Stack ยังมีข้อมูลอยู่ จะนำข้อมูลออกจาก stack ได้ โดยรับค่าที่อยู่ของพารามิเตอร์และเมื่อเรียก method get จะนำค่าบนสุดของ stack ไปเก็บไว้ใน ที่อยู่ที่ของพารามิเตอร์


method size : เป็นการ check ขนาดของ Stack ซึ่งเมื่อเรียก method นี้ จะรีเทิร์นจำนวนข้อมูลที่มีอยู่ใน Stack


method isEmpty : เป็นการ check ว่า Stack ว่างหรือไม่ โดย check จาก จำนวนของข้อมูลที่มีอยู่ใน Stack


method isFull : เป็นการ check ว่า Stack เต็มหรือไม่ โดย check จาก จำนวนของข้อมูลที่มีอยู่ใน Stack 




ส่วนที่ 2 :  StingStack.h เป็นส่วนของ Header ใช้กำหนดชื่อ class , method และ variable โดยยังไม่ได้ระบุถึงรายละเอียดต่างๆ ของ method


ส่วนที่ 3 : StringStack.ino เป็นส่วนโค้ดทดสอบการทำงานของ Class StringStack ที่ได้สร้างไว้

เริ่มต้นด้วยการ สร้าง object st จาก class StringStack 




สามารถ Download ตัวอย่าง Code ข้อ 1 ได้ที่นี้

2) ใช้คลาส StringStack ในข้อแรก นำมาเขียนโค้ด Arduino เพื่อให้มีพฤติกรรมการทำงานดังนี้
2.1) บอร์ด Arduino มีวงจรปุ่มกด Get ทำงานแบบ Active-Low (ใช้ตัวต้านทานแบบ Pull-up, 10k)
2.2) ผู้ใช้สามารถส่งข้อความ (ภาษาอังกฤษ) ทีละบรรทัด (ไม่เกิน 20 ตัวอักขระต่อบรรทัด) จากคอมพิวเตอร์ โดยส่งผ่าน Serial Monitor ของ Arduino IDE ไปยังบอร์ด Arduino
2.3) ข้อความแต่ละบรรทัดที่ถูกส่งไปยัง Arduino จะถูกจัดเก็บใน StringStack (เก็บบนกองซ้อน) ถ้าไม่เต็มความจุ แต่ถ้าเต็มความจุ ไม่สามารถเก็บข้อความใหม่ได้ Arduino จะต้องส่งข้อความ "Full" กลับมา
2.4) เมื่อมีการกดปุ่ม Get แล้วปล่อยหนึ่งครั้ง ข้อความบนสุด (ถ้ามี) ของ StringStack จะถูกดึงออกมาแล้วส่งผ่าน Serial Monitor ไปยังคอมพิวเตอร์
แต่ถ้าไม่ข้อความใดๆ Arduino จะต้องส่งข้อความ "Empty" กลับมา เมื่อกดปุ่มแล้วปล่อย


รูปโค้ดการทำงานของไฟล์ .ino ส่วนที่ 1 

       โค้ดในส่วนแรกนี้เป็นส่วนของการกำหนดตัวแปร และ setup ค่าต่างๆ คือ มีการกำหนดตัวแปร num ซึ่งใช้ในการกำหนดความจุของ stack ตัวแปร str และ buf ใช้ในการเก็บข้อมูลที่รับจากผู้ใช้ และมีการสร้าง object ชนิด StringStack ชื่อ st โดยมีการป้อนค่า num ไปเป็น argument ให้กับ st จากนั้นเป็นการ setup ค่าของ serial port คือ 115200 และ ขา pin ที่ใช้สหรับรับอินพุตปุ่มกดจากผู้ใช้งาน

รูปโค้ดการทำงานของไฟล์ .ino ส่วนที่ 2

     โค้ดในส่วนที่สองนี้เป็นส่วนของการอ่านค่าภายใน serial port เมื่อผู้ใช้งานมีการส่งข้อมูลผ่าน serial port มา โดยจะใช้ำสั่ง Serial.readString ในการอ่านค่าข้อมูลที่ถูกส่งมา จากนั้นให้นำไปเก็บใส่ Stack ที่สร้างไว้ในตอนแรก ถ้า stack ยังไม่เต็ม แต่ถ้าเต็มก็จะให้แสดงคำว่า full โดยข้อมูลที่จะนำมาใส่ใน Stack นั้น มีความยาวได้ไม่เกิน 20 ตัวอักษร

รูปโค้ดการทำงานของไฟล์ .ino ส่วนที่ 3


     โค้ดในส่วนสุดท้ายนี้เป็นส่วนของการอ่านค่าจาก pin บนบอร์ด Arduino ว่ามีการรับค่าการกดปุ่มจากผู้ใช้งานหรือไม่ ถ้าผู้ใช้งานกดปุ่มแล้วปล่อย ก็จะทำการ get ค่า ที่อยู่บนสุดของ stack ออกมา แต่ถ้า stack ว่างเปล่า ก็จะให้แสดงคำว่า Empty 

ภาพแสดงการต่อวงจร



ภาพแสดงการต่อวงจรจริง


ภาพจำลองการต่อวงจรจริง

ผลการทดสอบการทำงาน

รูปภาพแสดงผลการทำงานเมื่อป้อน input ผ่านทาง Serial Monitor




รูปภาพแสดงผลการทำงานเมื่อป้อน input ผ่านทาง Serial Monitor เกิน 20 ตัวอักษร




รูปภาพแสดงผลการทำงานเมื่อป้อน input ผ่านทาง Serial Monitor จนครบความจุของ Stack




รูปภาพแสดงผลการทำงานเมื่อผู้ใช้งานกดปุ่มเพื่อ get ค่าจาก Stack




รูปภาพแสดงผลการทำงานเมื่อผู้ใช้งานกดปุ่มเพื่อ get ค่าจาก Stack แต่ Stack ว่าง

สามารถ Download ตัวอย่าง Code ข้อ 2 ได้ที่นี้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น