The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Supawat Wattanameekeaw, 2020-02-14 22:46:36

เรียนรู้และลองเล่น Arduino เบื้องต้น

Arduino

ใบงานท่ี 4.15 การเขียนโปรแกรมใชง้ านหน่วยความจา EEPROM  195

6. ฟังก์ชั่น Arduino ทใ่ี ช้งานในใบงาน

1. ฟังก์ช่ันกาหนดโหมดการทางานให้กับขาพอร์ต โดยสามารถกาหนดไดท้ ้งั ขาดิจิทลั โดยใส่
เพียงตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกที่ตอ้ งการให้ทางานในโหมดดิจิทลั แต่
การใส่ขาตอ้ งใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไม่สามารถใช้
งานในโหมดดิจิทลั ได้ รูปแบบของฟังกช์ น่ั เป็นดงั น้ี

pinMode(pin, mode);

pin: หมายเลขขาที่ตอ้ งการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
2. ฟังก์ชั่นส่งค่าลอจิกดจิ ิทลั ไปยงั ขาพอร์ต คา่ HIGH เป็นการส่งลอจิก 1 และค่า LOW เป็นการ
ส่งลอจิก 0 ออกไปยงั ขาพอร์ต ซ่ึงฟังกช์ นั่ น้ีจะทางานไดต้ อ้ งมีการใชฟ้ ังกช์ นั่ pinMode ก่อน

digitalWrite(pin, value);

pin: หมายเลขขาท่ีตอ้ งการเขียนลอจิกออกพอร์ต
3. ฟังก์ช่ันอ่านค่าลอจิกดิจิทลั ท่ีขาพอร์ต เป็นการอา่ นค่าเขา้ มาซ่ึงอาจนามาเก็บไวใ้ นตวั แปรไว้

ตรวจสอบลอจิกทีหลงั หรือจะตรวจสอบลอจิกแบบทนั ทีก็ได้ ซ่ึงฟังก์ชน่ั น้ีจะทางานไดต้ อ้ ง
มีการใชฟ้ ังกช์ นั่ pinMode ก่อน

digitalRead(pin);

pin: หมายเลขขาพอร์ตท่ีตอ้ งการอา่ นลอจิก
4. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาที่

ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาที่
ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long

delay(ms);

ms: ตวั เลขท่ีหยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)
5. ฟังก์ช่ันกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม

Serial.begin(speed);

speed: ตวั เลขของอตั ราเร็วในการส่ือสารผา่ นพอร์ตอนุกรม

196  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

6. ฟังก์ช่ันส่งข้อมูลออกพอร์ต เป็ นฟังก์ชนั่ ที่ใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ
พมิ พข์ อ้ มูลออกทางพอร์ตเพอื่ แสดงผลที่จอคอมพิวเตอร์เม่ือพิมพเ์ สร็จตวั เคอร์เซอร์จะรออยู่
ที่ทา้ ยสิ่งท่ีพมิ พน์ ้นั ๆ

Serial.print(val) Serial.print(val, format)

7. ฟังก์ชั่นส่งข้อมูลออกพอร์ต คลา้ ยกบั ฟังก์ชน่ั Serial.print ต่างกนั ตรงที่เม่ือพิมพ์เสร็จตวั
เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้ันเมื่อสั่งพิมพค์ ร้ังถดั ไปขอ้ มูลท่ีปรากฏจะอยู่ท่ี
บรรทดั ใหม่ แทนท่ีจะตอ่ ทา้ ยเหมือนกบั ฟังกช์ น่ั Serial.print

Serial.println(val) Serial.println(val, format)

ฟังก์ชั่นใช้งานหน่วยความจา EEPROM

การใช้งานหน่วยความจา EEPROM จาเป็ นตอ้ งใช้ไลบราร่ีช่วยงาน ซ่ึงไลบรารี่มีมาพร้อมกบั

โปรแกรม Arduino IDE แลว้ ไม่ตอ้ งติดต้งั ใหม่

ไลบรารี่ แหล่งดาวน์โหลด

EEPROM.h ไม่ตอ้ งดาวนโ์ หลดเนื่องจากมาพร้อมกบั Arduino IDE

Arduino เตรียมฟังกช์ น่ั เก่ียวกบั หน่วยความจา EEPROM ใหใ้ ชง้ านหลกั ๆ ดงั น้ี

- read() อ่านคา่ จากหน่วยความจาขนาด 1 ไบตใ์ นแอดแดรสท่ีกาหนด

- write() เขียนคา่ ลงหน่วยความจาขนาด 1 ไบตใ์ นแอดแดรสที่กาหนด

- update() เขียนคา่ ลงหน่วยความจาเฉพาะขอ้ มูลท่ีเป็นคา่ ใหม่

- get() อา่ นคา่ จากหน่วยความจาตามขนาดตวั แปรในแอดแดรสท่ีกาหนด

- put() เขียนคา่ ลงหน่วยความจาตามขนาดตวั แปรในแอดแดรสที่กาหนด

1. ฟังก์ชั่นอ่านข้อมูลขนาด 1 ไบต์ เป็ นฟังกช์ น่ั ที่อ่านขอ้ มูลคร้ังละ 1 ไบตต์ ามแอดเดรสท่ีระบุ

โดยขอ้ มูลที่อ่านไดจ้ ะมีคา่ อยรู่ ะหวา่ ง 0-255 ในเลขฐานสิบ รูปแบบเป็นดงั น้ี

.read(address);

address: หมายเลขตาแหน่งของหน่วยความจาท่ีตอ้ งการอ่านคา่
2. ฟังก์ช่ันเขยี นข้อมูลขนาด 1 ไบต์ เป็นฟังกช์ น่ั ที่บนั ทึกขอ้ มูลขนาด 1 ไบตล์ งในหน่วยความจา

EEPROM ในตาแหน่งท่ีระบุ รูปแบบดงั น้ี

.write(address, value);

address: หมายเลขตาแหน่งของหน่วยความจาท่ีตอ้ งการบนั ทึก
value: ค่าที่ตอ้ งการบนั ทึกลงหน่วยความจามีคา่ ระหวา่ ง 0-255

ใบงานท่ี 4.15 การเขียนโปรแกรมใชง้ านหน่วยความจา EEPROM  197

3. ฟังก์ชั่นบันทกึ ข้อมูลขนาด 1 ไบต์เฉพาะค่าทีเ่ ปลย่ี นแปลง เป็ นฟังกช์ นั่ ที่บนั ทึกขอ้ มูลขนาด
1 ไบต์ลงในหน่วยความจา EEPROM ในตาแหน่งที่ระบุโดยฟังก์ชน่ั น้ีจะตรวจสอบว่าค่าท่ี
ตอ้ งการบนั ทึกเป็ นค่าท่ีไม่ตรงกบั ค่าที่มีอยูเ่ ดิมทาใหล้ ดจานวนวงรอบการเขียนขอ้ มูลทาให้
อายกุ ารใชง้ านยาวนานข้ึน รูปแบบดงั น้ี

.update(address, value);

address: หมายเลขตาแหน่งของหน่วยความจาท่ีตอ้ งการบนั ทึก
value: ค่าท่ีตอ้ งการบนั ทึกลงหน่วยความจามีคา่ ระหวา่ ง 0-255
4. ฟังก์ชั่นอ่านข้อมูลตามขนาดตัวแปรในตาแหน่งทร่ี ะบุ รูปแบบเป็นดงั น้ี

.get(address, data);

address: หมายเลขตาแหน่งของหน่วยความจาท่ีตอ้ งการอา่ นค่า
data: ตวั แปรที่ตอ้ งการเก็บค่าท่ีไดจ้ ากการอา่ น
5. ฟังก์ชั่นบนั ทกึ ข้อมูลตามขนาดตัวแปรในตาแหน่งทร่ี ะบุ รูปแบบเป็นดงั น้ี

.put(address, data);

address: หมายเลขตาแหน่งของหน่วยความจาที่ตอ้ งการบนั ทึก
data: ตวั แปรที่ตอ้ งการบนั ทึกค่าลงหน่วยความจา

7. วงจรทใ่ี ช้ทดลอง

วงจรเพ่ือใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป

R1 LED1
220

D9 VCC

D5 Internal pull up
D4
(INT1)D3 R2-R4 SW1
(INT0)D2 220 x2
GND
SW2

SW3

SW4

C1-C2
1uF 16V

รูปที่ 4.15-1 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

198  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

กรณีท่ีใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino
เรียบร้อยแลว้ ต่อวงจรดงั รูป

D1N15819 VCC Peripheral circuit

R1 CPU circuit
10k
7,20 ATMEGA328
SW1 VCC R4 LED1
220
1 RST AVCC D9 15
C1
0.1uF

USB to UART (TTL Level) R2,R3 3 D1(TXD) D5 11 VCC
1k 2 D0(RXD) D4 6 Internal pull up
DTR 2R290-Rx122 SW2
RXD X1 SW3
TXD 16MHz SW4
+5V C2,C3 SW5
GND 22pF
3V3 C4-C5
1uF 16V
(INT1)D3 5

(INT0)D2 4

9 XTAL1
10 XTAL2

GND

8,22

รูปที่ 4.15-2 วงจรท่ีใชไ้ อซี AVR ในการทดลอง
การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง

F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J
D12 1
D11
D10
D9
D8 5
D7
D6
D5
D4
D3 10
D2

GND
RST

D0
D1 15

ABCDE ABCDE
D13
3V3
REF
A0
A1
A2
A3
A4
A5
A6
A7
5V
RST
GND
VIN

1
5
10
15

รูปท่ี 4.15-3 การตอ่ ลงบอร์ดทดลอง
การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

รูปที่ 4.15-4 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน

ใบงานที่ 4.15 การเขียนโปรแกรมใชง้ านหน่วยความจา EEPROM  199

8. การเขยี นโค้ดโปรแกรมควบคุม

การทดลองท่ี 1 เขียนโปรแกรมอ่านค่าขอ้ มูลจากหน่วยความจา EEPROM แอดเดรส 0-20 พร้อมท้งั เขียน
ขอ้ มูลเขา้ ไปใหม่โดยใชส้ วติ ช์ 2 ตวั ในการต้งั คา่ ขอ้ มูลแลว้ ใชส้ วติ ช์ตวั ท่ี 3 บนั ทึกขอ้ มูล
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START START
กาหนดค่าเริม่ ต้นต่าง บันทึกค่าข้อมูลลง EEPROM

อ่านคา่ ข้อมูลจาก EEPROM เพ่ิมคา่ แอดเดรส 1 ค่า

SW1 ูกกด? จริง เพิม่ คา่ ข้อมลู STOP
จริง ลดค่าขอ้ มลู
เท็จ ฟังกช์ ัน่ ตอบสนองการอนิ เตอร์รพั ท์

SW2 ูกกด?
เทจ็

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include <EEPROM.h>
2 #define interruptPin 2
3 #define IncValue 3
4 #define DecValue 4
5 volatile byte value;
6 volatile byte addr=0;
7 void setup()
8{
9 Serial.begin(9600);
10 pinMode(IncValue, INPUT_PULLUP);
11 pinMode(DecValue, INPUT_PULLUP);
12 pinMode(interruptPin, INPUT_PULLUP);
13 attachInterrupt(digitalPinToInterrupt(interruptPin), mem2eeprom, FALLING);
14 for(int i=0;i<=10;i++)
15 {
16 value = EEPROM.read(i);
17 Serial.print(i);
18 Serial.print("--->");
19 Serial.print(value);
20 Serial.println();
21 delay(100);
22 }
23 }
24 void loop()
25 {
26 if(digitalRead(IncValue)==LOW)
27 {
28 value++;
29 Serial.print("Data change to :");Serial.println(value);
30 }
31 else if(digitalRead(DecValue)==LOW)
32 {
33 value--;
34 Serial.print("Data change to :");Serial.println(value);
35 }
36 delay(150);
37 }

200  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

38 void mem2eeprom()
39 {
40 EEPROM.write(addr,value);
41 Serial.print("Write data ");Serial.print(value);
42 Serial.print(" to EEPROM address ");Serial.println(addr);
43 addr++;
44 }

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบราร่ี EEPROM.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 2 กาหนดชื่อ interruptPin ใหแ้ ทน 2 (เป็นขาท่ีสวติ ช์ตอ่ อยกู่ บั ขา D2 ของ Arduino)
- บรรทดั ที่ 3 กาหนดช่ือ IncValue ใหแ้ ทน 3 (เป็นขาที่สวติ ช์ต่ออยกู่ บั ขา D3 ของ Arduino)
- บรรทดั ท่ี 4 กาหนดช่ือ DecValue ใหแ้ ทน 4 (เป็นขาที่สวติ ช์ตอ่ อยกู่ บั ขา D4 ของ Arduino)
- บรรทดั ท่ี 5 ประกาศตวั แปรสาหรับเก็บขอ้ มูลของหน่วยความจา EEPROM
- บรรทดั ท่ี 6 ประกาศตวั แปรสาหรับเก็บแอดเดรสของหน่วยความจา EEPROM
- บรรทดั ท่ี 9 กาหนดความเร็วในการส่ือสารผา่ นพอร์ตอนุกรมที่ 9600 bps
- บรรทดั ที่ 10-12 กาหนดโหมดใหก้ บั ขาพอร์ตที่ตอ่ กบั สวติ ชท์ างานเป็ นอินพุทพอร์ต
- บรรทดั ที่ 13 ประกาศใชง้ านอินเตอร์รัพทจ์ ากขา D2(INT0)
- บรรทดั ท่ี 14-22 อ่านขอ้ มูลจากหน่วยความจา EEPROM แอดเดรส 0 ถึงแอดเดรสท่ี 10 แลว้ นา
ค่าท่ีอา่ นไดม้ าแสดงผลหนา้ จอคอมพิวเตอร์
- บรรทัดที่ 26-30 ตรวจสอบถ้าสวิตช์ IncValue ถูกกดให้ทาการเพิ่มค่าตวั แปร value ข้ึน 1 ค่า
พร้อมแสดงผลหนา้ จอคอมพิวเตอร์
- บรรทดั ท่ี 31-35 ตรวจสอบถา้ สวติ ช์ DecValue ถูกกดใหท้ าการลดค่าตวั แปร value ลง 1 คา่ พร้อม
แสดงผลหนา้ จอคอมพิวเตอร์
- บรรทัดท่ี 38-44 ฟังก์ช่ันตอบสนองการอินเตอร์รัพท์ทาหน้าที่บนั ทึกค่าจากตวั แปร value ลง
หน่วยความจา EEPROM

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus เมื่อทาการจาลองการทางานท่ีมีการบนั ทึกขอ้ มูลลง
หน่วยความจา EEPROM แลว้ กดหยดุ การจาลองขอ้ มูลท่ีเคยบนั ทึกลงหน่วยความจาจะยงั คง
อยู่ ดงั น้นั เมื่อทาการจาลองใหมท่ ่ีมีการอา่ นขอ้ มูลจากหน่วยความจา EEPROM จะเป็นขอ้ มูล
ท่ีไดถ้ ูกบนั ทึกไวจ้ ากการจาลองคร้ังที่ผา่ นมา และถา้ หากตอ้ งการลา้ งขอ้ มูลใน EEPROM ให้
ดูเหมือนวา่ เป็ นการทดลองคร้ังแรกในซีพียใู หม่สามารถลา้ งขอ้ มูลใน EEPROM ไดโ้ ดยการ
คลิกที่ Reset Persistent Model data ดงั รูปที่ 4.15-5
2. ทดลองดว้ ยวงจรจริง
3. สังเกตผลท่ีเกิดข้ึนจากการบนั ทึกขอ้ มูลลงในหน่วยความจา EEPROM

ใบงานที่ 4.15 การเขียนโปรแกรมใชง้ านหน่วยความจา EEPROM  201

รูปท่ี 4.15-5 การลา้ งขอ้ มูลที่ถูกบนั ทึกไวใ้ น EEPROM ของซีพยี ู

9. สรุปผลการปฏบิ ัติงาน

10. งานทมี่ อบหมาย

1. เขียนโปรแกรมอ่านขอ้ มูลจากหน่วยความจา EEPROM ทุกแอดเดรสที่มีขอ้ มูลบนั ทึกอยู่
(ข้อมูลในแอดเดรสที่ไม่ได้ถูกบันทึกจะมีค่าเป็ น 255) และมีการบันทึกค่าใหม่ลง
หน่วยความจา EEPROM โดยใช้สวิตช์ SW1, SW2 ในการต้งั ค่า และการบนั ทึกค่าให้ใช้
สวิตช์ SW3 โดยให้ทางานดว้ ยวิธีอินเตอร์รัพท์พร้อมท้งั ให้ LED ติดสวา่ งเมื่อมีการบนั ทึก
ขอ้ มูลและดบั เม่ือบนั ทึกขอ้ มูลเสร็จสิ้น (ภายในฟังก์ช่ันตอบสนองอินเตอร์รัพท์ฟังก์ชั่น
delay จะไมส่ ามารถใชง้ านไดใ้ หใ้ ชว้ ธิ ีอื่นแทน)

2R210 LED1

D9 VCC

D5 Internal pull up
D4
(INT1)D3 2R220-Rx42 SW1
(INT0)D2
GND SW2

SW3

SW4

C1-C2
1uF 16V

รูปท่ี 4.15-6 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

202  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

2. เขียนโปรแกรมอ่านขอ้ มูลจากหน่วยความจา EEPROM ทุกแอดเดรสท่ีมีขอ้ มูลบนั ทึกอยู่
(ขอ้ มูลในแอดเดรสท่ีไม่ไดถ้ ูกบนั ทึกจะมีค่าเป็ น 255) และมีการบนั ทึกค่าใหมท่ ี่เป็ นตวั แปร
ทศนิยม (float) ลงหน่วยความจา EEPROM โดยใชส้ วติ ช์ SW1 ต้งั คา่ เลขที่มากวา่ 0 ใชส้ วติ ช์
SW2 ต้งั ค่าทศนิยมหลกั ท่ี 1 SW3 ต้งั ค่าทศนิยมหลกั ที่ 2 (ใชท้ ศนิยม 2 หลกั ) การบนั ทึกค่า
ให้ใช้สวิตช์ SW4 โดยให้ทางานด้วยวิธีอินเตอร์รัพทพ์ ร้อมท้งั ให้ LED ติดสวา่ งเมื่อมีการ
บนั ทึกขอ้ มูลและดับเม่ือบนั ทึกขอ้ มูลเสร็จสิ้น (ภายในฟังก์ช่ันตอบสนองอินเตอร์รัพท์
ฟังกช์ น่ั delay จะไมส่ ามารถใชง้ านไดใ้ หใ้ ชว้ ธิ ีอ่ืนแทน)

R1 LED1
220

D9 VCC

D5 Internal pull up
D4
(INT1)D3 R2-R4 SW1
(INT0)D2 220 x2

SW2

SW3

SW4

GND C1-C2
1uF 16V

รูปที่ 4.15-7 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

ใบงานท่ี 4.16 การเขียนโปรแกรมใชง้ านคียแ์ พด  203

ใบงานที่ 4.16

การเขยี นโปรแกรมใช้งานคยี ์แพด

1. จุดประสงค์ทว่ั ไป

เพอื่ ใหส้ ามารถเขียนโปรแกรมใชง้ านคียแ์ พดได้

2. จุดประสงค์เชิงพฤตกิ รรม

1. บอกวธิ ีเขียนโปรแกรมใชง้ านคียแ์ พดได้
2. ทดสอบการทางานของบอร์ด Arduino ได้
3. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด

3. เคร่ืองมือและอปุ กรณ์

1. บอร์ดทดลอง Breadboard 830 Point 1 ตวั 1 แผน่
2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 1 ตวั
1 ตวั
2.1 ตวั ตา้ นทาน 220 ohm 1 ตวั
2.2 LED 3mm 1 เส้น
3. บอร์ด Arduino Nano 3.0 1 เครื่อง
4. คียแ์ พดขนาด 3×4
5. สายเชื่อมต่อ USB (Mini USB)
6. คอมพวิ เตอร์

4. ลาดบั ข้นั การปฏบิ ตั ิงาน

1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเกี่ยวขอ้ ง
2. ดาเนินการตอ่ วงจรลงบอร์ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุปผลการปฏิบตั ิงาน

204  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

5. ทฤษฎพี ืน้ ฐาน

การใชง้ านสวติ ช์ของไมโครคอนโทรลเลอร์ไม่วา่ จะเป็ นในตระกูลใดสามารถใชง้ านไดโ้ ดยการ
ต่อเขา้ กบั พอร์ต 1 บิตต่อสวติ ช์ 1 ตวั ซ่ึงการต่อลกั ษณะน้ีเหมาะสาหรับวงจรที่ใชส้ วติ ช์จานวนนอ้ ยแต่ถา้
หากตอ้ งการใชง้ านสวิตช์จานวนมากจะทาให้เหลือพอร์ตที่ไปใชง้ านอยา่ งอ่ืนลดลง ตวั อยา่ งเช่นตอ้ งการ
ต่อสวติ ชจ์ านวน 12 ตวั กบั พอร์ตดิจิทลั ของ Arduino UNO หรือ Nano ที่มีพอร์ตดิจิทลั ใชง้ านเพียง 14 บิต
(หากมีการสื่อสารผา่ นพอร์อนุกรมจะเหลือเพยี ง 12 ตวั ) จะไม่เหลือพอร์ตเอาไปใชง้ านอื่นไดเ้ ลยดงั รูป

D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13

1 2 3 4 5 6 7 8 9 0 *#

รูปที่ 4.16-1 การตอ่ สวติ ช์แบบทว่ั ไปกบั พอร์ตดิจิทลั

วิธีการลดขนาดของพอร์ตใช้งานโดยสามารถต่อสวิตช์ได้จานวนมากคือการต่อสวิตช์แบบ
เมตริกเช่นตอ้ งการต่อสวิตช์จานวน 16 ตวั สามารถจดั วางแบบ 4×4 ซ่ึงใชพ้ อร์ตเพียง 8 บิตหรือตอ้ งการ
ต่อสวิตช์จานวน 12 ตวั สามารถจดั วางแบบ 3×4 ซ่ึงใชพ้ อร์ตเพียง 7 บิตทาให้ลดขนาดของพอร์ตใชง้ าน
ไดก้ ารตอ่ สวติ ชเ์ ป็นดงั รูป 4.16-2

D12 1 123

row pinouts D11 2 456

D10 3 789

D9 4 * 0#

567
D8 D7 D6

column pinouts

รูปท่ี 4.16-2 การต่อสวติ ช์ 12 ตวั ต่อแบบเมตริก 3×4

การใช้งานจะตอ้ งเขียนโปรแกรมให้พอร์ตดา้ นใดดา้ นหน่ึงเป็ นอินพุทพอร์ตส่วนอีกด้านเป็ น
เอาทพ์ ุต โดยวธิ ีเขียนโปรแกรมตรวจสอบการกดคียใ์ ชว้ ธิ ีการสั่งใหพ้ อร์ตที่เช่ือมต่อเป็ นสวติ ช์ดา้ นที่เป็น
เอาทพ์ ุทให้มีค่าลอจิก 0 (เสมือนต่อลงกราวด์) ช่วงเวลาละ 1 บิตแลว้ ตรวจสอบการกดสวิตช์จากพอร์ตที่
เช่ือมตอ่ ดา้ นท่ีเป็นอินพทุ วา่ มีการเปล่ียนแปลงในบิตใดตรงกบั หมายเลยสวติ ชใ์ ดดงั รูป 4.16-3

ใบงานท่ี 4.16 การเขียนโปรแกรมใชง้ านคียแ์ พด  205

01 123 11 123 11 123

12Logic to Input Port 02 12 456
Logic to Input Port
Logic to Input Port
456 456

13 789 13 789 03 789

14 * 0# 14 * 0# 14 * 0#

567 567 567

Logic0 from Ou1tput Port1 Logic0 from Ou1tput Port1 Logic0 from Ou1tput Port1

รูปที่ 4.16-3 ตวั อยา่ งค่าที่อา่ นไดจ้ ากการกดสวติ ช์เมื่อใหข้ า 5 เป็นลอจิก 0

ตารางที่ 4.16-1 คา่ ท่ีอ่านไดจ้ ากการกดสวติ ชใ์ นแตล่ ะตวั

คา่ ท่ีส่งออกพอร์ตเอาทพ์ ุทไป เม่ือกดสวติ ช์หมายเลข คา่ ที่รับไดจ้ ากพอร์ตอินพุท

ยงั สวติ ช์ดา้ น Colum ขา 5,6,7 ที่ตอ่ ดา้ น Row ขา 1,2,3,4

1 0111

011 4 1011
7 1101
* 1110

2 0111

101 5 1011
8 1101

0 1110

3 0111

110 6 1011
9 1101

# 1110

ปัจจุบนั มีคียแ์ พดสาเร็จรูปมาให้ใชง้ านโดยผใู้ ชง้ านไม่ตอ้ งออกแบบวงจรเองทาให้สะดวกมาก
ยิ่งข้ึน คียแ์ พดท่ีนิยมนามาใชง้ านมีการจดั เรียงขาโดย 4 ขาแรกเป็ นดา้ น Row อีก 3 ขาที่เหลือเป็ นด้าน
Colum ดงั รูป 4.16-4

123 123
456 456
789 789
* 0# * 0#

1234 567

17

รูปที่ 4.16-4 คียแ์ พดขนาด 3×4 และการจดั เรียงขา

206  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

การเขียนโคด้ โปรแกรมเพือ่ อ่านค่าจากสวิตช์คียแ์ พดปัจจุบนั มีไลบราร่ีช่วยงานทาใหผ้ เู้ ขียนโคด้

สามารถเขียนโคด้ ไดง้ ่ายข้ึนสามารถดาวนโ์ หลดไดท้ ี่

ไลบราร่ี แหล่งดาวน์โหลด

Keypad.h https://github.com/Chris--A/Keypad

มีข้นั ตอนการดาเนินการเพื่อนาไลบรารี่มาใชง้ านดงั น้ี
1. ดาวน์โหลดไลบราร่ีซ่ึงเป็นไฟล์ Zip ดงั รูป

รูปท่ี 4.16-5 การดาวน์โหลดไลบราร่ี

2. ทาการเพิม่ ไลบรารี่ท้งั 2 ลงในโปรแกรม Arduino IDE โดยการเพ่มิ จากไฟล์ zip แลว้ ทาการหา
ไฟล์ zip ที่ไดจ้ ากการดาวน์โหลดในขอ้ 1 และ 2

รูปที่ 4.16-6 การเพิม่ ไลบราร่ีที่เป็นไฟล์ zip ลงในโปรแกรม Arduino IDE

6. ฟังก์ช่ัน Arduino ทใี่ ช้ในใบงาน

1. ฟังก์ช่ันกาหนดโหมดการทางานให้กับขาพอร์ตโดยสามารถกาหนดไดท้ ้งั ขาดิจิทลั โดยใส่
เพียงตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกที่ตอ้ งการให้ทางานในโหมดดิจิทลั แต่
การใส่ขาตอ้ งใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไมส่ ามารถใช้
งานในโหมดดิจิทลั ได้ รูปแบบของฟังกช์ นั่ เป็นดงั น้ี

pinMode(pin, mode);

pin: หมายเลขขาที่ตอ้ งการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP

ใบงานท่ี 4.16 การเขียนโปรแกรมใชง้ านคียแ์ พด  207

2. ฟังก์ชั่นส่งค่าลอจิกดิจิทลั ไปยงั ขาพอร์ต คา่ HIGH เป็นการส่งลอจิก 1 และค่า LOW เป็นการ
ส่งลอจิก 0 ออกไปยงั ขาพอร์ต ซ่ึงฟังกช์ นั่ น้ีจะทางานไดต้ อ้ งมีการใชฟ้ ังกช์ นั่ pinMode ก่อน

digitalWrite(pin, value);

pin: หมายเลขขาท่ีตอ้ งการเขียนลอจิกออกพอร์ต
value: HIGH or LOW

3. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ชั่นหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาท่ี
ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาท่ี
ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long

delay(ms);

ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)

4. ฟังก์ช่ันกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม เพื่อให้สามารถสื่อสารระหวา่ ง
อุปกรณ์ท้งั สองฝ่ังไดจ้ ะตอ้ งกาหนดอตั ราเร็วในการสื่อสารหรือเรียกว่าอตั ราบอด (Baud
rate) ค่าความเร็วน้ีมีหน่วยเป็ นบิตต่อวินาที (bps: bit per second) ค่าความเร็วน้ีไดแ้ ก่ 300,
600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, หรือ 115200

Serial.begin(speed);

speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม

5. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็นฟังกช์ นั่ ท่ีใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรืออาจ
เรียกวา่ ฟังก์ชน่ั พิมพข์ อ้ มูลออกทางพอร์ตเพื่อแสดงผลท่ีจอคอมพิวเตอร์ท่ีเช่ือมต่อกบั วงจร
Arduino โดยฟังกช์ นั่ น้ีเมื่อพิมพเ์ สร็จตวั เคอร์เซอร์จะรออยทู่ ี่ทา้ ยส่ิงที่พมิ พน์ ้นั ๆ

Serial.print(val) Serial.print(val, format)

6. ฟังก์ชั่นส่งข้อมูลออกพอร์ต คลา้ ยกบั ฟังก์ชน่ั Serial.print ต่างกนั ตรงที่เม่ือพิมพ์เสร็จตวั
เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้ันเมื่อส่ังพิมพค์ ร้ังถดั ไปขอ้ มูลที่ปรากฏจะอยู่ที่
บรรทดั ใหม่ แทนที่จะตอ่ ทา้ ยเหมือนกบั ฟังกช์ นั่ Serial.print

Serial.println(val) Serial.println(val, format)

208  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

ฟังก์ช่ันใช้งานของไลบราร่ี Keypad

การอ่านคา่ จากสวติ ช์ Keypad หากใชไ้ ลบราร่ีช่วยงานจะทาใหก้ ารเขียนโคด้ ง่ายข้ึนเป็ นอยา่ งมาก
ซ่ึงไลบราร่ีไม่ไดถ้ ูกเพ่ิมเขา้ มาในตวั โปรแกรม Arduino IDE ต้งั แต่แรกจาเป็ นตอ้ งติดต้งั เพ่ิมเติม โดยมี
การต้งั ค่าและฟังกช์ น่ั ใหใ้ ชง้ านดงั น้ี

1. การกาหนดขนาดของสวิตช์คีย์แพด ไลบรารี่เลือกใชว้ ิธีการกาหนดขนาดคียแ์ พดที่ใชง้ าน
ดว้ ยวธิ ีประกาศตวั แปร ยกตวั อยา่ งเช่นตอ้ งการใชค้ ียแ์ พดขนาด 3×4 การกาหนดขนาดเป็ น
ดงั น้ี

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns

2. การกาหนดค่าทไ่ี ด้เม่ือกดคีย์ตาแหน่งต่าง ๆ รูปแบบเป็นดงั น้ี

char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};

3. การกาหนดขาพอร์ตทเ่ี ช่ือมต่อกบั คีย์แพด รูปแบบเป็นดงั น้ี

byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad

4. การกาหนดค่าเริ่มใช้งาน รูปแบบเป็นดงั น้ี

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

5. ฟังก์ชั่นอ่านค่าการกดสวติ ช์คยี ์แพด เป็นฟังกช์ น่ั ท่ีใชอ้ า่ นคา่ การกดสวติ ช์คียแ์ พดโดยค่าที่ได้
จากฟังกช์ น่ั จะมีค่าเป็ น 0 เม่ือไม่มีการกดคียใ์ ด ๆ แต่ถา้ หากมีการกดคียใ์ นตาแหน่งใดจะให้
คา่ ไดจ้ ากการกาหนดคา่ ในตวั แปร char keys[ROWS][COLS] ขา้ งตน้ ท่ีไดก้ ล่าวมาแลว้

.getKey();

ใบงานท่ี 4.16 การเขียนโปรแกรมใชง้ านคียแ์ พด  209

7. วงจรทใี่ ช้ทดลอง

วงจรเพือ่ ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป
3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

กรณีท่ีใชว้ งจรท่ีสร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ท่ีลงบูตโหลดเดอร์เป็น Arduino
เรียบร้อยแลว้ ต่อวงจรดงั รูป

D1 VCC Peripheral circuit
1N5819
CPU circuit
R1
10k 7,20 ATMEGA328
VCC
SW1 123
1 RST AVCC 456
789
C1 * 0#
0.1uF

USB to UART (TTL Level) R2,R3 3 D12 18
1k 2 D11 17
DTR D10 16
RXD D1(TXD)
TXD D0(RXD) D9 15
+5V D8 14
GND D7 13
3V3 D6 12

X1 9 XTAL1 R4 LED1
16MHz 10 XTAL2 220

GND D5 11

C2,C3 8,22
22pF

รูปที่ 4.16-7 วงจรที่ใชไ้ อซี AVR ในการทดลอง

กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป

ARDUINO

D12 123
D11 456
D10 789
* 0#
D9
D8 R1 LED1
D7 220
D6

D5

GND

รูปที่ 4.16-8 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

210  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]F GH I J20 2025 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J
D12 1
การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลองD11
D10
รูปท่ี 4.16-9 การตอ่ ลงบอร์ดทดลองD9
การตอ่ วงจรเพื่อทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม ProteusD8 5
D7
รูปที่ 4.16-10 การต่อวงจรทดลองในโปรแกรมจาลองการทางานD6
D5
8. การเขยี นโค้ดโปรแกรมควบคุม D4
D3 10
การทดลองท่ี 1 เขียนโปรแกรมอ่านค่าขอ้ มูลจากหน่วยความจา EEPROM แอดเดรส 0-20 พร้อมท้งั เขียนD2
ขอ้ มูลเขา้ ไปใหม่โดยใชส้ วติ ช์ 2 ตวั ในการต้งั คา่ ขอ้ มูลแลว้ ใชส้ วติ ชต์ วั ท่ี 3 บนั ทึกขอ้ มูล
GND
RST

D0
D1 15

ABCDE ABCDE
D13
3V3
REF
A0
A1
A2
A3
A4
A5
A6
A7
5V
RST
GND
VIN

1
5
10
15

ใบงานท่ี 4.16 การเขียนโปรแกรมใชง้ านคียแ์ พด  211

ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดคา่ เริม่ ต้นต่าง ๆ

อ่านค่าจากคีย์แพด

เทจ็
มีการกดคยี ์?

จริง
แสดง ลคยี ์ท่ี ูกกด

สั่ง LED กระพริบ 1 คร้งั

แปลง งั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include <Keypad.h>
2 #define LED 5
3 const byte ROWS = 4; //four rows
4 const byte COLS = 3; //three columns
5 char keys[ROWS][COLS] = {
6 {'1','2','3'},
7 {'4','5','6'},
8 {'7','8','9'},
9 {'*','0','#'}
10 };
11 byte rowPins[ROWS] = {12,11,10,9}; //connect to the row pinouts of keypad
12 byte colPins[COLS] = {8,7,6}; //connect to the column pinouts of keypad
13 Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
14 void setup()
15 {
16 Serial.begin(9600);
17 pinMode(LED,OUTPUT);
18 }
19 void loop()
20 {
21 char key = keypad.getKey();
22 if (key)
23 {
24 Serial.println(key);
25 digitalWrite(LED,HIGH);delay(200);
26 digitalWrite(LED,LOW);
27 }
28 }

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบราร่ี Keypad.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 2 กาหนดช่ือ LED ใหแ้ ทน 5 (เป็นขา LED ตอ่ อยกู่ บั ขา D5 ของ Arduino)
- บรรทดั ที่ 3 กาหนดจานวนขาต่อคียแ์ พดดา้ น Row
- บรรทดั ที่ 4 กาหนดจานวนขาต่อคียแ์ พดดา้ น Colum
- บรรทดั ที่ 5 กาหนดค่าท่ีไดจ้ ากการกดคียแ์ พดในแต่ละตาแหน่ง

212  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

- บรรทดั ท่ี 11 กาหนดขาพอร์ตท่ีใชเ้ ชื่อมต่อกบั คียแ์ พดดา้ น Row
- บรรทดั ท่ี 12 กาหนดขาพอร์ตที่ใชเ้ ชื่อมต่อกบั คียแ์ พดดา้ น Colum
- บรรทดั ท่ี 13 ประกาศเร่ิมใชง้ านไลบรารี่คียแ์ พด
- บรรทดั ที่ 16 กาหนดความเร็วในการส่ือสารผา่ นพอร์ตอนุกรมท่ี 9600 bps
- บรรทดั ท่ี 17 กาหนดโหมดใหก้ บั ขาพอร์ตท่ีต่อกบั LED ทางานเป็นเอาทพ์ ทุ พอร์ต
- บรรทดั ที่ 21 อ่านคา่ การกดคียแ์ พด
- บรรทดั ที่ 22 ตรวจสอบถา้ มีการกดคียใ์ ด ๆ ท่ีคียแ์ พด
- บรรทดั ที่ 24 แสดงคา่ คียท์ ่ีถูดกดบนจอคอมพวิ เตอร์ผา่ นการส่ือสารทางพอร์ตอนุกรม
- บรรทดั ที่ 25 สั่งให้ LED ติดสวา่ งเป็นเวลา 200 มิลลิวนิ าที (1/5 วนิ าที)
- บรรทดั ท่ี 26 สงั่ ให้ LED ดบั

9. สรุป ลการปฏบิ ตั ิงาน

10. งานทมี่ อบหมาย

เขียนโปรแกรมรับคา่ จากคียแ์ พดใหเ้ กบ็ ลงในตวั แปรเป็นตวั เลข 2 หลกั (0-99) พร้อมท้งั แสดงผล
ค่าตวั แปรผา่ นทางจอคอมพิวเตอร์ โดยการกดสวติ ช์คร้ังแรกใหต้ วั เลขเป็ นค่าหลกั หน่วยและเมื่อกดคร้ังท่ี
สองตวั เลขแรกจะกลายเป็ นเลขหลกั สิบส่วนตวั เลขท่ีกดใหม่จะเป็ นตวั เลขหลกั หน่วยแทนเม่ือกดคร้ังท่ี
สามเลขหลกั สิบจะหายไปเลขหลกั หน่วยให้ขยบั เป็ นเลขหลกั สิบและให้ตวั เลขที่กดใหม่เป็ นหลกั หน่วย
แทนเวยี นเช่นน้ีไปเร่ือย ๆ วงจรที่ใชท้ ดลองเป็นดงั รูป

ARDUINO

123

456

D12 7 8 9
D11 * 0 #
D10
D9
D8
D7
D6

R1 LED1
220

D5

GND

รูปท่ี 4.16-11 วงจรทดลองสาหรับงานที่มอบหมาย

ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ท่ีเช่ือมตอ่ แบบ 4 บิต  213

ใบงานท่ี 4.17

การเขยี นโปรแกรมแสดงผลด้วยจอ LCD ทเี่ ช่ือมต่อแบบ 4 บติ

1. จุดประสงค์ทว่ั ไป

เพื่อใหส้ ามารถเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เช่ือมตอ่ แบบ 4 บิตได้

2. จุดประสงค์เชิงพฤตกิ รรม

1. บอกวธิ ีเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ท่ีเช่ือมตอ่ แบบ 4 บิตได้
2. บอกข้นั ตอนการต่อวงจรเพ่ือทดลองบนบอร์ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด

3. เครื่องมือและอปุ กรณ์

1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่
2. อุปกรณ์อิเล็กทรอนิกส์ประกอบดว้ ย
1 ตวั
2.1 ตวั ทา้ นทานปรับค่าไดข้ นาด 10k 1 ตวั
3. บอร์ด Arduino Nano 3.0 1 ตวั
4. LCD ชนิดตวั อกั ษรขนาด 16x2 1 เส้น
5. สายเชื่อมตอ่ USB (Mini USB) 1 ชุด
6. สายเช่ือมตอ่ วงจร 1 เคร่ือง
7. คอมพิวเตอร์

4. ลาดับข้นั การปฏบิ ตั งิ าน

1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเก่ียวขอ้ ง
2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรท่ีกาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุปผลการปฏิบตั ิงาน

214  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

5. ทฤษฎพี ืน้ ฐาน

อุปกรณ์แสดงผลของเคร่ืองใชไ้ ฟฟ้าหรือเครื่องใช้ที่เป็ นอิเล็กทรอนิกส์ในปัจจุบนั จะเลือกใช้
LCD ในการแสดงผลเป็ นส่วนใหญ่ เช่น เครื่องคิดเลข นาฬิกา เครื่องมือวดั แบบตวั เลขและอื่นๆ อีก
มากมาย LCD ยอ่ มาจากคาวา่ Liquid Crystal Display เป็ นอุปกรณ์แสดงผลท่ีกินไฟนอ้ ยมากเป็ นอุปกรณ์
ที่แสดงผลโดยไม่ไดอ้ าศยั การเปล่งแสงที่ตวั เองแต่ใชว้ ธิ ีการปิ ดบงั แสงไม่ใหส้ ะทอ้ นให้หรือไม่ให้ส่อง
ผา่ นแทน ซ่ึง LCD สามารถแบ่งได้ 3 แบบคือ

1. Segment display ชนิด LCD module
2. Character LCD module
3. Graphic LCD module
ส่วนประกอบหลกั ของจอผลึกเหลว (LCD) ภายในประกอบดว้ ยส่วนหลกั 3 ส่วนดว้ ยกนั คือ
1. ตวั แสดงผล (Display) เป็นตวั แสดงผลใหเ้ ราไดม้ องเห็น ในลกั ษณะการปิ ดและเปิ ดกบั แสง

ก็คือส่วนท่ีเป็นตวั กระจกบรรจุผลึกเหลว
2. ตวั ขบั (Driver) เป็ นตวั รับสัญญาณจากตวั ควบคุมมาขบั ให้ตวั แสดงผลแสดงขอ้ มูลตามที่

กาหนด
3. ตวั ควบคุม (Controller) เป็ นตวั รับขอ้ มูลจากอุปกรณ์ภายนอก มาควบคุมการทางานของตวั

LCD Module เบอร์ที่นิยมใชค้ ือ
- HD4478 ใชค้ วบคุม Character LCD module
- HD61830ใชค้ วบคุม Graphic LCD module

การต่อใช้งาน ใบงานน้ีเป็ นการทดลองการใช้งาน LCD ชนิดตวั อกั ษร ซ่ึงการต่อใช้งานตาม
คุณสมบตั ิของโมดูลสามารถเช่ือมต่อให้มีการส่ือสารข้อมูลได้ 2 แบบคือ แบบ 8 บิตและแบบ 4 บิต
สาหรับการทดลองเพื่อใชง้ าน LCD ดว้ ย Arduino ใชก้ ารเชื่อมต่อแบบ 4 บิตเน่ืองจากพอร์ตของ Arduino
มีจากดั สาหรับขนาดของ LCD ชนิดตวั อกั ษรมีให้เลือกใช้หลายขนาดผูใ้ ช้งานสามารถเลือกใชไ้ ดต้ าม
ตอ้ งการโดยมีขนาดใหเ้ ลือกตามตาราง

ตารางที่ 4.17-1 8 ตวั อกั ษร 16 ตวั อกั ษร 20 ตวั อกั ษร 40 ตวั อกั ษร
จานวนตวั อกั ษรต่อแถว 8×2 16×1 20×1 40×1
16×2 20×2 40×2
ขนาดของ LCD ท่ีมีใหใ้ ชง้ าน 16×4 20×4 40×4

ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เช่ือมตอ่ แบบ 4 บิต  215

6. ฟังก์ช่ัน Arduino ทใี่ ช้งานในใบงาน

1. ฟังก์ช่ันหน่วงเวลา หรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาท่ี
ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาที่
ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long

delay(ms);

ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)
2. ฟังก์ช่ันส่งค่าเวลาต้ังแต่บอร์ดเร่ิมทางาน ตวั เลขท่ีส่งกลบั มาจากฟังก์ชนั่ เป็ นเลขของเวลา

ต้งั แต่บอร์ดเริ่มทางานมีหน่วยเป็ นมิลลิวินาที ซ่ึงตวั เลขจะวนกลบั เป็ นศูนยอ์ ีกคร้ัง (Over
Flow) เมื่อเวลาผา่ นไปประมาณ 50 วนั หลงั จากบอร์ดเริ่มทางาน รูปฟังชน่ั เป็นดงั น้ี

millis();

ตวั อย่าง
unsigned long time=millis();

หมายถึง เกบ็ ค่าเวลาต้งั แตบ่ อร์ดเร่ิมทางานโดยเก็บค่าลงในตวั แปร time

ฟังก์ชั่นใช้งานของไลบรารี่ LCD

การใชง้ านแสดงผลท่ี LCD ชนิดตวั อกั ษรจาเป็นตอ้ งใชไ้ ลบราร่ีช่วยงาน ซ่ึงไลบราร่ีถูกเพมิ่ เขา้ มา

ในตวั โปรแกรม Arduino IDE แลว้ ไมต่ อ้ งติดต้งั เพิม่ เติม

ไลบรารี่ แหล่งดาวน์โหลด

LiquidCrystal.h ไม่ตอ้ งดาวนโ์ หลดเนื่องจากมาพร้อมกบั Arduino IDE

มีฟังกช์ นั่ ใหใ้ ชง้ านดงั น้ี

1. ฟังก์ช่ันกาหนดขาเชื่อมต่อ ใชใ้ นการระบุขาที่ใชเ้ ชื่อมต่อให้ตวั โปรแกรมรับรู้ การเช่ือมต่อ

จะใชก้ ารสื่อสารแบบ 4 บิตฟังชนั่ น้ีเป็นการกาหนดคา่ ในส่วนหวั โปรแกรม รูปแบบเป็นดงั น้ี

LiquidCrystal lcd_name(RS, EN, D4, D5, D6, D7);

ตวั อย่าง
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

หมายถึง ต่อไปในโปรแกรมจะใชช้ ื่อ lcd ในการเรียกใชง้ านโดยมีการเชื่อมต่อสายสัญญาณ ดงั
ในวงเล็บโดยตวั เลขแรกเป็ นขา RS ไล่ไปจนตวั เลขสุดทา้ ยเป็ นขา D7 ซ่ึงเป็ นช่ือท้งั หมดเป็ นชื่อ
ขาของ LCD

216  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

2. ฟังก์ช่ันกาหนดขนาดของ LCD ใชก้ าหนดขนาดของ LCD ท่ีกาลงั เชื่อมตอ่ รูปแบบเป็นดงั น้ี

.begin(cols, rows);

ตัวอย่าง cols: ตวั เลขจานวนตวั อกั ษรต่อหน่ึงบรรทดั
rows: ตวั เลขจานวนบรรทดั ของจอ LCD
lcd.begin(16, 2); หมายถึง ใช้ LCD ขนาด 16 ตวั อกั ษร 2 บรรทดั

3. ฟังก์ชั่นแสดงผลออกจอ LCD ใชแ้ สดงขอ้ ความ ตวั เลข หรือค่าในตวั แปร รูปแบบเป็นดงั น้ี

.print(data);

.print(data, BASE);

data: คือขอ้ มูลที่ตอ้ งการแสดงผลซ่ึงอาจเป็ นขอ้ ความ ตวั เลข หรือค่าในตวั แปร
โดยถา้ เป็นขอ้ ความจะตอ้ งใส่ “-” คร่อมขอ้ ความน้นั ๆ

BASE: รูปแบบการแสดงผลของคา่ ตวั เลข (เลขฐาน) ไดแ้ ก่ BIN,DEC,OCT,HEX

4. ฟังก์ชั่นล้างหน้าจอ ใช้ลา้ งขอ้ มูลบนหน้าจอแลว้ ให้เคอร์เซอร์กลบั ไปรอท่ีตาแหน่งมุมบน
ซา้ ยของจอ รูปแบบเป็นดงั น้ี

.clear();

5. ฟังก์ชั่นกาหนดตาแหน่งเคอร์เซอร์ก่อนการพิมพ์ ใชก้ าหนดพิกดั ให้เคอร์เซอร์ไปรอก่อน
การแสดงผลในฟังกช์ น่ั lcd.print() รูปแบบเป็นดงั น้ี

.setCursor(col, row);

col: ตาแหน่งของคอลมั นท์ ่ีเคอร์เซอร์ตอ้ งไปรอ (คอลมั น์แรกคือ 0)
row: ตาแหน่งของบรรทดั ที่เคอร์เซอร์ตอ้ งไปรอ (บรรทดั แรกคือ 0)
ตัวอย่าง lcd.setCursor (6, 1); หมายถงึ ใหเ้ คอร์เซอร์ไปรอท่ีตาแหน่งคอลมั น์ 6 บรรทดั 1

7. วงจรทใ่ี ช้ทดลอง

วงจรเพื่อใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีสร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูป
3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

ใบงานท่ี 4.17 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เช่ือมตอ่ แบบ 4 บิต  217

กรณีท่ีใชว้ งจรท่ีสร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ท่ีลงบูตโหลดเดอร์เป็น Arduino
เรียบร้อยแลว้ ต่อวงจรดงั รูป

D1 VCC Peripheral circuit
1N5819
CPU circuit

R1 7,20 ATMEGA328
10k
VCC
SW1 1 RST AVCC

C1 D2 4 11 D4
0.1uF D3 5 12 D5
D4 6 13 D6
D5 11 14 D7

USB to UART (TTL Level) R2,R3 3 E R/W RS Vo VCC GND
1k 2 6 54321
DTR
RXD D1(TXD) D6 12 VCC
TXD D0(RXD) D7 13 10k
+5V
GND
3V3

X1 9 XTAL1
16MHz 10 XTAL2

C2,C3 GND
22pF
8,22

รูปท่ี 4.17-1 วงจรที่ใชไ้ อซี AVR ในการทดลอง
กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป

VCC ARDUINO
5V
D2 11 D4
D3 12 D5 VCC
D4 13 D6 10k
D5 14 D7

E R/W RS Vo VCC GND
654321
D6
D7

GND

รูปท่ี 4.17-2 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง
การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง

F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J
D12 1
D11
D10
D9
D8 5
D7
D6
D5
D4
D3 10
D2

GND
RST

D0
D1 15

ABCDE ABCDE
D13
3V3
REF
A0
A1
A2
A3
A4
A5
A6
A7
5V
RST
GND
VIN

1
5
10
15

รูปท่ี 4.17-3 การต่อลงบอร์ดทดลอง

218  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

การตอ่ วงจรเพ่อื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

รูปท่ี 4.17-4 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน

8. การเขยี นโค้ดโปรแกรมควบคุม

การทดลองที่ 1 เขียนโปรแกรมแสดงขอ้ ความ “hello, world!”
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดค่าเริม่ ต้นต่าง

แสดงผล

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include <LiquidCrystal.h> // set up the LCD's connection pins
2 /* The circuit: // set LCD size
3 * LCD RS pin to digital pin 7
4 * LCD E pin to digital pin 6
5 * LCD D4 pin to digital pin 2
6 * LCD D5 pin to digital pin 3
7 * LCD D6 pin to digital pin 4
8 * LCD D7 pin to digital pin 5
9 * LCD R/W pin to ground
10 */
11 LiquidCrystal lcd(7,6,2,3,4,5);
12 void setup()
13 {
14 lcd.begin(16, 2);
15 lcd.print("hello, world!");
16 }
17 void loop() {}

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบรารี่ LiquidCrystal.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 2-10 เป็นส่วนอธิบายวา่ ขาใดของ LCD เชื่อมต่อกบั ขาใดของ Arduino

ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ท่ีเช่ือมตอ่ แบบ 4 บิต  219

- บรรทดั ที่ 11 กาหนดจานวนขาพอร์ตท่ีใชเ้ ชื่อมต่อกบั LCD
- บรรทดั ที่ 14 ประกาศเร่ิมใชง้ านไลบรารี่ LCD พร้อมกาหนดขนาดของ LCD
- บรรทดั ท่ี 15 แสดงขอ้ ความบนหนา้ จอ LCD
ทดลองการทางาน

1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปลี่ยนรูปแบบการแสดงผล

การทดลองที่ 2 เขียนโปรแกรมแสดงเวลาที่บอร์ดเริ่มทางาน โดยแสดงเวลาหน่วยเป็นวนิ าทีแสดงผลดว้ ย
จอ LCD
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดค่าเริม่ ต้นต่าง

อ่านค่าเวลาจากบอร์ด

แสดงผล

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include <LiquidCrystal.h> // set up the LCD's connection pins
2 /* The circuit: // set LCD size
3 * LCD RS pin to digital pin 7
4 * LCD E pin to digital pin 6
5 * LCD D4 pin to digital pin 2
6 * LCD D5 pin to digital pin 3
7 * LCD D6 pin to digital pin 4
8 * LCD D7 pin to digital pin 5
9 * LCD R/W pin to ground
10 */
11 LiquidCrystal lcd(7,6,2,3,4,5);
12 void setup()
13 {
14 lcd.begin(16, 2);
15 lcd.print("Running time");
16 lcd.setCursor(13,1);
17 lcd.print("sec");
18 }
19 void loop()
20 {
21 lcd.setCursor(8,1);
22 lcd.print(millis()/1000);
23 delay(1000);
24 }

220  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบรารี่ LiquidCrystal.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ท่ี 2-10 เป็นส่วนอธิบายวา่ ขาใดของ LCD เช่ือมตอ่ กบั ขาใดของ Arduino
- บรรทดั ที่ 11 กาหนดจานวนขาพอร์ตท่ีใชเ้ ชื่อมต่อกบั LCD
- บรรทดั ที่ 14 ประกาศเริ่มใชง้ านไลบรารี่ LCD พร้อมกาหนดขนาดของ LCD
- บรรทดั ท่ี 15 แสดงขอ้ ความบนหนา้ จอ LCD "Running time"
- บรรทดั ที่ 16 ขยบั เคอร์เซอร์ไปยงั ตาแหน่งท่ีระบุ
- บรรทดั ที่ 22 แสดงขอ้ มูลท่ีเกิดจากการคานวนค่าเวลาบนหนา้ จอ LCD

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปลี่ยนแปลงรูปแบบการแสดงผล

9. สรุปผลการปฏบิ ตั ิงาน

10. งานทม่ี อบหมาย

1. เขียนโปรแกรมแสดงผลใหค้ ลา้ ยลกั ษณะไฟวงิ่ โดยใช้ * แทนไฟ กาหนดรูปแบบของการวงิ่
ตามความต้องการแสดงผลในบรรทดั ล่าง สาหรับบรรทดั บนให้แสดงข้อความค้างไว้
ขอ้ ความวา่ “Light Running” วงจรที่ใชท้ ดลองเป็นดงั รูป

VCC ARDUINO
5V D2 11 D4
D3 12 D5
D4 13 D6
D5 14 D7
E R/W RS Vo VCC GND
654321
D6 VCC
D7
10k

GND

รูปท่ี 4.17-5 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

ใบงานท่ี 4.18 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เช่ือมตอ่ แบบ I2C  221

ใบงานที่ 4.18

การเขยี นโปรแกรมแสดงผลด้วยจอ LCD ทเ่ี ชื่อมต่อแบบ I2C

1. จุดประสงค์ทวั่ ไป

เพ่อื ใหส้ ามารถเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ท่ีเช่ือมต่อแบบ I2C ได้

2. จุดประสงค์เชิงพฤติกรรม

1. บอกวธิ ีเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เชื่อมต่อแบบ I2C ได้
2. บอกข้นั ตอนการต่อวงจรเพ่ือทดลองบนบอร์ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด

3. เครื่องมือและอปุ กรณ์

1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่
2. บอร์ด Arduino Nano 3.0 1 ตวั
3. LCD ชนิดตวั อกั ษรขนาด 16x2 1 ตวั
4. โมดูลส่ือสาร I2C สาหรับ LCD 1 ตวั
5. สายเช่ือมต่อ USB (Mini USB) 1 เส้น
6. สายเช่ือมตอ่ วงจร 1 ชุด
7. คอมพิวเตอร์ 1 เคร่ือง

4. ลาดบั ข้นั การปฏบิ ตั งิ าน

1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเกี่ยวขอ้ ง
2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุปผลการปฏิบตั ิงาน

222  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

5. ทฤษฎพี ืน้ ฐาน

I2C Bus ย่อมาจาก Inter Integrate Circuit Bus (IIC) (ออกเสียงว่า ไอ-แสคว-ซี-บสั ) เป็ นการ
สื่อสารอนุกรม แบบซิงโครนสั (Synchronous) เพื่อใช้ ติดต่อส่ือสาร ระหวา่ ง ไมโครคอนโทรลเลอร์กบั
อุปกรณ์ต่อพ่วงภายนอกใชส้ ายสัญญาณสื่อสาร 2 เส้นคือ Serial data (SDA) และ Serial clock (SCL) ซ่ึง
สามารถเช่ือมตอ่ อุปกรณ์จานวนหลาย ๆ ตวั เขา้ ดว้ ยกนั โดยใชข้ าพอร์ตเพยี ง 2 ขาเท่าน้นั

VDD

Rpullup

SCL
SDA

Master Slave #1 Slave #2 Slave #n

รูปท่ี 4.18-1 ผงั การต่อเชื่อมระหวา่ งไมโครคอนโทรลเลอร์กบั อุปกรณ์ I2C

วิธีการท่ีจะเลือกสื่อสารกบั อุปกรณ์ต่อพ่วงใชก้ ารควบคุมที่ไบตข์ องรหสั ควบคุม (Control byte)
ประกอบดว้ ยรหสั ประจาตวั อุปกรณ์ (Device ID) เป็ นรหสั ท่ีเปลี่ยนแปลงไม่ได้ และรหสั ที่เป็ นแอดเดรส
ของตัวอุปกรณ์ซ่ึงผู้ใช้งานสามารถกาหนดได้โดยมีแอดเดรสจานวน 3 ขาคือ A0, A1, A2 นั่นก็
หมายความว่าหากต่อพ่วงอุปกรณ์ I2C ท่ีเป็ นชนิดเดียวกนั มีรหัสประจาตวั เดียวกนั สามารถกาหนด
แอดเดรสตา่ งกนั ได้ 8 ตวั ซ่ึงหมายถึงสามารถต่อพว่ งอุปกรณ์ชนิดเดียวกนั ได้ 8 ตวั

ID ID ID ID A2 A1 A0 R/W

Device ID Control byte Address Mode

รูปท่ี 4.18-2 คอนโทรลไบตข์ องอุปกรณ์ I2C

การใชง้ านจอแสดงผล LCD ท่ีใชก้ ารสื่อสารแบบ I2C ตวั อุปกรณ์จริงเป็ นการใช้ LCD ธรรมดา
เช่นเดียวกบั ใบงานท่ีผา่ นมาเพียงแต่เพม่ิ โมดูลส่ือสารแบบ I2C เสียบเพ่มิ เขา้ ที่ตวั จอ หากไมไ่ ดแ้ กไ้ ขใด ๆ
ที่ตวั โมดูลขาแอดเดรสของโมดูลจะไม่ได้ถูกชอร์ตลงกราวด์ดงั น้ันขาแอดเดรสท้งั 3 ขาจะเป็ นลอจิก
HIGH ท้งั หมดดงั รูป

รูปท่ี 4.18-3 โมดูลส่ือสารแบบ I2C สาหรับขบั จอ LCD

ใบงานที่ 4.18 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เช่ือมตอ่ แบบ I2C  223

รูปท่ี 4.18-4 โมดูลส่ือสารแบบ I2C เมื่อเช่ือต่อกบั จอ LCD
แอดแดรสของโมดูลสามารถแกไ้ ขเป็ นตาแหน่งอ่ืนไดโ้ ดยการบดั กรีเช่ือมต่อให้ถึงกนั (Low)
หรือปลดลอย (High) เพื่อกาหนดแอดเดรส (A0 A1 A2) ท่ีตวั โมดูลโดยสามารถกาหนดแอดเดรสเป็ น
ตาแหน่งอ่ืนได้ หมายเลขของแอดเดรส (รวมรหัสประจาตวั ) ของโมดูลท่ีใช้ชิพเบอร์ต่างกันจะได้
แอดเดรสท่ีต่างกนั ดงั น้นั หากโมดูลท่ีใช้ชิพเบอร์ PCF8574 แอดเดรสจะเป็ น 27H และเม่ือใช้ชิพเบอร์
PCF8574A แอดเดรสจะเป็น 3FH (กรณีท่ีไม่ไดบ้ ดั กรีแกไ้ ขแอดเดรส)

รูปที่ 4.18-5 แอดเดรสของโมดูลส่ือสารแบบ I2C สาหรับจอ LCD ท่ีสามารถแกไ้ ขได้

การเขียนโค้ดโปรแกรมเพ่ือใช้งานการแสดงผลจอ LCD ท่ีสื่อสารด้วยโมดูลส่ือสาร I2C

จาเป็นตอ้ งใชไ้ ลบรารี่ช่วยงานพร้อม ๆ กนั ถึงสองตวั ดงั น้ี

- Wire.h มีมาพร้อมกบั โปรแกรม Arduino IDE

- LiquidCrystal_I2C.h ตอ้ งดาวน์โหลดเพ่ิมเติมเนื่องจากโปรแกรม Arduino IDE ไม่ได้มีการ

ติดต้งั มาใหต้ ้งั แตเ่ ริ่มตน้

ไลบรารี่ แหล่งดาวน์โหลด

Wire.h ไมต่ อ้ งดาวน์โหลดเนื่องจากมาพร้อมกบั Arduino IDE

LiquidCrystal_I2C.h https://github.com/marcoschwartz/LiquidCrystal_I2C

224  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

การติดต้งั ไลบราร่ีมีข้นั ตอนการดาเนินการเพอ่ื นาไลบรารี่มาใชง้ านดงั น้ี
1. ดาวน์โหลดไลบราร่ีซ่ึงเป็นไฟล์ Zip ดงั รูป

รูปที่ 4.18-6 การดาวน์โหลดไลบรารี่ที่นามาใชง้ าน
2. ทาการเพ่มิ ไลบรารี่ลงในโปรแกรม Arduino IDE โดยการเพิม่ จากไฟล์ zip แลว้ ทาการหาไฟล์

zip ท่ีไดจ้ ากการดาวน์โหลดในขอ้ 1

รูปท่ี 4.18-7 การเพิม่ ไลบราร่ีลงในโปรแกรม Arduino IDE

6. ฟังก์ช่ัน Arduino ทใ่ี ช้งานในใบงาน

1. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาท่ี
ตอ้ งการหยุดคา้ งโดยตวั เลขท่ีใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาท่ี
ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long

delay(ms);

ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)
2. ฟังก์ช่ันส่งค่าเวลาต้ังแต่บอร์ดเริ่มทางาน ตวั เลขที่ส่งกลบั มาจากฟังก์ชน่ั เป็ นเลขของเวลา

ต้งั แต่บอร์ดเริ่มทางานมีหน่วยเป็ นมิลลิวินาที ซ่ึงตวั เลขจะวนกลบั เป็ นศูนยอ์ ีกคร้ัง (Over
Flow) เม่ือเวลาผา่ นไปประมาณ 50 วนั หลงั จากบอร์ดเริ่มทางาน รูปฟังชน่ั เป็นดงั น้ี

millis();

ใบงานท่ี 4.18 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เชื่อมตอ่ แบบ I2C  225

ฟังก์ช่ันใช้งานของไลบรารี่ LCD I2C

การใชง้ านแสดงผลท่ี LCD ที่สื่อสารดว้ ยโมดูล I2C มีฟังก์ชน่ั การใชง้ านคลา้ ย ๆ กบั การใช้ LCD
ธรรมดาเช่นเดียวกบั ใบงานที่ผา่ นมาไดแ้ ก่

1. ฟังก์ชั่นกาหนดแอดเดรสและขนาดของ LCD ใชใ้ นการระบุแอดเดรสของโมดูลสื่อสาร I2C
ท่ีเช่ือมตอ่ กบั LCD และขนาดของจอ LCD ที่ใชง้ าน รูปแบบเป็นดงั น้ี

LiquidCrystal_I2C lcd_name(address,col,row);

address: แอดเดรสของโมดูล I2C
cols: จานวนตวั อกั ษรตอ่ หน่ึงบรรทดั ของจอ LCD
rows: จานวนบรรทดั ของจอ LCD
ตวั อย่าง LiquidCrystal_I2C lcd(0x3F,16,2);
หมายถงึ ต่อไปในโปรแกรมจะใช้ชื่อ lcd ในการเรียกใช้งานโดยโมดูลเชื่อมต่อมี
แอดเดรสเป็น 3FH และเป็นจอ LCD ขนาด 16 ตวั อกั ษร 2 บรรทดั

2. ฟังก์ชั่นกาหนดขนาดของ LCD ใชก้ าหนดขนาดของ LCD ที่กาลงั เชื่อมต่อ รูปแบบเป็นดงั น้ี

.begin(cols, rows)

ตัวอย่าง cols: ตวั เลขจานวนตวั อกั ษรต่อหน่ึงบรรทดั
หมายถงึ rows: ตวั เลขจานวนบรรทดั ของจอ LCD
lcd.begin(16, 2);
ใช้ LCD ขนาด 16 ตวั อกั ษร 2 บรรทดั

3. ฟังก์ช่ันแสดงผลออกจอ LCD ใชแ้ สดงขอ้ ความ ตวั เลข หรือค่าในตวั แปร รูปแบบเป็นดงั น้ี

.print(data);

.print(data, BASE);

data: คือขอ้ มูลท่ีตอ้ งการแสดงผลซ่ึงอาจเป็ นขอ้ ความ ตวั เลข หรือคา่ ในตวั แปร
โดยถา้ เป็นขอ้ ความจะตอ้ งใส่ “-” คร่อมขอ้ ความน้นั ๆ

BASE: รูปแบบการแสดงผลของค่าตวั เลข (เลขฐาน) ไดแ้ ก่ BIN,DEC,OCT,HEX

226  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

4. ฟังก์ช่ันล้างหน้าจอ ใชล้ า้ งหนา้ จอแลว้ ใหเ้ คอร์เซอร์กลบั ไปรอท่ีตาแหน่งมุมบนซา้ ยของจอ
รูปแบบเป็นดงั น้ี

.clear();

5. ฟังก์ช่ันกาหนดตาแหน่งเคอร์เซอร์ก่อนการพิมพ์ ใช้กาหนดพิกดั ให้เคอร์เซอร์ไปรอก่อน
การแสดงผลในฟังกช์ น่ั lcd.print() รูปแบบเป็นดงั น้ี

.setCursor(col, row);

col: ตาแหน่งของคอลมั นท์ ่ีเคอร์เซอร์ตอ้ งไปรอ (คอลมั น์แรกคือ 0)
row: ตาแหน่งของบรรทดั ท่ีเคอร์เซอร์ตอ้ งไปรอ (บรรทดั แรกคือ 0)
ตัวอย่าง lcd.setCursor (6, 1);
หมายถงึ ใหเ้ คอร์เซอร์ไปรอท่ีตาแหน่งคอลมั น์ 6 บรรทดั 1

7. วงจรทใ่ี ช้ทดลอง

วงจรเพือ่ ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป
3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

กรณีท่ีใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ท่ีลงบูตโหลดเดอร์เป็น Arduino
เรียบร้อยแลว้ ต่อวงจรดงั รูป

D1 VCC Peripheral circuit
1N5819
CPU circuit VCC VCC
R1 SDA
10k 7,20 ATMEGA328 SCL
VCC GND
SW1
1 RST AVCC

C1
0.1uF

A4(SDA) 27
A5(SCL) 28

USB to UART (TTL Level) R2,R3 3
1k 2
DTR
RXD D1(TXD)
TXD D0(RXD)
+5V
GND
3V3

X1 9 XTAL1
16MHz 10 XTAL2

C2,C3 GND
22pF
8,22

รูปที่ 4.18-8 วงจรที่ใชไ้ อซี AVR ในการทดลอง

รูปที่ 4.18-11 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน ABCDE GNDF GH I JA4(SDA) ARDUINO กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป
1 D13 D12 1 A5(SCL) VCC VCC
รูปที่ 4.18-9 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลองD11
3V3 การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลองD10
REF D9
A0 GNDD8 5
5 A1 VCCD7
A2 SDAD6
A3 SCLD5
A4 D4
A5รูปที่ 4.18-10 การต่อลงบอร์ดทดลองD3 10
10 A6การต่อวงจรเพ่ือทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม ProteusD2
A7
5V GND
RST RST
GND
15 VIN D0
D1 15

20 20 ใบงานท่ี 4.18 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เชื่อมตอ่ แบบ I2C  227

25 25

30 30 GND
VCC
SDA
SCL

35 35

40 40

45 45

50 50

55 55

60 60

ABCDE F GH I J

228  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

8. การเขยี นโค้ดโปรแกรมควบคุม

การทดลองที่ 1 เขียนโปรแกรมแสดงขอ้ ความ “Hello, world!” ในบรรทดั บนและ “LCD i2c Lab” บรรทดั ล่าง
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดค่าเริม่ ต้นต่าง

แสดงผล

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include <Wire.h>
2 #include <LiquidCrystal_I2C.h>
3 LiquidCrystal_I2C lcd(0x3F,16,2); //0x27 for PCF8574 and 0x3F for PCF8574A
4 void setup()
5{
6 lcd.init();
7 lcd.backlight();
8 lcd.setCursor(2,0);
9 lcd.print("Hello, world!");
10 lcd.setCursor(4,1);
11 lcd.print("LCD i2c Lab");
12 }
13 void loop()
14 {
15 }

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบรารี่ Wire.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 2 รวมไฟลไ์ ลบราร่ี LiquidCrystal_I2C.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ท่ี 3 กาหนดแอดเดรสของโมดูล I2C และขนาดของ LCD ท่ีใชง้ าน
- บรรทดั ที่ 6 ประกาศเริ่มใชง้ านไลบราร่ี
- บรรทดั ที่ 7 สั่งเปิ ดไฟแบลค็ ไลต์
- บรรทดั ที่ 8 ขยบั เคอร์เซอร์ไปยงั ตาแหน่งที่ระบุ (Colum ที่ 2, Row ที่ 0)
- บรรทดั ท่ี 9 แสดงขอ้ ความบนหนา้ จอ LCD "Hello, world!"

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปลี่ยนรูปแบบการแสดงผล

ใบงานท่ี 4.18 การเขียนโปรแกรมแสดงผลดว้ ยจอ LCD ที่เช่ือมตอ่ แบบ I2C  229

การทดลองท่ี 2 เขียนโปรแกรมแสดงเวลาท่ีบอร์ดเริ่มทางาน โดยแสดงเวลาหน่วยเป็นวนิ าทีแสดงผลดว้ ย
จอ LCD
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดคา่ เริม่ ต้นต่าง

อ่านคา่ เวลาจากบอร์ด

แสดงผล

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include <Wire.h>
2 #include <LiquidCrystal_I2C.h>
3 LiquidCrystal_I2C lcd(0x3F,16,2); //0x27 for PCF8574 and 0x3F for PCF8574A
4 void setup()
5{
6 lcd.init();
7 lcd.backlight();
8 lcd.setCursor(2,0);
9 lcd.print("Running time");
10 lcd.setCursor(13,1);
11 lcd.print("sec");
12 }
13 void loop()
14 {
15 lcd.setCursor(8,1);
16 lcd.print(millis()/1000);
17 delay(1000);
18 }

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบรารี่ Wire.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 2 รวมไฟลไ์ ลบรารี่ LiquidCrystal_I2C.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 3 กาหนดแอดเดรสของโมดูล I2C และขนาดของ LCD ที่ใชง้ าน
- บรรทดั ท่ี 6 ประกาศเร่ิมใชง้ านไลบรารี่
- บรรทดั ท่ี 7 สงั่ เปิ ดไฟแบลค็ ไลต์
- บรรทดั ท่ี 8 ขยบั เคอร์เซอร์ไปยงั ตาแหน่งที่ระบุ
- บรรทดั ที่ 9 แสดงขอ้ ความบนหนา้ จอ LCD "Hello, world!"
- บรรทดั ที่ 15 ขยบั เคอร์เซอร์ไปยงั ตาแหน่งที่ระบุ
- บรรทดั ที่ 16 แสดงขอ้ มูลท่ีเกิดจากการคานวนคา่ เวลาบนหนา้ จอ LCD

230  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปลี่ยนแปลงรูปแบบการแสดงผล
4. เปลี่ยนเทียบความแตกตา่ งของการเขียนโคด้ ระหวา่ งใช้ LCD ธรรมดากบั แบบ I2C

9. สรุปผลการปฏบิ ตั งิ าน

10. งานทม่ี อบหมาย

1. เขียนโปรแกรมรับค่าจากคียแ์ พด โดยมีเงื่อนไขคือเมื่อมีการกดคียต์ วั เลขจะมีตวั เลขปรากฏที่

LCD คล้ายการกดเคร่ืองคิดเลขกล่าวคือเมื่อมีการกดตวั เลขคร้ังที่สองเป็ นต้นไปตวั เลข

หลงั สุดจะดนั ตวั เลขหนา้ สุดไปทางซา้ ยเร่ือย ๆ และเม่ือกดคีย์ * จะลา้ งขอ้ มูลหนา้ จอท้งั หมด

วงจรท่ีใชท้ ดลองเป็นดงั รูป

VCC ARDUINO VCC

A4(SDA) GND
VCC
SDA
SCL

A5(SCL)

D12
D11 1 2 3
D10

D9 4 5 6
D8 7 8 9
D7
D6 * 0 #

GND

รูปที่ 4.18-12 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  231

ใบงานท่ี 4.19

การเขยี นโปรแกรมแสดงผลด้วยโมดูลตวั เลข MAX7219

1. จุดประสงค์ทวั่ ไป

เพ่อื ใหส้ ามารถเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219 ได้

2. จุดประสงค์เชิงพฤตกิ รรม

1. บอกวธิ ีเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219 ได้
2. บอกข้นั ตอนการตอ่ วงจรเพ่ือทดลองบนบอร์ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด

3. เครื่องมือและอปุ กรณ์

1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่
2. บอร์ด Arduino Nano 3.0 1 ตวั
3. โมดูลตวั เลข MAX7219 1 ตวั
4. สายเช่ือมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพวิ เตอร์ 1 เคร่ือง

4. ลาดบั ข้นั การปฏบิ ตั ิงาน

1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานที่เก่ียวขอ้ ง
2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรท่ีกาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุปผลการปฏิบตั ิงาน

232  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

5. ทฤษฎพี ืน้ ฐาน

MAX7219 เป็ นไอซีที่ถูกออกแบบมาสาหรับการแสดงตวั เลขดว้ ย 7-Segment ไดม้ ากกว่าหน่ึง
หลกั และยงั สามารถนาไปประยกุ ตใ์ ชก้ บั LED (Dot) matrix ไดอ้ ีกดว้ ย ใบงานน้ีเป็นการใชง้ านเฉพาะการ
แสดงผลท่ีเป็ นตวั เลขเท่าน้นั ซ่ึงปัจจุบนั มีผูผ้ ลิตเป็ นโมดูลสาเร็จรูปจาหน่ายมีจานวนตวั เลขในโมดูล
จานวนท้งั สิ้น 8 ตวั ตอ่ หน่ึงโมดูล ขอ้ ดีของการแสดงผลที่เป็นตวั เลขดว้ ยโมดลู MAX7219 คือสามารถต่อ
พ่วงโมดูลไดอ้ ีกหลายโมดูลจึงทาให้สามารถแสดงตวั เลขไดจ้ านวนมากโดยใชส้ ายสัญญาณจานวนนอ้ ย
เพยี ง 3 เส้นคือ DIN, CS และ CLK

รูปที่ 4.19-1 โมดูลแสดงผลตวั เลข 8 หลกั ดว้ ยไอซี MAX7219

รูปที่ 4.19-2 การตอ่ พว่ งโมดูลแสดงผลหลายหลกั (1)

การเขียนโคด้ โปรแกรมเพื่อใช้งานการแสดงผลโมดูลตวั เลข 8 หลักด้วยไอซี MAX7219 มี
ไลบรารี่ใหเ้ ลือกช่วยงานได้ 2 ตวั ซ่ึงแตล่ ะตวั ก็มีขอ้ ดีขอ้ ดอ้ ยแตกต่างกนั ไปไลบรารี่ดงั กล่าวคือ

- LedControl.h
- HCMAX7219.h

LedControl.h

เป็ นไลบราร่ีสาหรับแสดงผลโมดูลท่ีใชไ้ อซี MAX7219 ไลบราร่ีน้ีไม่มีมาพร้อมโปรแกรม Aduino

IDE ดงั น้นั การใชง้ านจึงตอ้ งมีการติดต้งั เพม่ิ เติ่มเขา้ ไปในโปรแกรม ซ่ึงสามารถสามารถดาวน์โหลดไดท้ ่ี

ไลบราร่ี แหล่งดาวน์โหลด

LedControl.h https://github.com/wayoda/LedControl/releases

(1)http://embedded-lab.com/blog/introducing-a-new-serial-spi-8-digit-seven-segment-led-display-module-using-max7219/

ใบงานท่ี 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  233

การติดต้ังไลบรารี่ มีข้นั ตอนการดาเนินการเพื่อนาไลบรารี่มาใชง้ านดงั น้ี
1. ดาวน์โหลดไลบราร่ีซ่ึงเป็นไฟล์ Zip ดงั รูป

รูปท่ี 4.19-3 การดาวน์โหลดไลบราร่ีท่ีนามาใชง้ าน
2. ทาการเพ่ิมไลบรารี่ลงในโปรแกรม Arduino IDE โดยการเพิ่มจากไฟล์ zip แลว้ ทาการหาไฟล์

zip ที่ไดจ้ ากการดาวน์โหลดในขอ้ 1

รูปที่ 4.19-4 การเพ่ิมไลบรารี่ลงในโปรแกรม Arduino IDE

ข้อดีของไลบรารี่ LedControl.h
1. เลือกใชข้ าเช่ือมตอ่ ใดกไ็ ด้
2. สามารถสร้างรูปแบบการติดของเซกเมนตไ์ ดจ้ ากฟังกชน่ั ท่ีมีใหม้ า

ข้อเสียของไลบรารี่ LedControl.h
1. ไม่สามารถสั่งแสดงผลท่ีเป็ นตวั เลขหรือค่าจากตวั แปรที่มีตวั เลขจานวนหลายหลกั ได้ (ตอ้ งเขียน
ฟังกช์ น่ั แยกหลกั เอาเอง)
2. ไม่สามารถสัง่ แสดงขอ้ ความที่เป็นประโยคได้ (ตอ้ งเขียนฟังกช์ นั่ แยกเอง)

HCMAX7219.h

เป็ นไลบรารี่สาหรับแสดงผลโมดูลท่ีใชไ้ อซี MAX7219 ไลบรารี่น้ีจะตอ้ งใชไ้ ลบราร่ีเพ่ิมอีก 1 ตวั คือ

SPI.h ซ่ึงมีมาพร้อมโปรแกรม Aduino IDE ไม่ตอ้ งติดต้งั เพ่ิมเติม แต่จะติดต้งั เพิ่มเติมเฉพาะไลบราร่ี

HCMAX7219.h ซ่ึงสามารถดาวน์โหลดไดท้ ี่

ไลบรารี่ แหล่งดาวน์โหลด

HCMAX7219.h https://github.com/HobbyComponents/HCMAX7219

234  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

การตดิ ต้งั ไลบราร่ี มีข้นั ตอนการดาเนินการเพื่อนาไลบราร่ีมาใชง้ านดงั น้ี
1. ดาวน์โหลดไลบรารี่ซ่ึงเป็นไฟล์ Zip ดงั รูป

รูปท่ี 4.19-5 การดาวน์โหลดไลบรารี่ท่ีนามาใชง้ าน
2. ทาการเพม่ิ ไลบราร่ีลงในโปรแกรม Arduino IDE โดยการเพม่ิ จากไฟล์ zip แลว้ ทาการหาไฟล์

zip ที่ไดจ้ ากการดาวน์โหลดในขอ้ 1

รูปที่ 4.19-6 การเพมิ่ ไลบรารี่ลงในโปรแกรม Arduino IDE
ข้อดีของไลบรารี่ HCMAX7219.h

1. มีฟังกช์ นั่ พมิ พข์ อ้ ความใหใ้ ชง้ าน
2. มีฟังกช์ น่ั แสดงตวั เลข (หลายหลกั ได)้ ท้งั เลขจานวนบวก/ลบ และแสดงทศนิยมได้
ข้อเสียของไลบราร่ี HCMAX7219.h
1. เน่ืองจากใชก้ ารสื่อสารดว้ ย SPI ดงั น้นั ขาเช่ือมตอ่ ท่ีเป็น MOSI,SCLK จึงเปลี่ยนเป็นขาอื่นไม่ได้
2. การสร้างรูปแบบการแสดงของแตล่ ะเซกเมนตต์ อ้ งเขา้ ไปแกใ้ นไลบรารี่

6. ฟังก์ช่ัน Arduino ทใ่ี ช้งานในใบงาน

1. ฟังก์ช่ันหน่วงเวลาหรือฟังก์ชั่นหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาท่ี
ตอ้ งการหยดุ คา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาที่
ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long

delay(ms);

ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)

ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  235

2. ฟังก์ชั่นส่งค่าเวลาต้ังแต่บอร์ดเริ่มทางาน ตวั เลขท่ีส่งกลบั มาจากฟังก์ชนั่ เป็ นเลขของเวลา
ต้งั แต่บอร์ดเริ่มทางานมีหน่วยเป็ นมิลลิวินาที ซ่ึงตวั เลขจะวนกลบั เป็ นศูนยอ์ ีกคร้ัง (Over
Flow) เมื่อเวลาผา่ นไปประมาณ 50 วนั หลงั จากบอร์ดเร่ิมทางาน รูปฟังกช์ น่ั เป็นดงั น้ี

millis();

ฟังก์ชั่นใช้งานของไลบรารี่ LedControl.h

1. ฟังก์ช่ันกาหนดขาเชื่อมต่อ ใชใ้ นการระบุขาที่ใชเ้ ชื่อมต่อใหต้ วั โปรแกรมรับรู้วา่ ขาสญั ญาณ
ชนิดใดเชื่อมต่ออยทู่ ี่ขาใด รูปแบบเป็นดงั น้ี

LedControl lc=LedControl(dataPin,clkPin,csPin,numDevices);

dataPin: ขาพอร์ตที่ใชเ้ ชื่อมต่อกบั ขา DIN ของโมดูล
clkPin: ขาพอร์ตที่ใชเ้ ชื่อมต่อกบั ขา CLK ของโมดูล
csPin: ขาพอร์ตที่ใชเ้ ช่ือมต่อกบั ขา CS ของโมดูล
numDevices: จานวนโมดูลที่ใชเ้ ช่ือมตอ่
ตวั อย่าง LedControl lc=LedControl(11,13,12,1);
หมายถงึ ต่อไปในโปรแกรมจะใช้ช่ือ lc ในการเรียกใช้งานโมดูลโดยมีการเชื่อมต่อ
สายสัญญาณ ดงั ในวงเล็บโดยตวั เลขแรกเป็ นขา DIN ไล่ไปจนตวั เลขสุดทา้ ยเป็ นการบอกวา่ มี
การเช่ือมต่อใชง้ านโมดูลจานวน 1 ตวั

2. ฟังก์ชั่นสั่งให้ทางานหรือไม่ทางาน ใชก้ าหนดการทางานของโมดูล รูปแบบเป็นดงั น้ี

.shutdown(addr,false);

addr: ตวั เลขแอดเดรสของโมดูล หากเป็นตวั แรกจะเป็น 0
false: เริ่มทางาน
ตวั อย่าง lc.shutdown(0,false);
หมายถึง ใหโ้ มดูลตวั แรก (แอดเดส 0) เร่ิมทางาน
3. ฟังก์ชั่นกาหนดความสว่าง ใชก้ าหนดความสวา่ งของ LED 7 Segment บนตวั โมดูล รูปแบบ
เป็นดงั น้ี

.setIntensity(addr,value);

addr: ตวั เลขแอดเดรสของโมดูล หากเป็นตวั แรกจะเป็น 0
value: ตวั เลขของลาดบั ความสวา่ งมีคา่ ต้งั แต่ 0-15 (ดบั สุดจนถึงสวา่ งสุด)

236  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

4. ฟังก์ชั่นล้างข้อมูล ใชล้ า้ งขอ้ มูลหนา้ จอหรือการทาใหห้ นา้ จอไม่มีอะไรแสดงผลรูปแบบเป็ น
ดงั น้ี

.clearDisplay(addr);

addr: ตวั เลขแอดเดรสของโมดูล หากเป็นตวั แรกจะเป็น 0

5. ฟังก์ช่ันแสดงตัวเลข ใช้แสดงตวั เลขแสดงจุดทศนิยมในตาแหน่งท่ีระบุบนโมดูล รูปแบบ
เป็นดงั น้ี

.setDigit(addr, digit, value, point_decimal);

addr: ตวั เลขแอดเดรสของโมดูล หากเป็นตวั แรกจะเป็น 0
digit: ตาแหน่งท่ีต้องการให้แสดงโดยตาแหน่งหน้าสุดเป็ นตาแหน่งที่ 7

หลงั สุดเป็นตาแหน่ง 0
value: คา่ ตวั เลขที่ตอ้ งการแสดงผลมีคา่ เท่ากบั 0-9
point_decimal: การแสดงทศนิยม ตอ้ งการแสดงใช้ true ไมต่ อ้ งการใช้ false

6. ฟังก์ชั่นแสดงตัวอักษร ใช้แสดงตวั อกั ษรแสดงจุดทศนิยมในตาแหน่งที่ระบุบนโมดูล
ตวั อกั ษรท่ีแสดงไดม้ ีเพยี งบางตวั ไดแ้ ก่ A b c d E F H L P . -_ รูปแบบเป็นดงั น้ี

.setChar(addr, digit, character, point_decimal);

addr: ตวั เลขแอดเดรสของโมดูล หากเป็นตวั แรกจะเป็น 0
digit: ตาแหน่งท่ีต้องการให้แสดงโดยตาแหน่งหน้าสุดเป็ นตาแหน่งที่ 7

หลงั สุดเป็นตาแน่ง 0
character: ค่าตวั อกั ษรที่ตอ้ งการแสดง เวลาใช้ตอ้ งใช้เครื่องหมาย ‘-‘ ครอบ

ตวั อกั ษรท่ีตอ้ งการใหแ้ สดงผลดว้ ย
point_decimal: การแสดงทศนิยม ตอ้ งการแสดงใช้ true ไม่ตอ้ งการใช้ false
7. ฟังก์ชั่นแสดงผลท่กี าหนดรูปแบบเอง ใชเ้ ม่ือตอ้ งการแสดงสิ่งท่ีตอ้ งการโดยการกาหนดการ
ติดดบั ในแต่ละเซ็กเมนต์ รูปแบบเป็นดงั น้ี

lc.setRow(addr, digit,value);

addr: ตวั เลขแอดเดรสของโมดูล หากเป็นตวั แรกจะเป็น 0
digit: ตาแหน่งท่ีต้องการให้แสดงโดยตาแหน่งหน้าสุดเป็ นตาแหน่งท่ี 7

หลงั สุดเป็นตาแน่ง 0
value: คา่ ท่ีตอ้ งการใหต้ ิดดบั

ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  237

lc.setDigit(0,7,1,false);
lc.setDigit(0,6,2,true);
lc.setDigit(0,5,3,false);

76543210

VCC
GND
DIN
CS
CL K

lc.setRow(0,2,B00110111); a

fb

Ex Want to display H g

segment dp a b c d e f g e c

data 0 0 1 1 0 1 1 1 d dp

รูปท่ี 4.19-7 การใชฟ้ ังกช์ น่ั การแสดงผลดว้ ยไลบราร่ี LedControl.h

ฟังก์ช่ันใช้งานของไลบรารี่ HCMAX7219.h

1. ฟังก์ช่ันกาหนดขาเช่ือมต่อ ใชใ้ นการระบุขาที่ใชเ้ ช่ือมต่อใหต้ วั โปรแกรมรับรู้วา่ ขาสัญญาณ
ชนิดใดเชื่อมต่ออยทู่ ่ีขาใด เนื่องจากไลบราร่ีน้ีใชก้ ารสื่อสารผา่ น SPI ดงั น้นั ขาที่ใชเ้ ชื่อมต่อ
แบบ SPI มีขาท่ีระบุแน่นอนไม่สามารถเปล่ียนเป็ นขาอ่ืนไดซ้ ่ึงขาท่ีใช้งานได้แก่ MOSI,
MISO, CLK, SS รูปแบบเป็นดงั น้ี

HCMAX7219 HCMAX7219(LOAD);

LOAD: ขาพอร์ตท่ีใชเ้ ช่ือมต่อกบั ขา CS ของโมดูลซ่ึงสามารถกาหนดเองได้

2. ฟังก์ชั่นล้างข้อมูล ใชล้ า้ งขอ้ มูลหนา้ จอหรือการทาใหห้ นา้ จอไม่มีอะไรแสดงผลรูปแบบเป็ น
ดงั น้ี

.Clear();

3. ฟังก์ชั่นกาหนดความสว่าง ใชก้ าหนดความสวา่ งของ LED 7 Segment บนตวั โมดูล รูปแบบ
เป็นดงั น้ี

.Intensity(Level, Driver)

Level: ตวั เลขของลาดบั ความสวา่ งมีค่าต้งั แต่ 0-15 (ดบั สุดจนถึงสวา่ งสุด)
Driver: ตวั เลขแอดเดรสของโมดูล หากเป็นโมดูลตวั แรกจะเป็น 0

238  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

4. ฟังก์ชั่นการแสดงผล ไลบรารี่น้ีมีฟังกช์ น่ั ส่งขอ้ มูลเขา้ บฟั เฟอร์เพ่ือแสดงผลใชเ้ พียงฟังก์ชนั่
เดียวแต่สามารถแสดงผลได้ 3 รูปแบบคือ
a. แสดงเป็ นข้อความ

.print7Seg("TEXT STRING", Offset);

"TEXT STRING": ขอ้ ความท่ีตอ้ งการใหแ้ สดงผลซ่ึงสามารถป้อนเป็นคาได้
Offset: ตาแหน่งที่ตอ้ งการใหแ้ สดงของตวั อกั ษรแรก ตาแหน่งหนา้ สุดของโมดูลคือ

8 และหลงั สุดคือ 1
b. แสดงเป็ นตวั เลข

.print7Seg(Value, Offset);

Value: ค่าตวั เลขที่ตอ้ งการใหแ้ สดง (แสดงผลเป็นเลขฐาน 10)
Offset: ตาแหน่งท่ีตอ้ งการใหแ้ สดงของตวั อกั ษรแรก ตาแหน่งหนา้ สุดของโมดูลคือ
8 และหลงั สุดคือ 1
c. แสดงเป็ นตัวเลขพร้อมตาแหน่งทศนิยม

.print7Seg(Value, Decimal_Position, Offset);

Value: คา่ ตวั เลขที่ตอ้ งการใหแ้ สดง (แสดงผลเป็นเลขฐาน 10)
Decimal_Position: คา่ ตาแหน่งทศนิยมของตวั เลขน้นั ๆ
Offset: ตาแหน่งท่ีตอ้ งการใหแ้ สดงของตวั อกั ษรแรก ตาแหน่งหนา้ สุดของโมดูลคือ
8 และหลงั สุดคือ 1

5. ฟังก์ช่ันแสดงผล ใช้ฟังก์ชนั่ ส่งค่าจากบฟั เฟอร์ที่ไดจ้ ากฟังก์ชนั่ HCMAX7219.print7Seg()
เพ่อื แสดงผลรูปแบบเป็นดงั น้ี

.Refresh();

HCMAX7219.print7Seg("ABCD",8);
87654321

VCC
GND
DIN
CS
CL K

HCMAX7219.print7Seg(123,2,3);

รูปท่ี 4.19-8 การใชฟ้ ังกช์ นั่ การแสดงผลดว้ ยไลบรารี่ HCMAX7219.h

ใบงานท่ี 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  239

7. วงจรทใ่ี ช้ทดลอง

วงจรเพอ่ื ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป
3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus

กรณีท่ีใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino
เรียบร้อยแลว้ ต่อวงจรดงั รูป

1DN15819 VCC Peripheral circuit

CPU circuit VCC
MAX7219 7-Segment 4-Digit
R1 7,20 ATMEGA328 VCC
10k VCC Din
Load
SW1 1 RST AVCC Clk
GND
C1 D11(MOSI) 17
0.1uF D10(SS) 16
19
D13(SCK)

USB to UART (TTL Level) R2,R3 3
1k 2
DTR
RXD D1(TXD)
TXD D0(RXD)
+5V
GND
3V3

X1 9 XTAL1
16MHz 10 XTAL2

C2,C3 GND
22pF
8,22

รูปที่ 4.19-9 วงจรท่ีใชไ้ อซี AVR ในการทดลอง
กรณีที่ใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป

VCC ARDUINO

5V VCC
MAX7219 7-Segment 4-Digit
D11(MOSI)
D10(SS) VCC
Din
D13(SCK) Load
Clk
GND

GND

รูปท่ี 4.19-10 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

240  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]AB C DEF GHI J
1 D13 D12 1
การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลองD11 5
3V3 D10
VCCREFD910
GNDA0D8
DIN5 A1D7 15
CSA2D6
CL KA3D5
A4 D4
รูปท่ี 4.19-11 การต่อลงบอร์ดทดลองA5D3
การต่อวงจรเพ่อื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus10 A6D2
A7
รูปที่ 4.19-12 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน5VGND
RST RST
8. การเขยี นโค้ดโปรแกรมควบคุมGND
15 VIN D0
การทดลองที่ 1 เขียนโปรแกรมแสดงผลบนโมดูล MAX7219 โดยให้แสดงท้งั ข้อความท้งั ตวั เลขที่มีD1
ทศนิยมโดยใชไ้ ลบรารี่ LedControl.h
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี20 20

START25 25
กาหนดค่าเริม่ ต้นต่าง
30 30
แสดงผล
35 35

40 40

45 45

50 50

55 55

60 60

AB C DE F GH I J

ใบงานท่ี 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  241

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 #include "LedControl.h"

2 LedControl lc=LedControl(11,13,10,1); // 11->DIN,13->CLK,10->CS,1->No.devices

3 void setup()

4{

5 lc.shutdown(0,false); // Enable display

6 lc.setIntensity(0,10); // Set brightness level (0 is min, 15 is max)

7 lc.clearDisplay(0); // Clear display register

8}

9 void loop()

10 {

11 lc.setDigit(0,7,2,false);

12 lc.setDigit(0,6,3,true);

13 lc.setDigit(0,5,4,false);

14 lc.setRow(0,4,B00110111);

15 lc.setRow(0,3,B01001111);

16 lc.setRow(0,2,B00001110);

17 lc.setRow(0,1,B00001110);

18 lc.setRow(0,0,B01111110);

19 while(1);

20 }

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1 รวมไฟลไ์ ลบรารี่ LedControl.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 2 กาหนดขาพอร์ต Arduino ที่ใชเ้ ช่ือมตอ่ กบั โมดูล MAX7219
- บรรทดั ที่ 5 สัง่ ใหโ้ มดูล MAX7219 เริ่มทางาน
- บรรทดั ที่ 6 กาหนดความสวา่ งของตวั เลขบนโมดูล MAX7219
- บรรทดั ที่ 7 ลา้ งขอ้ มูลท่ีแสดงผลบนโมดูล MAX7219
- บรรทดั ที่ 11 แสดงเลข 2 ท่ีตาแหน่ง 7 และไมแ่ สดงทศนิยม
- บรรทดั ที่ 12 แสดงเลข 3 ที่ตาแหน่ง 6 และแสดงทศนิยม
- บรรทดั ท่ี 13 แสดงเลข 4 ที่ตาแหน่ง 5 และไม่แสดงทศนิยม
- บรรทดั ที่ 14 ตาแหน่ง 4 ใหต้ ิดสวา่ งเป็นตวั “H”
- บรรทดั ท่ี 15 ตาแหน่ง 3 ใหต้ ิดสวา่ งเป็นตวั “E”
- บรรทดั ท่ี 16 ตาแหน่ง 2 ใหต้ ิดสวา่ งเป็นตวั “L”
- บรรทดั ที่ 17 ตาแหน่ง 1 ใหต้ ิดสวา่ งเป็นตวั “L”
- บรรทดั ท่ี 18 ตาแหน่ง 0 ใหต้ ิดสวา่ งเป็นตวั “O”
- บรรทดั ที่ 19 สั่งใหซ้ ีพียวู นอยกู่ บั ที่

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปล่ียนรูปแบบการแสดงผล

242  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

การทดลองท่ี 2 เขียนโปรแกรมแสดงผลบนโมดูล MAX7219 โดยให้แสดงท้งั ขอ้ ความท้งั ตวั เลขท่ีมี
ทศนิยมโดยใชไ้ ลบราร่ี HCMAX7219.h
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดคา่ เริ่มต้นต่าง

แสดงผล

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 /* PINOUT:

2 MODULE.............Arduino

3 VCC................+5V

4 GND................GND

5 DIN................D11(MOSI)

6 CLK................D13(CLK)

7 CS.................D10(SS)

8 */

9 #include <HCMAX7219.h>

10 #include <SPI.h>

11 #define CS 10 //Set the CS pin

12 HCMAX7219 HCMAX7219(CS);

13 void setup()

14 {

15 HCMAX7219.Intensity(10, 0); //Sets the intensity of the LED 0 to 15

16 }

17 void loop()

18 {

19 HCMAX7219.Clear(); // Clear the output buffer

20 HCMAX7219.print7Seg("ABCDE",8);// Write some text to the output buffer

21 HCMAX7219.print7Seg(123,2,3); // Write value to the output buffer

22 HCMAX7219.Refresh(); // Send the output buffer to the display

23 while(1);

24 }

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ท่ี 1-8 เป็นส่วนอธิบายวา่ ขาใดของโมดูล MAX7219 เช่ือมต่อกบั ขาใดของ Arduino
- บรรทดั ที่ 9 รวมไฟลไ์ ลบรารี่ HCMAX7219.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ท่ี 10 รวมไฟลไ์ ลบราร่ี SPI.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 11 กาหนดจานวนขาพอร์ตของ Arduino ท่ีใชเ้ ชื่อมต่อขา CS ของโมดูล
- บรรทดั ท่ี 12 ประกาศเร่ิมใชง้ านไลบรารี่
- บรรทดั ที่ 15 กาหนดความสวา่ งของตวั เลขบนโมดูล MAX7219
- บรรทดั ที่ 19 ลา้ งขอ้ มูลในบฟั เฟอร์ที่แสดงผลบนโมดูล MAX7219
- บรรทดั ท่ี 20 ใส่ขอ้ ความ"ABCD" ลงบฟั เฟอร์โดยใหเ้ ริ่มแสดงผลตาแหน่งที่ 8
- บรรทดั ที่ 21 ใส่ตวั เลข 123 ท่ีเป็นตวั เลขที่มีทศนิยม 2 ตาแหน่งลงบฟั เฟอร์เร่ิมตาแหน่งท่ี 3
- บรรทดั ที่ 22 แสดงผลบนโมดูล MAX7219 จากขอ้ มูลที่อยใู่ นบฟั เฟอร์

ใบงานท่ี 4.19 การเขียนโปรแกรมแสดงผลดว้ ยโมดูลตวั เลข MAX7219  243

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปล่ียนแปลงรูปแบบการแสดงผล

การทดลองที่ 3 เขียนโปรแกรมแสดงค่าของตวั แปรท่ีกาหนดข้ึนบนโมดูล MAX7219 โดยให้ตวั แปรเร่ิม
จาก 0-999 โดยใชไ้ ลบรารี่ HCMAX7219.h
ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี

START

กาหนดค่าเริ่มต้นต่าง

แสดงค่าตวั แปรบนโมดลู

จริง ตัวแปร<1000? เทจ็

เพ่มิ ค่าตวั แปร ล้างค่าตวั แปร

แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino

1 /*

2 PINOUT:

3 MODULE.............Arduino

4 VCC................+5V

5 GND................GND

6 DIN................D11(MOSI)

7 NC(no connection)..D12(MISO)

8 CLK................D13(CLK)

9 CS.................D10(SS)

10 */

11 #include <HCMAX7219.h>

12 #include <SPI.h>

13 #define CS 10 // Set the CS pin

14 int value=0;

15 HCMAX7219 HCMAX7219(CS);

16 void setup()

17 {

18 HCMAX7219.Intensity(10, 0); //Sets the intensity of the LED 0 to 15

19 HCMAX7219.Clear(); // Clear the output buffer

20 }

21 void loop()

22 {

23 HCMAX7219.print7Seg(value,8);

24 HCMAX7219.Refresh();

25 delay(250);

26 if(value<1000)

27 value++;

28 else

29 value=0;

30 }

244  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]

รายละเอยี ดโค้ดโปรแกรม
- บรรทดั ที่ 9 รวมไฟลไ์ ลบรารี่ HCMAX7219.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ท่ี 10 รวมไฟลไ์ ลบราร่ี SPI.h เขา้ มาในโคด้ โปรแกรม
- บรรทดั ที่ 11 กาหนดจานวนขาพอร์ตของ Arduino ที่ใชเ้ ชื่อมตอ่ ขา CS ของโมดูล
- บรรทดั ท่ี 12 ประกาศเริ่มใชง้ านไลบราร่ี
- บรรทดั ท่ี 14 ประกาศใชง้ านตวั แปรที่จะนาไปแสดงผล
- บรรทดั ที่ 15 กาหนดความสวา่ งของตวั เลขบนโมดูล MAX7219
- บรรทดั ท่ี 19 ลา้ งขอ้ มูลในบฟั เฟอร์ที่แสดงผลบนโมดูล MAX7219
- บรรทดั ท่ี 23 ใส่ค่าขอ้ มูลจากตวั แปรลงบฟั เฟอร์โดยใหเ้ ริ่มแสดงผลตาแหน่งท่ี 8
- บรรทดั ท่ี 24 แสดงผลบนโมดูล MAX7219 จากขอ้ มูลท่ีอยใู่ นบฟั เฟอร์
- บรรทดั ที่ 26-29 ตรวจสอบค่าตวั แปรใหม้ ีคา่ อยใู่ นระหวา่ ง 0-999

ทดลองการทางาน
1. จาลองการทางานดว้ ยโปรแกรม Proteus
2. ทดลองดว้ ยวงจรจริง
3. ทดลองเปล่ียนแปลงรูปแบบการแสดงผล

9. สรุปผลการปฏบิ ัตงิ าน

10. งานทมี่ อบหมาย

1. เขียนโปรแกรมแสดงเวลาท่ีบอร์ดเร่ิมทางานโดยแสดงผลในหน่วยวินาที วงจรท่ีใชท้ ดลอง
เป็นดงั รูป

VCC ARDUINO

5V VCC
MAX7219 7-Segment 4-Digit
D11(MOSI)
D10(SS) VCC
Din
D13(SCK) Load
Clk
GND

GND

รูปท่ี 4.19-13 วงจรที่ใชไ้ อซี AVR ในการทดลอง


Click to View FlipBook Version