Arduino IDE51
3.9 ตาํ แหนงการเกบ็ ไฟลสเก็ตชของ Arduino IDE
ผพู ฒั นาโปรแกรมบนั ทกึ ไฟลส เกต็ ชไ วท ใี่ ดในพน้ื ทจ่ี ดั เกบ็ แฟม ขอ มลู ของคอมพวิ เตอรก ไ็ ด แต
เพอ่ื อาํ นวยความสะดวกและจดจาํ งา ย Arduino IDE จงึ กาํ หนดคา ตงั้ ตน (default) ของตาํ แหนง จดั เกบ็
โฟลเดอรของไฟลสเก็ตชที่พัฒนาขึ้นไวท่ี C:\Documents and Settings\Admin (หรือช่ือผูใช) \My
Documents\Arduino สามารถตรวจสอบรวมถงึ กาํ หนดตาํ แหนง ใหมไ ดโดยไปทเ่ี มนูFile> Preference
จะปรากฏหนาตาง Preference ข้ึนมาดังรปู หากตองการเปลีย่ นแปลงตําแหนง โฟลเดอรท ี่จดั
เกบ็ ไฟลส เกต็ ชท ชี่ อ ง Sketchbook location โดยใชเ มาสค ลกิ ทปี่ มุ คน หาทางดา นขวามอื หรอื จะพมิ พ
ตําแหนงลงไปในชอง Sketchbook location โดยตรงกไ็ ด จากน้ันคลิกปุม OK เพอ่ื ตอบตกลงและ
ยืนยันการเปลี่ยนแปลง
สว นพารามเิ ตอรห รอื ขอ กาํ หนดอน่ื ๆ แนะนาํ ใหใ ชต ามคา ทก่ี าํ หนดมา ทง้ั นเ้ี พอ่ื ลดขน้ั ตอนการ
พฒั นาโปรแกรมและความผิดพลาดทอ่ี าจเกิดขน้ึ ไดส ําหรบั นกั พฒั นาโปรแกรมมอื ใหมห รอื ผูเ รม่ิ ตน
52 Arduino IDE
Arduino IDE53
หลังจากการแนะนําข้ันตอนแนวทางการพัฒนาโปรแกรมภาษา C/C++ ดวยซอฟตแวร
Arduino IDE 1.7.10 ไปแลวในบทที่ 3 เพ่ือใหการเรียนรูเปนไปอยางตอเนื่อง ในบทนี้จึงนําเสนอ
ตวั อยา งการทดสอบการทาํ งานในสว นตา งๆ ทสี่ าํ คญั ของแผงวงจร IPST-SE อนั เปน แผงวงจรควบคมุ
หลักของชุดกลองสมองกล IPST-MicroBOX (SE) เพ่ือเปนแนวทางในการตอยอดสูการพัฒนา
โปรแกรมเพอื่ สรางโครงงานและหุน ยนตอตั โนมัติอยางเต็มรูปแบบตอไป
หวั ขอ กิจกรรมสําหรบั ทดสอบเบอ้ื งตน มที ัง้ ส้ิน 4 กิจกรรม ประกอบดวย
กิจกรรมที่ 1 แสดงผลขอความทหี่ นา จอภาพกราฟก LCD (มกี ิจกรรมยอย 5 กิจกรรม)
กิจกรรมที่ 2 อานคา จากปมุ KNOB และสวิตช OK บนแผงวงจร IPST-SE
กิจกรรมท่ี 3 ขับอปุ กรณเอาตพตุ อยางงา ย
กิจกรรมที่ 4 ขับเสียงออกลําโพงเปย โซ
ขั้นตอนการพฒั นาโปรแกรมในแตล ะกิจกรรมจะเหมือนกนั นน่ั คือ เปดซอฟตแวร Arduino
IDE 1.7.10 ทาํ การเขยี นโปรแกรม คอมไพล และอปั โหลดลงบนแผงวงจร IPST-SE ของชดุ กลอ งสมอง
กล IPST-MicroBOX (SE) จากนั้นทดสอบการทาํ งาน
สงิ่ สาํ คญั ทตี่ อ งเนน ยาํ้ คอื ทกุ ครงั้ ทเ่ี ปด สวติ ชจ า ยไฟแกแ ผงวงจร IPST-SE ตอ งรอ
ใหตวั ควบคมุ พรอมทํางานเสียกอน ซึง่ ใชเ วลาประมาณ 3 ถึง 5 วินาทหี ลงั จากเปด
ไฟเลี้ยงหรือหลงั จากการกดสวิตช RESET หากมีการอปั โหลดกอนทแ่ี ผงวงจร IPST-SEจะ
พรอ มทาํ งาน อาจทาํ ใหเกิดความผิดพลาดในการเช่ือมตอ หรอื โคดทอ่ี ปั โหลดลงไปไมท ํางานตามที่
ควรจะเปน แตจะไมส ง ผลจนทําใหแผงวงจรเกิดความเสียหาย สิ่งที่เกิดขึ้นมเี พยี งแผงวงจรไมทํางาน
หรอื ทํางานไมถกู ตองเทา นน้ั
54 Arduino IDE
(A1.1.1) เปดซอฟตแ วร Arduino IDE 1.7.10 พิมพโปรแกรมท่ี A1-1 แลว บันทกึ ไฟล
(A1.1.2) เปดสวติ ชจ า ยไฟแกแผงวงจร IPST-SE แลว เชอ่ื มตอ สาย USB เขากบั คอมพิวเตอร
2
1 3
28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3 ON
000000000000000000000
KNOB 000000000000000000000 DC MOTOR G
4 OK 000000000000000000000 6V
SW1 000000000000000000000 15 SV0 14 SV1 13 SV2 12 SV312
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
(A1.1.3) เลือกชนิดหรือรุนของฮารดแวรใหถูกตอง โดยเลอื กท่เี มนู Tools > Board > IPST-SE >
ATmega644P @16MHz ดงั รูป
Arduino IDE55
#include <ipst.h> // ผนวกไลบรารหี ลกั
void setup() // แสดงขอ ความบนจอแสดงผล
{
glcd(1,0,"Hello World");
}
void loop()
{}
คําอธิบายโปรแกรม
โปรแกรมน้ีจะทาํ งานโดยสงขอ ความ Hello World ออกไปแสดงผลทบ่ี รรทดั 1 คอลัมน 0 ของจอ
แสดงผล จะทาํ งานเพยี งครงั้ เดยี ว จงึ เขียนโปรแกรมไวทตี่ ําแหนงของ void setup() เทานั้น
โปรแกรมที่ A1-1 ไฟล microbox_HelloGLCD.ino สาํ หรบั ทดสอบการแสดงผลของแผงวงจร 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
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB DC MOTOR ON
OK Hello0World0000000000
SW1 15 SV0 14 SV1 13 SV2 12 SV3 G
000000000000000000000 6V
000000000000000000000 12
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
56 Arduino IDE
จอแสดงผลของแผงวงจร 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ไฟลmicrobox_GLCDmultipleLine.inoสาํ หรบั ทดสอบการแสดงผลของแผงวงจรIPST-SE
Arduino IDE57
(A1.2.1) เปดซอฟตแ วร Arduino IDE 1.7.10 พิมพโปรแกรมที่ 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
เรียงไปบรรทัดละขอความ
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB DC MOTOR ON
Rowl00World0000000000
OK 0Row01000000000000000 15 SV0 14 SV1 13 SV2 12 SV3 G
00Row0200000000000000 6V
SW1 000Row030000000000000 12
0000Row04000000000000 G
00000Row0500000000000 6V
000000R00060000000000 13
0000000R0007000000000 G
00000000Row0800000000 6V
000000000Row090000000 14
0000000000Row01000000 G
00000000000Row0110000 6V
000000000000Row012000 15
0000000000000Row01300
00000000000000Row0140 SERVO
000000000000000Row015
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
58 Arduino IDE
ขนาดตวั อกั ษรปกตทิ แี่ สดงบนจอแสดงผลของแผงวงจร 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 ไฟล microbox_GLCDtextFlip.ino สาํ หรบั ทดสอบการเพมิ่ ขนาดตวั อกั ษรในการแสดงผล
และการเปลยี่ นทิศทางของการแสดงผลของแผงวงจร IPST-SE
Arduino IDE59
นอกจากขนาดตวั อกั ษรแลว ยงั กําหนดทศิ ทางการแสดงผลของจอแสดงผลได โดยใชค าํ สง่ั
glcdMode() โดยมคี า ตง้ั ตน คอื โหมด 0 (glcdMode(0)) นน่ั คอื แสดงผลในแนวตงั้ สาํ หรับอกี 3
โหมดคอื โหมด 1, 2 และ 3 ใชปรบั ใหก ารแสดงผลหมถนไปโหมดละ 90 องศา นน่ั คือ โหมด 1 หมุน
ไป 90 องศา, โหมด 2 หมุนไป 180 องศา และโหมด 3 หมุนไป 270 องศา
(A1.3.1) เปดซอฟตแ วร Aruino IDE 1.7.10 พิมพโปรแกรมท่ี 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 จอแสดงขอ ความแนวตงั้ M = 1 หมุนการแสดงผลไป 90 องศาทางขวา
ตวั อกั ษรขนาด 3 เทา ตวั อกั ษรขนาด 4 เทา
M = 2 หมุนการการแสดงผลไป 180 องศา M = 3 หมนุ การแสดงผลไป 270 องศา
จะไดภาพที่กลบั หวั เม่ือเทยี บกบั M = 0 ตวั อกั ษรขนาด 5 เทา
ตวั อกั ษรขนาด 4 เทา
60 Arduino IDE
ฟง กช น่ั 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(); ออก เพื่อเปล่ียนรูปแบบการเรียงขอ มลู สี
Arduino IDE61
#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
int i,j;
void setup() // หากสขี องการแสดงผลผดิ ใหเ ปด ใชฟง กช ั่นน้ี
{
// เคลยี รหนาจอและพ้ืนหลงั เปน สดี าํ
//glcdSetColorWordRGB();
} // วาดเสนสขี าวจากพิกดั 0,0 ไปยงั จุดทกี่ าํ หนด
void loop()
{ // วาดเสน สแี ดงจากพกิ ดั 0,0 ไปยงั จุดทก่ี าํ หนด
glcdClear; // วาดเสนกรอบสเี่ หลยี่ มสีนํ้าเงนิ
sleep(300); // สรา งวงกลมพน้ื สเี ขยี ว
for (i=0;i<160;i+=4) // สรา งวงกลมพนื้ สเี หลอื ง
{ // สรา งวงกลมพนื้ สบี านเยน็
// สรา งวงกลมพน้ื สฟี า
glcdLine(0,0,128,i,GLCD_WHITE); // วาดเสนรอบวงกลมสเี ขยี ว
} // วาดเสน รอบวงกลมสีน้ําเงนิ
for (i=0;i<128;i+=4) // วาดเสน รอบวงกลมสีเหลอื ง
{ // วาดเสน รอบวงกลมเสนสฟี า
// สรา งรปู สเ่ี หลย่ี มสเี หลอื ง
glcdLine(0,0,i,160,GLCD_RED);
}
delay(2000);
glcdRect(32,40,64,80,GLCD_BLUE);
delay(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);
delay(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);
delay(1000);
glcdFillRect(0,0,128,160,GLCD_YELLOW);
delay(1000);
}
โปรแกรมท่ีA1-4ไฟลmicrobox_GLCDsimpleGraphic.inoสาํ หรบั ทดสอบการแสดงผลของแผงวงจรIPST-SE
62 Arduino IDE
นอกจากวงกลมและสเ่ี หลยี่ มแลว เสน โคง กเ็ ปนสว นประกอบสาํ คญั ในการสรา งภาพกราฟก
ในชดุ คาํ สง่ั เก่ียวกบั การแสดงผลจอภาพแบบกราฟกสขี องแผงวงจร IPST-SE ยังมคี าํ สงั่ glcdArc()
สาํ หรบั สรา งเสน โคง โดยมพี ารามเิ ตอรห รอื ตวั แปรทต่ี อ งกาํ หนดอยพู อสมควร ดรู ายละเอยี ดเพม่ิ เตมิ
ในบทท่ี 6 เกย่ี วกบั การใชง านจอแสดงผลแบบกราฟก LCD สีตวั น้ี
(A1.5.1) เปดซอฟตแ วร Aruino IDE 1.7.10 พิมพโปรแกรมที่ 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ไฟลmicrobbox_GLCDarcTest.inoสาํ หรบั ทดสอบการวาดเสน โคง ของแผงวงจรIPST-SE
Arduino IDE63
(A1.5.3) คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทป่ี มุ หรอื เลอื กทเี่ มนู
File > Upload to Wiring Hardware
(A1.5.4) รันโปรแกรม ดผู ลการทาํ งานทจ่ี อแสดงผลของแผงวงจร IPST-SE
ทจ่ี อแสดงผลแสดงเปนรูปการตนู หนา ยม้ิ นาน 1 วนิ าที แลวหมนุ ไปครั้งละ 90 องศา แลววน
กลบั มาท่หี นา เรม่ิ ตน จะวนแสดงผลไปตลอดเวลา
64 Arduino IDE
ในระบบควบคมุ พน้ื ฐานจะตอ งมกี ารปรบั ตงั้ คา มเี มนู มสี วติ ชใ นการสง่ั งานตา งๆ บนแผงวงจร
IPST-SE กม็ สี วนตดิ ตตอ กับผูใ ชง านดว ยเชน กัน ประกอบดว ยปุม KNOB สําหรับปรับเลือกรายการ
และสวติ ช OK กับ SW1 สาํ หรับยืนยนั การเขาสรู ายการทางเลอื กนน้ั ๆ
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
DC MOTOR ON
KNOB Hello0World0000000000
15 SV0 14 SV1 13 SV2 12 SV3 G
OK 000000000000000000000 6V
000000000000000000000 12
SW1 000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
เขียนโปรแกรมท่ี A2-1 แลวบันทกึ ไฟลช อื่ microbox_KnobSwitchTest.ino ทาํ การคอมไพล
และอปั โหลดไปยงั แผงวงจร IPST-SE แลว รันโปรแกรมทดสอบการทาํ งาน
เมอ่ื โปรแกรมเร่ิมทาํ งาน ทห่ี นา จอแสดงผลของแผงวงจร IPST-SE แสดงขอความ
Press OK (ขนาดตวั อกั ษรใหญข นาด 2x)
ใหก ดสวติ ช OK เพอื่ ทาํ งานตอ
หนาจอแสดงรปู วงกลมสีเหลอื ง 1 วนิ าที จากนนั้ แสดงขอความ
Knob value (ขนาดตวั อกั ษรใหญข นาด 2x)
XXXX (ขนาดตวั อกั ษรใหญข ้ึนเปนขนาด 3x)
โดยท่ี xxxx มคี า ไดต ง้ั แต 94 ถึง 1023
ทดลองปรับปุม KNOB บนแผงวงจร IPST-SE
คา ของ Knob ทจ่ี อแสดงผลจะตอ งเปล่ียนแปลงตามการปรับทป่ี ุม KNOB
จากน้นั กดสวติ ช OK แลวปลอย
หนา จอแสดงรปู วงกลมสเี ขยี ว 1 วนิ าที แลว กลบั ไปแสดงขอ ความและคา ของ KNOB
Arduino IDE65
ทดลองกดสวติ ช SW1 แลวปลอย
หนาจอแสดงรปู วงกลมสีแดง 1 วนิ าที แลวกลบั ไปแสดงขอ ความและคา ของ KNOB
#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
void setup()
{
//glcdSetColorWordRGB(); // หากสขี องการแสดงผลผดิ ใหใ ชฟง กช ่ันนี้
glcdClear(); // เคลยี รหนาจอแสดงผล กาํ หนดพนื้ หลงั เปน สดี าํ
setTextSize(2); // เลอื กขนาดตัวอักษรใหญเ ปน 2 เทา จากขนาดปกติ
glcd(1,1,"Press OK"); // แสดงขอ ความออกหนา จอแสดงผล
sw_OK_press(); // วนรอจนกระทงั่ กดสวติ ช OK
glcdClear(); // เคลยี รหนาจอแสดงผล กาํ หนดพน้ื หลงั เปนสดี าํ
glcdFillCircle(64,70,50,GLCD_YELLOW); // วาดวงกลมสเี หลอื ง
delay(1000); // แสดงผลวงกลมสเี หลอื ง 1 วนิ าที
glcdClear(); // เคลยี รหนาจอแสดงผล กาํ หนดพน้ื หลงั เปน สดี าํ
}
void loop()
{
if (sw_OK()) // ตรวจสอบการกดสวติ ช OK
{
glcdClear(); // เคลยี รห นาจอแสดงผล กาํ หนดพนื้ หลงั เปนสดี าํ
glcdFillCircle(64,70,50,GLCD_GREEN); // วาดวงกลมสเี ขยี ว
delay(1000); // แสดงผลวงกลมสเี ขยี ว 1 วนิ าที
glcdClear(); // เคลยี รหนาจอแสดงผล กาํ หนดพน้ื หลงั เปน สดี าํ
}
if(sw1()) // ตรวจสอบสวติ ช SW1 วา มีการกดหรอื ไม
{
glcdClear(); // เคลยี รห นาจอแสดงผล กาํ หนดพน้ื หลงั เปน สดี าํ
glcdFillCircle(64,70,50,GLCD_RED); // วาดวงกลมสีแดง
delay(1000); // แสดงผลวงกลมสแี ดง 1 วนิ าที
glcdClear(); // เคลยี รห นาจอแสดงผล กาํ หนดพนื้ หลงั เปน สดี าํ
}
glcd(1,0,"Knob value"); // แสดงขอ ความที่จอแสดงผล
setTextSize(3); // เลอื กขนาดตัวอกั ษรใหญเ ปน 3 เทา จากขนาดปกติ
glcd(2,2,"%d ",knob()); // แสดงคา ท่ีอา นไดจ ากการปรับปุม KNOB ทห่ี นาจอแสดงผล
setTextSize(2); // เลอื กขนาดตัวอักษรใหญเปน 2 เทา จากขนาดปกติ
}
โปรแกรมท่ี A2-1 ไฟล microbox_KnobSwitchTest.ino สาํ หรบั ทดสอบอา นคาจากปุม KNOB, สวติ ช OK
และ SW1
66 Arduino IDE
ในไฟลไลบรารี 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
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB DC MOTOR ON
Hello0World0000000000
OK 15 SV0 14 SV1 13 SV2 12 SV3 G
000000000000000000000 6V
SW1 000000000000000000000 12
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
ZX-LED LED
510
+ KRC102
ZX-LEDS
S
LED
510
KRC102
+
Arduino IDE67
#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
void setup()
{ // เลอื กขนาดตัวอกั ษรใหญเปน 2 เทา จากขนาดปกติ
// แสดงขอ ความออกหนาจอ GLCD
setTextSize(2); // วนรอการกดสวติ ช OK
glcd(1,1,"Press OK");
sw_ok_press(); // ทาํ ให LED ทตี่ ออยกู บั พอรต 17 ติดสวา ง
} // ทาํ ให LED ทตี่ ออยกู บั พอรต 18 ดบั
void loop() // ทาํ ให LED ทต่ี ออยกู บั พอรต 17 ดบั
{ // ทาํ ให LED ทต่ี ออยกู บั พอรต 18 ติดสวา ง
out(17,1);
out(18,0);
sleep(400);
out(17,0);
out(18,1);
delay(400);
}
โปรแกรมท่ี A3-1 ไฟล microbox_LEDtest.ino สาํ หรบั ทดสอบการขบั อปุ กรณเ อาตพ ตุ อยา งงา ย
(A3..2) เขียนโปรแกรมท่ี A3-1 บันทกึ ไฟลช อื่ microbox_LEDtest.ino
(A3.3) เปด สวติ ชจ า ยไฟแกแ ผงวงจร IPST-SE จากนน้ั ทาํ การคอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผง
วงจร IPST-SE
(A3.4) รันโปรแกรม สังเกตการทาํ งานของ ZX-LED
เมอื่ รันโปรแกรม ทห่ี นา จอแสดงผลของแผงวงจร IPST-SE แสดงขอความ
Press OK
ใหก ดสวติ ช OK เพื่อเร่ิมการทาํ งาน จะเหน็ LED บนแผงวงจร ZX-LED ทง้ั สองชดุ ตดิ และ
ดับสลับกันไปอยางตอเน่ือง
68 Arduino IDE
ในชดุ กลอ งสมองกล 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
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB DC MOTOR ON SPEAKER O
Hello0World0000000000
OK 15 SV0 14 SV1 13 SV2 12 SV3 G +S
000000000000000000000 6V
SW1 000000000000000000000 +12
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1 S
Arduino IDE69
#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
void setup() // ขบั เสยี ง “ติ้ด” ออกลาํ โพงผานทางจดุ ตอ พอรต 19
{}
void loop()
{
beep(19);
delay(1000);
}
โปรแกรมที่ A4-1 ไฟล microbox_BeepTest.ino สาํ หรบั ทดสอบขบั เสยี งออกลาํ โพงของแผงวงจร IPST-SE
#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
void setup()
{} // ขบั เสยี งความถ่ี 500Hz นาน 0.5 วนิ าที ออกลาํ โพงผานทางจดุ ตอ พอรต 19
void loop() // ขบั เสยี งความถี่ 2500Hz นาน 0.5 วนิ าที ออกลาํ โพงผานทางจดุ ตอ พอรต 19
{
sound(19,500,500);
sound(19,2500,500);
}
โปรแกรมท่ีA4-2 ไฟลmicrobox_SoundTest.ino สาํ หรบั ทดสอบการขบั เสยี งออกลาํ โพงของแผงวงจร IPST-
SE แบบกาํ หนดความถแ่ี ละเวลาได
(A4..2) เขยี นโปรแกรมท่ี A4-1 บนั ทกึ ไฟลชอ่ื microbox_BeepTest.pde
(A4.3) เปด สวติ ชจ า ยไฟแกแ ผงวงจร IPST-SE จากนน้ั ทาํ การคอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผง
วงจร IPST-SE
(A4.4) รนั โปรแกรม
จะไดย นิ เสยี ง “ตด้ิ ” ดงั เปนจงั หวะในทกุ ๆ 1 วนิ าทจี ากลาํ โพงของแผงวงจร ZX-SPEAKER
(A4.5) เขียนโปรแกรมท่ี A4-2 บันทกึ ไฟลชอ่ื microbox_SoundTest.ino แลวอปั โหลดโปรแกรมไป
ยงั แผงวงจร IPST-SE เพื่อทดสอบการทาํ งานอกี ครั้ง
จะไดย นิ สญั ญาณเสียง 2 ความถีด่ งั สลับกันออกจากลําโพงของแผงวงจร ZX-SPEAKER
70 Arduino IDE
Arduino IDE71
การพฒั นาโปรแกรมภาษา C/C++ สาํ หรบั ชดุ กลอ งสมองกล IPST-MicroBOX (SE) ดาํ เนนิ การ
ภายใตก ารสนับสนนุ ของไฟลไ ลบรารี ipst.h ทัง้ นี้เพอ่ื ชว ยลดขัน้ ตอนและความซบั ซอนในการเขยี น
โปรแกรมเพื่อควบคุมสวนตางๆ ของฮารดแวรลง โครงสรา งของไฟลไ ลบรารี ipst.h แสดงดงั รปู
TB6612FNG
M
M
72 Arduino IDE
5.1 ไฟลไ ลบรารี ipst.h
ในการเรยี กใชงานชุดคําสง่ั ยอยตางๆ เพอื่ การพฒั นาโปรแกรมควบคุมสําหรบั ชดุ กลองสมอง
กล IPST-MicroBOX (SE) ผพู ฒั นาตอ งผนวกไฟลไ ลบรารหี ลกั ipst.h ไวใ นตอนตน ของโปรแกรมดว ย
คําสัง่
#include <ipst.h>
เพอ่ื ประกาศใหใ หต วั แปลภาษา C หรอื คอมไพเลอรร จู กั ชดุ คาํ สง่ั ยอ ยทกี่ าํ ลงั จะถกู เรยี กใชง าน
จากไฟลไ ลบรารี ipst.h
ไลบรารยี อยของไฟลไ ลบรารี ipst.h ประกอบดวย
ipst_glcd.h บรรจุฟงกช่ันและคําสั่งสําหรับแสดงผลขอความ, ตัวเลข และสราง
ภาพกราฟก สที จ่ี อแสดงผลแบบกราฟก LCD สบี นแผงวงจร IPST-SE (ยงั ไมร องรบั การทาํ งานกบั ไฟล
รปู ภาพ) ฟง กชั่นนม้ี กี ารกาํ หนดขาใชงานทเ่ี ฉพาะเจาะจง (มีรายละเอยี ดอธบิ ายในบทที่ 6)
ipst_sleep.h บรรจฟุ ง กชน่ั และคําสงั่ สําหรบั การหนว งเวลา
ipst_in_out.h บรรจฟุ ง กช นั่ และคาํ สง่ั สาํ หรบั อา นคา อนิ พตุ ดจิ ติ อลและสง คา ออกทาง
ขาพอรต เอาตพุตดิจติ อล
ipst_analog.h บรรจุฟงกช่ันและคําส่ังอานคาจากอินพุตอะนาลอกชอง A0 ถึง A6
ท่ีตอกับตัวตรวจจับและปมุ KNOB กับสวติ ช OK
ipst_sound.h บรรจฟุ ง กชน่ั และคําสัง่ สาํ หรบั สรา งเสียงเพอื่ ขบั ออกลําโพง
ipst_motor.h บรรจฟุ ง กช น่ั และคาํ สงั่ สาํ หรบั ขบั มอเตอรไ ฟตรง 2 ชอ ง ตอ งทาํ งานรว ม
กับวงจรขับมอเตอรท ่ีใชไอซี TB6612 และใชไฟเลี้ยงอกี สวนหน่ึงสําหรบั เล้ียงมอเตอรไ ฟตรง
ipst_servoMotor.hบรรจฟุ ง กช น่ั และคาํ สง่ั สาํ หรบั ขบั เซอรโ วมอเตอร ตอ งทาํ งานรว ม
กับเซอรโวมอเตอร และตองใชไฟเลี้ยง +6V อีกสวนหน่ึงสําหรับเซอรโวมอเตอร ฟงกช่ันนี้มีการ
กําหนดขาใชง านทเ่ี ฉพาะเจาะจง
ipst_serial.hบรรจฟุ ง กช น่ั และคาํ สง่ั สาํ หรบั สอ่ื สารขอ มลู อนกุ รมผา นทางพอรต USB
และผานทางจดุ ตอพอรต TxD1 และ RxD1 ของแผงวงจร IPST-SE
ipst_led8.hบรรจฟุ ง กช น่ั และคาํ สงั่ สาํ หรบั แสดงผล LED 8 ดวงบนแผงวงจร ZX-LED8
โดยส่งั ให LED ติดทลี ะดวง หรอื หลายดวงก็ได
Arduino IDE73
5.2 ไฟลไ ลบรารขี อง Arduino 1.x
Arduino1.x มไี ลบรารจี าํ นวนมาก เพอ่ื ชว ยใหก ารเขยี นโปรแกรมเพอื่ ตดิ ตอ และใชง านอปุ กรณ
ฟงกช่ันพิเศษ ตลอดจนตัวตรวจจับแบบตางๆ ทําไดสะดวกและงายข้ึน สรุปไดดังนี้
1. EEPROM.h ไลบรารีสําหรับการจัดการหนวยความจําขอมูลอีอีพรอมภายใน
ไมโครคอนโทรลเลอร ATmega644P ท่ีใชใ นแผงวงจร IPST-SE
2. LiquidCrystal.h ไลบรารตี ิดตอกบั โมดลู LCD แบบตัวอักษร
3. Encoder.h ไลบรารสี าํ หรบั การใชง านวงจรเขา รหสั ขนั้ พน้ื ฐาน (ตอ งการอปุ กรณเฉพาะ)
4. Wire.h ไลบรารสี าํ หรบั ติดตอกบั อปุ กรณร ะบบบสั 2 สายและบัส I2C
5.SoftwareSerial.hไลบรารสี าํ หรบั สอ่ื สารขอ มลู อนกุ รมกบั อปุ กรณภ ายนอกผา นทาง
ขาพอรตดิจิตอลปกติ
6. OneWire.h ไลบรารสี าํ หรบั ติดตอกบั อปุ กรณบ สั หนงึ่ สาย (เปนไลบรารเี สรมิ )
ในการเรียนรูเพื่อใชงานแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE)
จะใชไฟลไ ลบรารที ง้ั แบบมาตรฐานท่ีมากับซอฟตแวร Arduino1.x และไฟลไลบรารี 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++ ลง เนื่องจากมกี ารเรียกใชงานฟง กชัน่ หรอื ชดุ คําสัง่ เทาท่ีจาํ เปน
ในหวั ขอ ตอ ไปนเ้ี ปน การอธบิ ายถงึ ขอ มลู ทผ่ี พู ฒั นาโปรแกรมสาํ หรบั ชดุ กลอ งสมองกล IPST-
MicroBOX (SE) ควรทราบเก่ยี วกับฟง กชนั่ สําคัญทอ่ี ยใู นไฟลไ ลบรารยี อยของไลบรารหี ลกั ipst.h
74 Arduino IDE
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 // หนวงเวลาประมาณ 20 มิลลวิ นิ าที
// หนวงเวลาประมาณ 1 วนิ าที
sleep(20);
delay(1000);
5.4.2 delay_us
เปนฟง กชั่นหนว งเวลาโดยประมาณภายในโปรแกรมในหนว ยไมโครวินาที
รูปแบบ
void delay_us(unsigned int us)
พารามเิ ตอร
us - กําหนดคาเวลาท่ีตอ งการหนวงในหนวยไมโครวินาที มคี า 0 ถงึ 65,535
ตัวอยางที่ 5-2
delay_us(100); // หนวงเวลาประมาณ 100 ไมโครวนิ าที
Arduino IDE75
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 มิลลิวนิ าที
76 Arduino IDE
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 // ประกาศตวั แปร x เพอื่ เกบ็ คาผลลัพธจ าการอานคาระดบั สญั ญาณ
// อา นคาดจิ ติ อลจากพอรต หมายเลข 16 แลวเกบ็ คาไวท ตี่ ัวแปร x
char x;
x = in(16);
5.6.2 out
เปนฟงกช่ันกําหนดระดับสัญญาณหรือขอมูลดิจิตอลไปยังขาพอรตท่ีกําหนด
รูปแบบ
out(char _bit,char _dat)
พารามเิ ตอร
_bit - กําหนดขาพอรต ท่ีตอ งการ มีคา 0 ถงึ 50 สาํ หรบั IPST-SE ใชไดถงึ 30
_dat - กําหนดขอ มลู ที่ตอ งการสง ออก มคี าเปน 0 หรอื 1
ตัวอยา งที่ 5-6 // กาํ หนดใหข าพอรต 17 เปน “1”
// กาํ หนดใหข าพอรต 18 เปน “0”
out(17,1);
out(18,0);
Arduino IDE77
5.5.3 sw1_press
เปน ฟง กช่นั วนตรวจสอบการกดสวติ ช SW1 บนแผงวงจร IPST-SE ตองรอจนกระทั่ง SW1
ถูกปลอยหลงั จากมีการกดสวติ ช จึงจะผานพน การทํางานของฟงกช่นั นี้ไป
รูปแบบ
void sw1_press()
ตัวอยา งที่ 5-7 // รอจนกระทั่งสวติ ช SW1 ถูกกดและปลอ ย
............
sw1_press();
................
5.5.4 sw1
เปนฟง กช่ันตรวจสอบการกดสวติ ช SW1 ในขณะใดๆ
รูปแบบ
char sw1()
การคนื คา
เปน “0” เมอ่ื สวิตช SW1 ถกู กด และ เปน “1” เมื่อไมมกี ารกดสวิตช SW1
ตัวอยา งที่ 5-8 // ประกาศตัวแปร x เพอื่ เกบ็ คาผลลพั ธจ ากการอา นคาดจิ ิตอล
// อา นคาสถานะของสวติ ช SW1 มาเกบ็ ไวท ตี่ ัวแปร x
char x;
x = sw1();
78 Arduino IDE
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
Arduino IDE79
ตัวอยา งที่ 5-9
#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
int val=0; // กาํ หนดตวั แปรสาํ หรบั เก็บคาท่ีไดจ ากการแปลงสัญญาณแลว
void setup()
{
glcdClear();
setTextSize(2); // เลอื กขนาดตัวอกั ษรใหญเปน 2 เทา จากขนาดปกติ
}
void loop()
{
glcd(1,0,"AnalogTest"); // แสดงขอ ความท่ีจอแสดงผล
val = analog(2); // อานคาของสัญญาณชอ ง A2 มาเก็บไวท ต่ี ัวแปร val
setTextSize(3); // เลอื กขนาดตัวอักษรใหญเปน 3 เทา จากขนาดปกติ
glcd(2,2,"%d ",val); // แสดงคา ที่อา นไดจากจดุ ตอ A2 ทห่ี นาจอแสดงผล
setTextSize(2); // เลอื กขนาดตัวอักษรใหญเ ปน 2 เทา จากขนาดปกติ
}
POTENTIOMETER
ZX-POTV 28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
A 24 A0 30 A6 27 A3
DC MOTORD
KNOB ON
15 SV0 14 SV1 13 SV2 12 SV3OK0 0000000000
SW1 G
AnalogTest000000000000000000000 6V
12
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
G
543000000000000000000000 6V
14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
80 Arduino IDE
5.6.2 knob( )
เปนฟงกช่ันอานคาขอมูลท่ีไดจากการแปลงสัญญาณไฟฟาที่ขาพอรต A7 ซ่ึงตอกับตัวตาน
ทานปรบั คาไดท ่ตี ําแหนง KNOB
รูปแบบ
unsigned int knob()
การคนื คา
เปน ขอ มลู ทไ่ี ดจ ากการแปลงสญั ญาณไฟฟา ทมี่ าจากการปรบั คา ทป่ี มุ KNOB บนแผงวงจร IPST-
SE มคี า 95 ถงึ 1,023
ตัวอยา งท่ี 5-10 // ผนวกไฟลไ ลบรารหี ลกั
#include <ipst.h> // เลอื กขนาดตัวอกั ษรใหญเปน 2 เทา จากขนาดปกติ
void setup()
{ // แสดงขอ ความที่จอแสดงผล
// เลอื กขนาดตัวอกั ษรใหญเ ปน 3 เทา จากขนาดปกติ
glcdClear(); // แสดงคา ท่ีอานไดจ ากปุม KNOB ทจ่ี อแสดงผล
setTextSize(2); // เลอื กขนาดตัวอักษรใหญเ ปน 2 เทา จากขนาดปกติ
}
void loop()
{
glcd(1,0," KnobTest");
setTextSize(3);
glcd(2,2,"%d ",knob());
setTextSize(2);
}
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB DC MOTOR ON
0 0000000000
OK 15 SV0 14 SV1 13 SV2 12 SV3 G
KnobTest000000000000000000000 6V
SW1 12
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
G
958000000000000000000000 6V
14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
Arduino IDE81
5.6.3 sw_OK()
เปน ฟง กช นั่ ตรวจสอบสถานะสวติ ช OK บนแผงวงจร IPST-SE โดยใหส ถานะ “เปน จรงิ ” เมอ่ื
มีการกดสวติ ชและ “เปนเท็จ” เม่ือไมม ีการกดสวติ ช
รูปแบบ
unsigned char sw_ok()
การคนื คา 0 (เปนเท็จ) เม่ือไมมีการกดสวติ ช
1 (เปนจรงิ ) เมื่อมีการกดสวิตช
หมายเหตุ การกดสวิตช OK มผี ลทาํ ใหค าท่อี านไดจาก knob() เปน 0 ดวย
ตัวอยางท่ี 5-11 // ผนวกไฟลไ ลบรารหี ลกั
#include <ipst.h> // ตรวจสอบการกดสวติ ช OK
void setup() // เปลีย่ นสีพนื้ เปน สเี หลอื ง
{ // แสดงสีพนื้ ใหมน าน 3 วนิ าที
// เคลยี รห นาจอแสดงผล กาํ หนดพน้ื หลงั เปน สดี าํ
glcdClear();
}
void loop()
{
if (sw_OK())
{
glcdFillScreen(GLCD_YELLOW);
delay(3000);
}
glcdClear();
}
5.6.4 sw_OK_press()
เปน ฟง กชนั่ วนตรวจสอบการกดสวติ ช OK บนแผงวงจร IPST-SE ตองรอจนกระทั่งสวติ ชถกู
ปลอยหลังจากการกดสวิตชจึงจะผานฟงกช่ันน้ีไปกระทําคําส่ังอ่ืนๆ
ตัวอยางท่ี 5-12 // รอจนกระทง่ั เกดิ กดสวติ ช OK
............
sw_OK_press();
.............
82 Arduino IDE
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
76 5 4 3 2 10
MSB LSB
LED8
+5V
Serial LED-8 RxD
GND
UART communication DC MOTOR
9600 bps. Baud 15 SV0 14 SV1 13 SV2 12 SV3
Secondary Education
28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
Rowl00World0000000000
KNOB 0Row01000000000000000 ON
OK 00Row0200000000000000
SW1 000Row030000000000000 G
0000Row04000000000000 6V
00000Row0500000000000 12
G
000000R00060000000000 6V
0000000R0007000000000 13
G
00000000Row0800000000 6V
000000000Row090000000 14
0000000000Row01000000 G
00000000000Row0110000 6V
000000000000Row012000 15
0000000000000Row01300
00000000000000Row0140 SERVO
000000000000000Row015
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
รปู ที่ 5-1 การเช่ือมตอ เพื่อใชงานแผงวงจร ZX-LED8 ของแผงวงจร IPST-SE เพ่ือขับ LED 8 ดวง
Arduino IDE83
5.7.2 pinLED8
เปน ฟง กช นั่ กําหนดจุดตอพอรต ของแผงวงจร IPST-SE ท่ีตองการเชือ่ มตอกับแผงวงจร ZX-
LED8
รูปแบบ
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() // ใชจดุ ตอพอรต 20 ในการตอกบั แผงวงจร ZX-LED8
{
// แสดงคา เลขฐานสอง 8 บิต (00000000 ถึง 11111111)
pinLED8(20); // หนวงเวลา 0.5 วนิ าที
}
void loop()
{
unsigned char i=0;
while(1)
{
LED8(i++);
delay(500);
}
}
84 Arduino IDE
ตวั อยา งที่ 5-15 // ผนวกไฟลไ ลบรารหี ลกั
#include <ipst.h> // เลอื กจุดตอพอรต 20 ในการเช่ือมตอกบั แผงวงจร ZX-LED8
void setup() // แลวแสดงคา เลขฐานสอง 8 บิต (00000000 ถึง 11111111)
{} // หนวงเวลา 0.5 วนิ าที
void loop()
{
unsigned char i=0;
while(1)
{
LED8(20,i++);
delay(500);
}
}
76543210
76543210
MSB LSB
LED8 +5V
RxD
Serial LED-8 GND
UART communication
9600 bps. Baud
Secondary Education
76543210
76543210
MSB LSB
LED8 +5V
RxD
Serial LED-8 GND
UART communication
9600 bps. Baud
Secondary Education
76543210
76543210
MSB LSB
LED8 +5V
RxD
Serial LED-8 GND
UART communication
9600 bps. Baud
Secondary Education
76543210
76543210
MSB LSB
LED8 +5V
RxD
Serial LED-8 GND
UART communication
9600 bps. Baud
Secondary Education
Arduino IDE85
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
28 A4 25 A1 8 SCL 9 SDA
#include <ipst.h> // ผนวกไลบรารหี ลกั 29 A5 26 A2 USB
24 A0 30 A6 27 A3
void setup() D
{} Rowl00World0000000000 ON
0Row01000000000000000
void loop() 00Row0200000000000000 DC MOTOR G
000Row030000000000000 6V
{ KNOB 0000Row04000000000000 15 SV0 14 SV1 13 SV2 12 SV312
00000Row0500000000000 G
motor(1,60); // ขบั มอเตอรช องที่ 1 ดว ย OK 000000R00060000000000 6V
0000000R0007000000000 13
00000000Row0800000000 G
000000000Row090000000 6V
0000000000Row01000000 14
00000000000Row0110000 G
000000000000Row012000 6V
0000000000000Row01300 15
00000000000000Row0140
000000000000000Row015 SERVO
// กาํ ลงั 60% SW1
delay(500); // ขบั นาน 0.5 วนิ าที 16 18 UART1 LOW 12
motor(1,-60); // ขบั มอเตอรช องท่ี 1 17 19 +5
20 RESET 2 RxD1 3 TxD1
// กลบั ทิศทางดวยกาํ ลงั 60%
delay(500); // ขบั นาน 0.5 วนิ าที
}
86 Arduino IDE
5.8.2 motor_stop
เปนฟงกชั่นหยุดขับมอเตอร
รูปแบบ
void motor_stop(char _channel)
พารามเิ ตอร
_channel - กําหนดชองเอาตพ ุตมอเตอรไ ฟตรง มคี า 1, 2 และ ALL
โดย ALLเปนการเลอื กใหมอเตอรท ้ังหมดหยดุ ทาํ งาน
ตัวอยางท่ี 5-17
#include <ipst.h> // ผนวกไลบรารหี ลกั
void setup()
{ // ตรวจสอบการกดสวติ ช OK
sw_OK_press(); // มอเตอร 1 หมุนดว ยกาํ ลงั ไฟฟา 60%
} // หนวงเวลา 0.5 วนิ าที
void loop() // มอเตอร 1 หมุนกลบั ทิศดว ยกาํ ลงั ไฟฟา 60%
{ // หนวงเวลา 0.5 วนิ าที
// ตรวจสอบการกดสวติ ช SW1
motor(1,60); // ถาสวติ ช SW1 ถูกกด มอเตอรชอง 1 หยดุ หมนุ
delay(500);
motor(1,-60);
delay(500);
if (sw1())
{
motor_stop(1);
while (1);
}
}
Arduino IDE87
ตัวอยางท่ี 5-18 // ผนวกไฟลไ ลบรารหี ลกั
#include <ipst.h> // ขบั มอเตอรช อง 1 ดว ยกาํ ลงั 50% ของกาํ ลงั สงู สดุ
void setup() // ขบั มอเตอรช อง 2 ดว ยกาํ ลงั 50% ของกาํ ลงั สงู สดุ
{} // หนวงเวลา 3 วนิ าที
void loop() // ขบั มอเตอรช อง 1 กลบั ทิศทางดวยกาํ ลงั 50% ของกาํ ลงั สูงสดุ
{ // ขบั มอเตอรช อง 2 กลบั ทิศทางดว ยกาํ ลงั 50% ของกาํ ลงั สูงสดุ
// หนวงเวลา 3 วนิ าที
motor(1,50); // หยดุ ขบั มอเตอรท งั้ สองชอง
motor(2,50); // หนวงเวลา 3 วนิ าที
sleep(3000);
motor(1,-50);
motor(2,-50);
sleep(3000);
motor_stop(ALL);
sleep(3000);
}
28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB DC MOTOR ON
OK Rowl00World0000000000
SW1 0Row01000000000000000 15 SV0 14 SV1 13 SV2 12 SV3 G
00Row0200000000000000 6V
000Row030000000000000 12
0000Row04000000000000 G
00000Row0500000000000 6V
000000R00060000000000 13
0000000R0007000000000 G
00000000Row0800000000 6V
000000000Row090000000 14
0000000000Row01000000 G
00000000000Row0110000 6V
000000000000Row012000 15
0000000000000Row01300
00000000000000Row0140 SERVO
000000000000000Row015
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
88 Arduino IDE
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> // ขบั เซอรโ วมอเตอรช อง 0 ไปยงั ตาํ แหนง 60 องศา
void setup() // หนวงเวลา 5 วนิ าที
{} // ขบั เซอรโ วมอเตอรช อง 0 ไปยงั ตาํ แหนง 120 องศา
void loop() // หนวงเวลา 5 วนิ าที
{
servo(0,60);
delay(5000);
servo(0,120);
delay(5000);
}
Arduino IDE89
5.10 ipst_serial.h ไลบรารรี บั สงขอ มลู อนุกรม
เปนไฟลไลบรารีท่ีบรรจุชุดคําสั่งเก่ียวกับการรับสงขอมูลอนุกรมผานวงจรสื่อสารขอมูล
อนุกรม (UART) ของไมโครคอนโทรลเลอรบนแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-
MicroBOX (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
90 Arduino IDE
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() // หนวงเวลา 2 วนิ าที
{}
void loop()
{
uart("Hello IPST-MicroBOX (SE)!\r\n");
delay(2000);
}
ในการรนั โปรแกรมนตี้ อ งตอ สาย USB ระหวา งแผงวงจร IPST-SE กบั พอรต USB ของคอมพวิ เตอรไ วต ลอด
เวลา จากนั้นเปด หนา ตาง Serial Monitor โดยคลกิ ทปี่ มุ หรอื เลอื กเมนู Tools > Serial Monitor
Arduino IDE91
จากนั้นรอสักครู หนาตาง Serial Monitor จะปรากฏขน้ึ มา พรอ มกับแสดงขอ ความตามรูป ใหท าํ การ
คลกิ ทาํ เครือ่ งหมายท่ชี อง Auto Scroll และเลอื ก No line ending สวนชอ งสดุ ทา ยเลอื กเปน 9600 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 ในลําดบั ถัดไปทนั ที
92 Arduino IDE
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
Arduino IDE93
จากนั้นรอสกั ครู หนาตาง Serial Monitor จะปรากฏขึ้นมา ใหก ดปอ นตัวอักษร a ทชี่ องบนสดุ แลวคลกิ
กดปุม Send ทางขวามือ โดยทช่ี องดา นลางเลอื ก No line ending สวนชองสดุ ทา ยดา นลางขวามือเลอื กเปน 9600
Baud
เม่ือสงตัวอกั ษร a จากคอมพวิ เตอรไ ปยงั แผงวงจร IPST-SE แลว ทแี่ ผงวงจร IPST-SE จะตรวจสอบการเขา
มาของขอมูล หากถูกตอง จะแสดงขอ ความ Key a Active !
28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
0 0000000000
KNOB DC MOTOR ON
000000000000000000000
OK 000000000000000000000 15 SV0 14 SV1 13 SV2 12 SV3 G
6V
SW1 0K0e0y000a000A0c0t0i0v00e0!00000 12
G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
000000000000000000000
16 18 UART1 LOW 12
17 19 +5
20 RESET 2 RxD1 3 TxD1
94 Arduino IDE
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 // กาํ หนดอัตราบอดในการสอื่ สารเปน 19,200 บิตตอวนิ าที
uart1_set_baud(19200);
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 ทนั ที
Arduino IDE95
5.10.9 uart1_getkey
เปนฟงกชั่นอานขอมูลจากบัฟเฟอรต ัวรับของโมดูล UART1
รูปแบบ
char uart1_getkey(void)
การคืนคา
- เปน 0 เมื่อยังไมม กี ารรบั อกั ขระใดๆ
- เปนคาของอักขระท่ีรบั ไดในรปู แบบของรหัสแอสก้ี
1. เมอ่ื ตอ งการติดตอ กบั อุปกรณส ื่อสารขอมลู ไรส าย อาทิ โมดลู บลทู ูธ, โมดูล XBEE เปนตน
TXD1 Rx
Tx
RXD1
2. เมอ่ื ตอ งการสื่อสารขอ มลู ระหวางแผงวงจร IPST-SE 2 ชุด
28 A4 25 A1 8 SCL 9 SDA 28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB 29 A5 26 A2 USB
30 A6 27 A3 30 A6 27 A3 D
24 A0D
24 A0 0 0000000000
0 0000000000
ON 000000000000000000000 ON
000000000000000000000 000000000000000000000
000000000000000000000 000000000000000000000 G
000000000000000000000 000000000000000000000 6V
000000000000000000000 12
000000000000000000000 000000000000000000000 G
000000000000000000000 000000000000000000000 6V
000000000000000000000 000000000000000000000 13
000000000000000000000 000000000000000000000 G
000000000000000000000 000000000000000000000 6V
000000000000000000000 14
000000000000000000000 000000000000000000000 G
000000000000000000000 000000000000000000000 6V
000000000000000000000 000000000000000000000 15
000000000000000000000 000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
KNOB DC MOTORG KNOB
OK 6V OK
SW1 15 SV0 14 SV1 13 SV2 12 SV312SW1
UART1 DC MOTORG16 18
+5 6V
15 SV0 14 SV1 13 SV2 12 SV313
16 18 LOW 12 UART1 LOW 12
17 19 G +5
6V
14
G
6V
15
20 RESET 2 RxD1 3 TxD1 SERVO 17 19 20 RESET 2 RxD1 3 TxD1
3. เมอ่ื ตอ งการตดิ ตอ กบั อปุ กรณภ ายนอกทตี่ อ งการรปู แบบขอ มลู อนกุ รมในการสอ่ื สาร อาทิ แผงวงจรขบั เซอร
โวมอเตอร 16 ชอง (ZX-SERVO16i) , แผงวงจรโมดลู LCD แบบอนุกรม (SLCD16x2), แผงวงจรฐานเวลา
นาฬิกาจรงิ แบบอนุกรม (ZX-17)
96 Arduino IDE
Arduino IDE97
ในการพัฒนาโครงงานวิทยาศาสตรสมัยใหม ที่เกี่ยวของกับการเขียนโปรแกรมและตองมี
ระบบควบคุมอัตโนมัติเขามาเก่ียวของ รวมถึงตองมีการติดตอกับตัวตรวจจับ ซึ่งผูใชงานตองการ
ทราบถึงคาที่ตัวตรวจจับวัดหรือตรวจจับได อุปกรณตัวหน่ึงท่ีมีความสําคัญคือ อุปกรณแสดงผล
อุปกรณพ้ืนฐานที่สุดท่ีใชในการแสดงผลคือ LED หากตองการใหมีการแสดงผลเปนตัวเลข ก็๋จะ
เปลย่ี นมาใช LED ตัวเลข 7 สว น หากมคี วามตองการเพม่ิ ขนึ้ ไปอกี นน่ั คอื ตอ งการแสดงเปน ขอ ความ
เปนตัวอกั ษรจาํ นวนมากขึ้น โมดลู LCD แบบอกั ขระ (character LCD module) ก็จะเขามาทาํ หนา ที่
นี้
ในชุดกลองสมองกล IPST-MicroBOX Secondary Education (SE) รองรับทั้งการแสดงผล
ดวยอปุ กรณพ น้ื ฐานอยาง LED และจอแสดงผลแบบกราฟก LCD สี ทําใหช ุดกลองสมองกล IPST-
MicroBOX (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 รองรบั เพอ่ื ชว ยใหก ารเขยี นโปรแกรมเพอื่ กาํ หนดรปู แบบการ
แสดงผลทําไดหลากหลายแบบและสะดวกขึ้นอยางมาก
98 Arduino IDE
0123456789abcdefghijk
100000000000000000000
2000000000d0000000000
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 สจี ะไดร บั
การติดต้ังไปพรอมกับการติดต้ังซอฟตแวร Arduino IDE 1.7.10 แลว ไฟลไลบรารีช่ือ ipst_glcd.h
ไดร บั การคัดลอกลงในโฟลเดอร C:\Arduino17\libraries\IPST
การประกาศเพอ่ื ผนวกไฟลไ ลบรารนี ใี้ นโปรแกรมหรอื สเกต็ ชข อง Arduino 1.7.10 ทาํ ไดด งั น้ี
#include <ipst_glcd.h> หรือ #include <ipst.h>
Arduino IDE99
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)
0 e10l02l03o04005W06o07r08l09d0a00b00c00d00e00f00g00h00i 00j00k
1
H
300000000000000000000
400000000000000000000
500000000000000000000
600000000000000000000
700000000000000000000
800000000000000000000
900000000000000000000
a00000000000000000000
b00000000000000000000
c00000000000000000000
d00000000000000000000
e00000000000000000000
f00000000000000000000
100 Arduino IDE
ตวั อยา งที่ 6-2
int x=20;
glcd(1,2,”Value = %d”,x);
// แสดงตัวอกั ษรและตัวเลขบนบรรทดั เดยี วกนั เรม่ิ ตนที่คอลมั น 2 ของบรรทดั 1 (บรรทดั ที่ 2)
28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
Hello0World0000000000
00Value0=020000000000 ON
Hello0World0000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
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 // สง คา สี 16 บิตของสแี ดงใหต ัวแปร colors
// นําคา ไปแสดงเปน สพี น้ื ของจอแสดงผล
#include <ipst.h>
int colors;
void setup()
{
int colors;
colors=colorRGB(31,0,0);
glcdFillScreen(colors);
}
void loop()
{}