วันนี้ผมตั้งใจจะนำเสนอการใช้ Pinguino 8 บอร์ดเชื่อต่อกับจอ LCD โดยผมเลือกที่จะใช้ LCD Keys Pad Shield เพราะความสะดวก สามารถเสียบลงบนตัว Pinguino 8 ได้เลย หาซื้อได้ง่าย และยังราคาถูกอีกด้วย ผมคิดว่าถูกกว่า และสะดวกกว่า ซื้อแล้วมา wiring สายเองเสียอีกครับ ผู้อ่านหลายๆท่านอาจจะมีอยู่แล้วกับตัวก็ได้ หรือถ้าใครยังไม่มีก็ลอง search หา ลองซื้อมาเล่นดูนะครับ ตัวที่ผมจะใช้จะมีหน้าตาประมาณในรูปข้างล่างนี้เลยครับ
![]() |
| รูปที่ 1 LCD Key pad shield ที่ใช้ |
คราวนี้เมื่อเราจะใช้งานเจ้า shield ตัวนี้เราก็จำเป็นจะต้องมี schematic รวมถึงตำแหน่งขาที่มันจะเชื่อมต่อกับบอร์ด Pinguino 8 ของเราเสียก่อนจึงจะสามารถเขียนโปรแกรมเพื่อใช้งานมันได้ ซึ่งผมใช้ schematic จากที่นี้ครับ
http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)
และอันนี้ก็
diagram ของมันครับ
ซึ่งใน
link ข้างบนนั้นนอกจาก schematic แล้วยังมีโค้ดตัวอย่างที่ใช้กับ
Arduino ให้อีกด้วยครับ ซึ่งเราสามารถ copy แล้วเอามา modify เพียงเล็กน้อยก็สามารถใช้งานกับบอร์ด
Pinguino 8 ได้แล้วครับ
หลังจากเราได้
schematic กับ pin diagram ของเจ้า LCD Key pad shield
มาแล้ว เราก็ต้องมาดูว่าเจ้า Pinguino 8 นั้นมี
pin number อะไรบ้างและมีการจัดเรียงบนบอร์ดอย่างไร อันดับแรกคือ pin number ของ
Pinguino ซึ่งใช้ PIC18F45K50 เราสามารถดูได้จาก
link ต่อไปนี้ครับ หรือจะดูที่รูปที่ 2 เลยก็ได้ครับ
![]() |
| รูปที่ 2 Pinguino pin number |
จากรูปที่
2 จะเห็นว่า Pinguino
ได้กำหนดขาต่างๆของ PIC18F45K50 ไว้เป็นหมายเลขเพื่อให้เรียกใช้งานได้สะดวกคล้ายกับ
Arduino ตัวอย่างเช่น ขา RB0 ก็จะเป็นขาหมายเลข
0 ขา RB1 ก็จะเป็นขาหมายเลข 1
ไล่เรียงกันไป
ซึ่งแต่ละขาก็จะมีความสามารถแตกต่างกันไป คราวนี้พอผมเอามาทำเป็นบอร์ด Pinguino 8 แล้วพยายามจัดเรียงขาให้ได้ใกล้เคียงกับ Arduino ตำแหน่งขามันเลยไม่ได้เรียงกันเป็นลำดับเหมือนกับ
Arduino ซึ่งอันนี้เป็นสิ่งที่ทำให้สับสนได้ง่ายโดยเฉพาะผู้เริ่มต้น
แม้แต่กับตัวผมเองเมื่อแรกเริ่มก็งงจนเขียนโค้ดผิดแล้วงมหาสาเหตุอยู่หลายวันทีเดียว
ดังนั้นที่บอร์ด Pinguino 8 ผมจึงมีเขียนหมายเลขกำกับเอาไว้ที่แต่ละขาเพื่อให้ง่ายเวลาใช้งานและเขียนโปรแกรม
รูปที่ 3 และรูปที่ 4 แสดงตัวเลขกำกับแต่ละขาครับ
![]() |
| รูปที่ 3 pin number ฝั่ง digital |
![]() |
| รูปที่ 4 pin number ฝั่ง analog |
ทีนี้เมื่อเราพิจารณา pin diagram และ schematic ของ LCD Key pad shield กับหมายเลขกำกับบนบอร์ด Pinguino 8 ก็จะสามารถสรุปการเชื่อมต่อได้ดังต่อไปนี้ครับ
LCD
Shield Pinguino 8
D4 24
D5 18
D6 17
D7 16
RS 5
E 4
Back
light 2
Keys 8 หรือ A0
เมื่อเรารู้หมายเลขขาที่ใช้ในการเชื่อต่อแล้วเราก็สามารถเริ่มเขียนโค้ดเพื่อแสดงข้อความบนจอ LCD ได้แล้วครับ
เริ่มต้นจากการ define ขา back light ก่อนเพื่อให้ง่ายในการเขียนโค้ด และ IDE รู้จักและเพิ่มในส่วนออโต้คอมพลีตให้เราด้วย
และเราจะกำหนดขา back light ให้เป็นเอ้าต์พุท และสั่งให้เป็น on โดยส่ง logic high ออกไป ด้วยคำสั่ง
ถัดมาเราจึงทำการ initialize LCD ด้วยคำสั่ง
ซึ่งค่าพารามิเตอร์ที่ส่งให้ฟังก์ชันจะเป็นหมายเลข I/O ของ Pinguino ที่เชื่อมต่อกับจอ LCD โดยตัวแรกจะเป็นขา RS, E, และตามมาด้วยขาดาต้า D4-D7 ตามลำดับ นี่เป็นในกรณีที่เชื่อมต่อจอ LCD ในแบบ 4 bit mode นะครับดังนั้นพารามิเตอร์ที่เหลือจึงใส่ค่าเป็น 0 สี่ตัว
เมื่อมาถึงตรงนี้เราก็สามารถเริ่มใช้งานจอ LCD ได้แล้ว โดยผมจะทำการเคลียร์หน้าจอเสียก่อน จากนั้นจึงกำหนดให้เคอร์เซอร์ไปที่ตำแหน่งเริ่มต้นของแถวแรกซึ่งก็คือตำแหน่ง 0,0 แล้วจึงส่งข้อความออกไปแสดงดังตัวอย่างโค้ดข้างล่างนี้ครับ
และนี่คือตัวอย่างโค้ดทั้งหมดครับ
เพิ่มเติม
#define BACK_LIGHT 2 //LCD back light control by pin2
และเราจะกำหนดขา back light ให้เป็นเอ้าต์พุท และสั่งให้เป็น on โดยส่ง logic high ออกไป ด้วยคำสั่ง
pinMode(BACK_LIGHT, OUTPUT);
digitalWrite(BACK_LIGHT, HIGH);
ถัดมาเราจึงทำการ initialize LCD ด้วยคำสั่ง
lcd.pins(5,4,24,18,17,16,0,0,0,0); //RS,E,D4,D5,D6,D7 in 4 bit mode
ซึ่งค่าพารามิเตอร์ที่ส่งให้ฟังก์ชันจะเป็นหมายเลข I/O ของ Pinguino ที่เชื่อมต่อกับจอ LCD โดยตัวแรกจะเป็นขา RS, E, และตามมาด้วยขาดาต้า D4-D7 ตามลำดับ นี่เป็นในกรณีที่เชื่อมต่อจอ LCD ในแบบ 4 bit mode นะครับดังนั้นพารามิเตอร์ที่เหลือจึงใส่ค่าเป็น 0 สี่ตัว
ต่อมาเราจำเป็นต้องกำหนดว่า
LCD ที่เรากำลังใช้งานอยู่นั้นเป็นชนิดใด 16x2 หรือ 20x4
โดยใช้คำสั่งต่อไปนี้ครับ
lcd.begin(16,2); //collumn, row
เมื่อมาถึงตรงนี้เราก็สามารถเริ่มใช้งานจอ LCD ได้แล้ว โดยผมจะทำการเคลียร์หน้าจอเสียก่อน จากนั้นจึงกำหนดให้เคอร์เซอร์ไปที่ตำแหน่งเริ่มต้นของแถวแรกซึ่งก็คือตำแหน่ง 0,0 แล้วจึงส่งข้อความออกไปแสดงดังตัวอย่างโค้ดข้างล่างนี้ครับ
lcd.clear();
lcd.setCursor(0,0); //collumn 0, first row
lcd.printf("Hello World!....");
และนี่คือตัวอย่างโค้ดทั้งหมดครับ
1: /*-----------------------------------------------------
2: Author: --<Ekkachai Muangrodpai>
3: Date: 2016-07-07
4: Board: Pinguino 8 + LCD Key pad shield v1
5: Description: Display 'Hello World!' on LCD
6: LCD Shield Pinguino 8
7: D4 24
8: D5 18
9: D6 17
10: D7 16
11: RS 5
12: E 4
13: Back light 2
14: -----------------------------------------------------*/
15: #define BACK_LIGHT 2 //LCD back light control by pin2
16: void setup() {
17: // put your setup code here, to run once:
18: pinMode(BACK_LIGHT, OUTPUT);
19: digitalWrite(BACK_LIGHT, HIGH);
20: lcd.pins(5,4,24,18,17,16,0,0,0,0); //RS,E,D4,D5,D6,D7 in 4 bit mode
21: lcd.begin(16,2); //collumn, row
22: lcd.clear();
23: lcd.setCursor(0,0); //collumn 0, first row
24: lcd.printf("Hello World!....");
25: }
26: void loop() {
27: // put your main code here, to run repeatedly:
28: }
เพิ่มเติม












