1) เขียนโค้ดสำหรับบอร์ด Arduino โดยสร้างเป็น C++ Class ดังต่อไปนี้
- Class StringQueue เป็นโครงสร้างข้อมูลแบบ Queue สำหรับเก็บ String objects
- สร้างคลาส StringQueue และทดสอบการทำงานโดยใช้โค้ดตัวอย่างต่อไปนี้
- ทดสอบโดยใช้ฮาร์ดแวร์จริง (ใช้บอร์ด Arduino และแสดงผลผ่าน Serial Monitor ของ Arduino IDE)
อุปกรณ์ที่ใช้ในการทดลอง
1. Arduino Uno rev.3 1 บอร์ด
2. USB connector type B 1 เส้น
code arduino
http://www.youtube.com/watch?v=IEt4IPuZ5Hk&feature=youtu.be
2) ใช้คลาส StringQueue ในข้อแรก นำมาเขียนโค้ด Arduino เพื่อให้มีพฤติกรรมการทำงานดังนี้ กำหนดให้มีความจุเช่น 10 ข้อความ
2.1) บอร์ด Arduino มีวงจรปุ่มกด Get ทำงานแบบ Active-Low (ใช้ตัวต้านทานแบบ Pull-up, 10k)
2.2) ผู้ใช้สามารถส่งข้อความ (ภาษาอังกฤษ) ทีละบรรทัด (ไม่เกิน 16 ตัวอักขระต่อบรรทัด) จากคอมพิวเตอร์ โดยส่งผ่าน Serial Monitor ของ Arduino IDE ไปยังบอร์ด Arduino ใช้ baudrate 115200
2.3) ข้อความแต่ละบรรทัดที่ถูกส่งไปยัง Arduino จะถูกจัดเก็บใน StringQueue ถ้าไม่เต็มความจุ แต่ถ้าเต็มความจุ ไม่สามารถเก็บข้อความใหม่ได้ Arduino จะต้องส่งข้อความ "Full" กลับมา และมี LED "Full" ติด
2.4) เมื่อมีการกดปุ่ม Get แล้วปล่อยหนึ่งครั้ง ข้อความแรก (ถ้ามี) ของ StringQueue จะถูกดึงออกมาแล้วส่งผ่าน Serial Monitor ไปยังคอมพิวเตอร์ และนำไปแสดงผลบนจอ 16x2 LCD ที่ต่อกับบอร์ด Arduino ด้วย แต่ถ้าไม่ข้อความใดๆ Arduino จะต้องส่งข้อความ "Empty" กลับมา เมื่อกดปุ่มแล้วปล่อย และให้มี LED "Empty" ติด
2.5) บรรทัดแรกของ LCD แสดงข้อความที่ถูกอ่านออกมาล่าสุดจาก StringQueue บรรทัดที่สอง ให้แสดงจำนวนข้อความที่มีอยู่ใน StackQueue ในขณะนั้น
2.6 16x2 LCD module สามารถยืมได้จากห้อง ESL และการเขียนโค้ดเพื่อใช้งาน LCD สามารถใช้ไลบรารี่ของ Arduino ได้
อุปกรณ์ที่ใช้ในการทดลอง
1. Arduino Uno rev.3 1 บอร์ด
2. USB connector type B 1 เส้น
3. LCD 16 X 2 1 อัน
4. LED 2 อัน
5. Push button switch 1 อัน
6. ตัวต้านทานขนาด 330 ohm 2 ตัว
7. ตัวต้านทานขนาด 300 ohm 1 ตัว
8. สายไฟสำหรับเชื่อมต่อวงจร 1 ชุด
Wiring Diagram ด้วย Fritzing
code arduino
ประกาศตัวแปร
- ส่วนของการ import Lib สำหรับ LCD 16X2, StringQueue
- ประกาศตัวแปรเริ่มต้นต่างๆ(State_Button, Delay, LCD)
void setup()
- set ขนาด กว้าง x ยาวของ LCD
- ตั้งค่า Timer_1 สำหรับ Delay 1 s
- และตั้งค่า push_Button, LED
- จะทำการ get ค่าจาก Queue แบบ FIFO (First-In-First-Out)
- ทำการแสดงผล ตัวที่ get ผ่านทาง LCD และเมื่อหมดแล้วจะแสดงข้อความ isEmpty
* lcd.setCursor( บรรทัดไหน?(0 = บรรทัดบน 1 = บรรทัดล่าง), เริ่มตัวที่เท่าไร? )
put ไปใน Queue
- รับข้อความผ่านทาง SerialPort ขนาดไม่เกิน 16 ตัวอักษร
- จะแสดงผลผ่านทาง LCD เมื่อใส่ไปเต็ม จะแสดงว่า isFull !
ผลการทดลอง
- การแสดงผลข้อมูลบน LCD
http://www.youtube.com/watch?v=k5AZPddwGpI&feature=youtu.be