Unicon 141
ในการพัฒนาระบบไมโครคอนโทรลเลอรอุปกรณตัวหนึงที ่ มี่ ความสําคัญคือ อุปกรณแสดงผล อุปกรณ พื้นฐานที่สุดที่ใชในการแสดงผลคือ LED หากตองการใหมีการแสดงผลเปนตัวเลข ก็จะเปลี ๋ ่ยนมาใช LED ตัวเลข 7 สวน หากมีความตองการเพิมขึ ่ นไปอี ้ ก นันคื ่ อ ตองการแสดงเปนขอความ เปนตัวอักษรจํานวนมาก ขึน้ โมดูล LCD แบบอักขระ (character LCD module) ก็จะเขามาทําหนาที่นี้ สําหรับบอรด Unicon สามารถรองรับการใชงานรวมกับอุปกรณแสดงผลพื้นฐานทั้ง LED และโมดูล LCD สําหรับในบทนีเป ้ นการนําเสนอเกียวกั ่ บอุปกรณแสดงผลในอีกแบบหนึงที ่ ่มีความสามารถสูงขึน้ นันคื ่ อ โมดูลกราฟก LCD สี (color graphic LCD module) ซึ่งมาพรอมกับตัวตานทานปรับคาไดและสวิตชกด ภาย ใตชื่อวา บอรดแสดงผล GLCD-XT ในรูปที่ 6-1 แสดงสวนประกอบที่สําคัญของบอรด GLCD-XT
รูปที่ 6-1 แสดงสวนประกอบสําคัญของบอรดแสดงผล GLCD-XT
142
Unicon
้ มีโมดูลแสดงผลแบบกราฟกสี ความละเอียด 128 x 160 จุด ขนาด 1.8 นิว แสดงภาพกราฟกลายเสนและพืนสี ้ (ไมรองรับไฟลรูปภาพใดๆ) 65,536 สี พรอมไฟสองหลัง แสดงผลเปนตัวอักษรขนาดปกติ (5x7 จุด) ได 21 ตัวอักษร 16 บรรทัด (หรือ 21x16) มีสวิตชกดติดปลอยดับพรอมใชงาน (สวิตช OK) 1 จุด โดยตอรวมกับตัวตานทานปรับคาได
(KNOB)
ทําใหอานคาสัญญาณดิจิตอลและอะนาลอกไดในขาพอรตเดียวกัน วงจรสมบูรณของบอรด GLCD-XT แสดงในรูปที่ 6-2
+5V
GLCD 128x160 pixel
C14 10F 16V
21-character 16-line CS 17
+3.3V IC5 LM1117-3.3V
C16 10F 16V
C15 0.1 F
R11 4.7k
PB0 R13 4.7k
R12 4.7k
PB1
MISO 16
PB2
D/C 31
R15 4.7k
PE2
R17 4.7k
R14 4.7k
N/C GND CS Vcc Vcc CLK MISO D/C /RST GND LEDA LEDK GND N/C
CLK 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14
R16 4.7k
YYY
R9 4.7
+3.3V
8
VR1 KNOB
PB4 SW5 OK
+3.3V
R18 4.7k
รูปที่ 6-2 วงจรของบอรด GLCD-XT
C18 0.1F
PORT
+3.3V xx
+5V R11 1k
R10 4.7k RST C17 0.1F
D1 1N4148
SW3 RESET
R11 1k
Unicon 143
ในรูปที่ 6-3 แสดงการจัดขาเชื่อมตอทั้งหมด จะมีขาที่ใชงานจริงเพียง 11 ขา คือ CS, CLK, MISO, D/ C, PORT (OK/KNOB), RESET, +5V (2 ขา) และ GND หรือกราวด (3 ขา) เมื่อนํามาตอกับบอรด Unicon ขาทั้งหมดจะไดรับการเชือมต ่ อกับขาพอรตดังนี้ ขา GLCD-XT
ขาพอรตตามมาตรฐาน Arduino
ขาพอรตตามมาตรฐาน Atmel
CS CLK MISO D/C PORT R +
17 15 16 11 8 RESET +5V
PB0 PB2 PB1 PB0 PB1 RESET +5V
G
GND
GND
รูปที่ 6-3 การจัดขาของบอรด GLCD-XT (N/C เปนขาทีไม ่ มีการใชงาน)
144
Unicon
รูปที่ 6-4 แสดงการตอใชงาน GLCD-XT รวมกับบอรด Unicon การใชงาน GLCD-XT กับบอรด Unicon ใหดําเนินการดังนี้ (1) ปดไฟเลียง ้ (2) นํา GLCD-XT มาติดตั้งบนคอนเน็กเตอร IDC ตัวเมียที่ลอมรอบตัวชิปไมโครคอนโทรลเลอร ATmega32U4 โดยมีทิศทางตามรูปที่ 6-4 หลังจากติดตังเพื ้ อเชื ่ อมต ่ อเสร็จแลว สวิตช RESET ของบอรเด Unicon เดิมจะถูกบัง ตองเปลียนมาใช ่ สวิตช RESET บนบอรด GLCD-XT แทน (3) ในการเชื่อมตอกับพอรต USB จะตองเปดสวิตชเพือจ ่ ายไฟใหแกบอรด Unicon แลวรอสักครู เพือ่ ใหตัวควบคุมพรอมทํางานเสียกอน สังเกตจาก LED สีนําเงิ ้ นจะติดกะพริบถี่ๆ อยูครู หนึ่ง จากนั้นจะติดคาง
ผูผลิ ตไดเตรียมไฟลไลบรารีสําหรับใชงาน Unicon กับ GLCD-XT ไวแลว หลังจากติดตั้งซอฟตแวร Arduino1.0x สําหรับบอรด Unicon แลว ไฟลไลบรารีนี้ จะไดรับการคัดลอกลงในโฟลเดอร C:\arduino\l ibraries\uniconโดยประกอบดวย 3ไฟลหลักคือ glcd.h, GCLCD.h และ glcdfont.c ในการประกาศเพือผนวกไฟล ่ ไลบรารีนีในโปรแกรมหรื ้ อสเก็ตชของ Arduino1.0 ทําไดดังนี้ #include <glcd.h>
หรือ
#include <unicon.h>
Unicon 145
6.3.1 ฟงกชั่นเกียวกั ่ บการแสดงผลจอภาพแบบกราฟก LCD สี 6.3.1.1 glcd เปนฟงกชั่นแสดงขอความที่หนาจอแสดงผลกราฟก LCD สี โดยแสดงตัวอักษรขนาดปกติได 21 ตัวอักษร 16 บรรทัด รูปแบบ void glcd(unsigned char x, unsigned char y ,char *p,...)
พารามิเตอร ้ 0 ถึง 15 x คือตําแหนงบรรทัดมีคาตังแต 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) // ทีตํ 100 F HelloRWorld RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRRRow07
ตัวอยางที่ 6-2 int x=20; glcd(1,2,”Value = %d”,x);
// แสดงตัวอักษรและตัวเลขบนบรรทัดเดียวกัน // เริ่มตนที่คอลัมน
Row00 RRValueR=R20 RRRow02 RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRRRow07
100 F
2 ของบรรทัด 1 (บรรทัดที่ 2)
146
Unicon
6.3.1.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 #include <unicon.h> int colors; void setup() { int colors; colors=colorRGB(31,0,0);
//
glcdFillScreen(colors); } void loop() {}
//
100 F
ATMega32U4
Row00 RRValueR=R20 RRRow02 RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRRRow07 RRRRRRRRRow08 RRRRRRRRRRow09 RRRRRRRRRRRow010 RRRRRRRRRRRRow011 RRRRRRRRRRRRRow012 RRRRRRRRRRRRRRow013 RRRRRRRRRRRRRRRow014 RRRRRRRRRRRRRRRRow015
สงคาสี 16 บิตของสีแดงใหตัวแปร colors นําคาไปแสดงเปนสีพืนของจอแสดงผล ้
100
220 F
TB6612
Unicon 147
6.3.1.3 color[ ] เปนตัวแปรอะเรยที่ใชกําหนดสีจํานวน 8 สีที่เปนสีพืนฐาน ้ ผูพั ฒนาโปรแกรมสามารถเรียกใชตัวแปร color[] หรือเรียกใชชื่อสีตรงๆ ก็ได รูปแบบ unsigned int color[]= { GLCD_RED, GLCD_GREEN, GLCD_BLUE, GLCD_YELLOW, GLCD_BLACK, GLCD_WHITE, GLCD_SKY, GLCD_MAGENTA};
พารามิเตอร GLCD_RED - ใชกําหนดสีแดง GLCD_GREEN - ใชกําหนดสีเขียว GLCD_BLUE - ใชกําหนดสีนําเงิ ้ น GLCD_YELLOW - ใชกําหนดสีเหลือง GLCD_BLACK - ใชกําหนดสีดํา GLCD_WHITE - ใชกําหนดสีขาว GLCD_SKY - ใชกําหนดสีฟา GLCD_MAGENTA - ใชกําหนดสีบานเย็น ตัวอยาง 6-4 glcdFillScreen(color[5])
//
กําหนดใหพืนหลั ้ งเปนสีขาว
//
กําหนดใหพืนหลั ้ งเปนสีนําเงิ ้ น
ตัวอยาง 6-5 glcdFillScreen(GLCD_BLUE)
6.3.1.4 setTextColor เปนการกําหนดคาสีของตัวอักษรที่แสดงดวยฟงกชั่น glcd() โดยคาตั้งตนกําหนดเปนสีขาว รูปแบบ void setTextColor(unsigned int newColor)
พารามิเตอร ่ องการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ่ าหนดคาไวแลวจากตัวแปร color[] newColor คือสีทีต ตัวอยางที่ 6-6 setTextColor(GLCD_YELLOW); // กําหนดใหสีของตัวอักษรเปนสีเหลือง
148
Unicon
6.3.1.5 setTextBackgroundColor เปนฟงกชันกํ ่ าหนดสีของพืนหลั ้ งตัวอักษร โดยคาตังต ้ นเปนสีดํา สีของพืนหลั ้ งตัวอักษรจะเปนคนละ สวนกับสีของพื้นจอภาพ (screen background) ซึ่งตองกําหนดคาผานฟงกชั่น glcdFillScreen รูปแบบ void setTextBackgroundColor(unsigned int newColor)
พารามิเตอร ่ องการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ่ าหนดคาไวแลวจากตัวแปร color[] newColor คือสีทีต ตัวอยางที่ 6-7 setTextBackgroundColor(GLCD_GREEN); // กําหนดใหสีพืนหลั ้ งตัวอักษรเปนสีเขียว
Hellofworldlmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo abcdefghijklmnooooooo
Unicon 149
6.3.1.6 glcdClear เปนการเคลียรหนาจอแสดงผล โดยสีของพืนหลั ้ งจะเปนสีพืนหลั ้ งของตัวอักษรลาสุด โดยถาไมไดกําหนดดวย คําสัง่ setTextBackGroundColor() มากอนหนานีหลั ้ งจากทําคําสัง่ glcdClear()แลวพืนหลั ้ งจะเปนสีดํา รูปแบบ void glcdClear()
ตัวอยางที่ 6-8 glcdClear();
// เคลียรหนาจอแสดงผล
6.3.1.7 glcdFillScreen เปนการเคลียรหนาจอแสดงผล แลวเปลียนสี ่ พืนหลั ้ งของจอแสดงผลดวยสีที่ระบุ รูปแบบ void glcdFillScreen(unsigned int color)
พารามิเตอร Color คือสีทีต ่ องการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ่ าหนดคาไวแลวจากตัวแปร color[] ตัวอยางที่ 6-9 glcdFillScreen(GLCD_BLUE); // กําหนดสีพืนหลั ้ งของจอภาพเปนสีนําเงิ ้ น
150
Unicon
6.3.1.8 glcdMode เปนการกําหนดทิศทางแสดงผลของ GLCD-XT โดยกําหนดใหขอความหรือภาพหนาจอใหแสดงภาพตัง้ ฉากตรงหนา (โหมด 0), หมุนขวา 90 องศา (โหมด 1), หมุน 180 องศาหรือกลับหัว (โหมด 2) และหมุน 270 องศา (โหมด 3) รูปแบบ glcdMode(unsigned int modeset)
พารามิเตอร modeset คือคาทิศทางของการหมุนมีคา 0 ถึง 3 โดยใชแทนทิศทาง 0 องศา 90 องศา 180 องศา หรือ 270 องศา โดยเมื่อเริ่มตนคาทิศทางคือ 0 องศา ทํางานอยูในแนวตั้ง
ตัวอยางที่ 6-10 #include <unicon.h> void setup() { setTextSize(2); } void loop() { glcdClear(); glcdMode(0); glcd(0,0,"Unicon"); sw_ok_press(); glcdClear(); glcdMode(1); glcd(0,0,"Unicon"); sw_ok_press(); glcdClear(); glcdMode(2); glcd(0,0,"Unicon"); sw_ok_press(); glcdClear(); glcdMode(3); glcd(0,0,"Unicon"); sw_ok_press(); }
//
ขนาดตัวอักษร 2 เทา
// // // //
เคลียรหนาจอ โหมด 0 องศา แสดงขอความ รอกดสวิตชเขาโหมดตอไป
Unicon 151
6.3.1.9 setTextSize เปนการกําหนดขนาดตัวอักษรโดยระบุเปนจํานวนเทาของขนาดปกติ คาตั้งตนเมื่อเริมทํ ่ างานทุกครัง้ คือ ขนาดตัวอักษรปกติ ใชพืนที ้ ่รวมระยะชองไฟคือ 6x10 พิกเซลตอ 1 ตัวอักษร จึงแสดงได 21 ตัวอักษร 16 บรรทัดในแนวตั้ง รูปแบบ setTextSize(unsigned int newSize)
พารามิเตอร newSize คือคาขนาดจํานวนเทาของขนาดปกติ มีคา 1 ถึง 16 เพือให ่ ตัวอักษรที่แสดงไมลนหนาจอ ตัวอยางที่ 6-11 #include <unicon.h> void setup() { setTextSize(1); setTextColor(GLCD_GREEN);
//
glcd(0,0,"Size1"); setTextSize(2); glcd(1,0,"Size2"); setTextSize(3);
//
กําหนดขนาดขอความ 1 เทา สีตัวอักษรเปนสีเขียว แสดงขอความ
//
กําหนดขนาดขอความ 2 เทา
glcd(2,0,"Size3"); setTextSize(4); glcd(3,0,"Size4");
//
กําหนดขนาดขอความ 3 เทา
//
กําหนดขนาดขอความ 4 เทา
} void loop() {}
//
152
Unicon
6.3.1.10 getTextColor เปนคําสั่งคืนคาสีปจจุบันของตัวอักษร รูปแบบ unsigned int getTextColor()
การคืนคา textColor เปนคาสีแสดงอยูในรูปของตัวเลข 16 บิต
ดูรูปแบบไดจากฟงกชั่น colorRGB()
ตัวอยางที่ 6-12 unsigned int color; color=getTextColor();
//
นําคาสีของตัวอักษรเก็บไวทีตั่ วแปร color
6.3.1.11 getTextBackgroundColor เปนคําสั่งคืนคาสีพืนหลั ้ งของตัวอักษรในปจจุบัน รูปแบบ unsigned int getTextBackgroundColor()
การคืนคา ปของตัวเลข 16 บิต ดูรูปแบบไดจากฟงกชัน่ colorRGB() textBackgroundColor เปนคาสีแสดงอยูในรู ตัวอยางที่ 6-13 unsigned int color; color=getTextBackgroundColor();
้ งของตัวอักษรเก็บในตัวแปร color // นําคาสีพืนหลั
6.3.1.12 getTextSize คืนคาขนาดของตัวอักษรออกมาเปนจํานวนเทาของคาปกติ รูปแบบ unsigned int getTextSize()
การคืนคา เปนคาจํานวนเทาของขนาดตัวอักษร ตัวอยางที่ 7-14 textSize
unsigned int textSize; textSize=getTextSize(); // นําคาจํานวนเทาของขนาดของตัวอักษรเก็บในตัวแปร textSize
Unicon 153
6.3.1.13 glcdGetMode เปนคําสั่งคืนคาของโหมดทิศทางการแสดงผลในปจจุบัน รูปแบบ unsigned int glcdGetMode()
การคืนคา ่ ศทาง 0 องศา, หมุน mode เปนคาของโหมดทิศทางการแสดงผล เปนตัวเลข 0 ถึง 3 เพือแสดงผลในทิ 90 องศา, หมุน 180 องศา และหมุน 270 องศาตามลําดับ ตัวอยางที่ 6-15 unsigned int Mode; Mode=glcdGetMode();
//
คืนคาทิศทางการแสดงผลของหนาจอ GLCD
6.3.1.14 glcdPixel เปนคําสั่งพล็อตจุดบนจอภาพตามพิกัดที่กําหนด โดยอางอิงจอภาพขนาด 128 x 160 พิกเซล รูปแบบ void glcdPixel(unsigned int x,unsigned int y,unsigned int color)
พารามิเตอร x คือคาพิกัดในแนวนอนหรือแกน x มีคาระหวาง 0 ถึง 127 y คือคาพิกัดในแนวตั้งหรือแกน y มีคาระหวาง 0 ถึง 159 color คือคาของสีทีต่ องการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ่ าหนดคาไวแลวจากตัวแปร color[] ตัวอยางที่ 6-16 #include <unicon.h> int i; void setup() { for (i=0;i<128;i+=4) { glcdPixel(i,80,GLCD_RED); //
พล็อตจุดทุกๆ 4 พิกเซลในแนวแกน x กลางจอ
} for (i=0;i<160;i+=4) { glcdPixel(64,i,GLCD_RED); //
พล็อตจุดทุกๆ 4 พิกเซลในแนวแกน y กลางจอ
} } void loop() {}
154
Unicon
6.3.1.15 glcdRect เปนฟงกชั่นลากเสนจากพิกัดที่กําหนดมายังพิกัดปลายทาง รูปแบบ void glcdRect(unsigned int x1,unsigned int y1,unsigned int width,unsigned int height,unsigned int color)
พารามิเตอร ่ นของรูปสีเหลี ่ ยมในแกน ่ x มีคาระหวาง 0 ถึง 127 x1 คือ คาตําแหนงเริมต y1 คือ คาตําแหนงเริมต ่ นของรูปสีเหลี ่ ยมในแกน ่ y มีคาระหวาง 0 ถึง 159 ่ ยม ่ (แนวนอน) มีคาระหวาง 1 ถึง 128 width คือ คาความกวางของรูปสีเหลี height คือ คาความสูงของรูปสีเหลี ่ ยม ่ (แนวตั้ง) มีคาระหวาง 1 ถึง 158 color คือ สีของเสน เปนคาตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ ่ าหนดคาไวแลวจากตัวแปร color[] ตัวอยางที่ 6-17 #include <unicon.h> void setup() { glcdRect(32,40,64,80,GLCD_RED); //
วาดรูปสีเหลี ่ ยมเส ่ นสีแดง ขนาด 64 x 80 พิกเซล
} void loop() {}
Unicon 155
6.3.1.16 glcdFillRect เปนการระบายสีพืนของรู ้ ปสีเหลี ่ ยม ่ โดยกําหนดจุดเริมต ่ นและความกวางยาวของรูปสีเหลี ่ ยมที ่ ต่ องการ ฟงกชันนี ่ เป ้ นการสรางรูปสีเหลี ่ ยมที ่ มี่ สีพืนแต ้ ไมมีเสนกรอบ ในขณะทีฟ่ งกชัน่ glcdRect เปนการวาดรูปกรอบ สี่เหลียมที ่ ่กําหนดสีของเสนกรอบได แตภายในกรอบไมมีสี รูปแบบ void glcdFillRect(unsigned int x1, unsigned int y1, unsigned int width, unsigned int height,unsigned int color)
พารามิเตอร x1 คือ คาตําแหนงเริมต ่ นของรูปสีเหลี ่ ยมในแกน ่ x มีคาระหวาง 0 ถึง 127 y1 คือ คาตําแหนงเริมต ่ นของรูปสีเหลี ่ ยมในแกน ่ y มีคาระหวาง 0 ถึง 159 ่ ยม ่ (แนวนอน) มีคาระหวาง 1 ถึง 128 width คือ คาความกวางของรูปสีเหลี height คือ คาความสูงของรูปสีเหลี ่ ยม ่ (แนวตั้ง) มีคาระหวาง 1 ถึง 158 ่ าหนดคาไวแลวจากตัวแปร color[] color คือ สีของเสน เปนคาตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ ตัวอยางที่ 6-18 #include <unicon.h> void setup() { glcdFillRect(32,40,64,80,GLCD_RED); //
สรางภาพสี่เหลียมพื ่ นสี ้ แดง ขนาด 64 x 80 พิกเซล
} void loop() {}
156
Unicon
6.3.1.17 glcdLine เปนฟงกชันลากเส ่ นจากจุดหนึงไปยั ่ งอีกจุดหนึง่ กําหนดเปนพิกัดในแนวแกนนอน (x) และแกนตัง้ (y) รูปแบบ void glcdLine(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned int color)
พารามิเตอร ่ นของเสนบนแกน x มีคาระหวาง 0 ถึง 127 x1 คือคาตําแหนงเริมต y1 คือคาตําแหนงเริมต ่ นของเสนบนแกน y มีคาระหวาง 0 ถึง 159 ้ ดของเสนบนแกน x มีคาระหวาง 0 ถึง 127 x2 คือคาตําแหนงสินสุ y2 คือคาตําแหนงสินสุ ้ ดของเสนบนแกน y มีคาระหวาง 0 ถึง 159 color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ ่ าหนดคาไวแลวจากตัวแปร color[] ตัวอยางที่ 6-19 #include <unicon.h> void setup() { glcdLine(0,0,127,159,GLCD_RED); //
ลากเสนสีแดงทแยงมุมจากดานบนซายลงมาดานลางขวา
} void loop() {}
Unicon 157
6.3.1.18 glcdCircle เปนฟงกชันวาดเส ่ นรูปวงกลมจากการกําหนดจุดกึ่งกลางของวงกลมและความยาวของรัศมี รูปแบบ void glcdCircle(unsgined int x, unsgined int y, unsgined int radius,unsgined int color)
พารามิเตอร x คือ พิกัดจุดศูนยกลางของวงกลมบนแกน x มีคาระหวาง 0 ถึง 127 y คือ พิกัดจุดศูนยกลางของวงกลมบนแกน y มีคาระหวาง 0 ถึง 159 radius คือ คารัศมีของวงกลม color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ ่ าหนดคาไวแลวจากตัวแปร color[] ตัวอยางที่ 6-20 #include <unicon.h> void setup() { glcdCircle(32,120,31,GLCD_MAGENTA); //
สรางเสนวงกลมสีบานเย็น มีรัศมี 31 พิกเซล
} void loop() {}
158
Unicon
6.3.1.19 glcdFillCircle เปนฟงกชันวาดรู ่ ปวงกลมทีมี่ สีพืนจากการกํ ้ าหนดจุดศูนยกลางของวงกลมและความยาวของรัศมี ฟงก ชั่นนีเป ้ นการสรางรูปวงกลมที่มีสีพืนแต ้ ไมมีเสนกรอบ ในขณะที่ฟงกชั่น glcdCircle เปนการวาดรูปวงกลมที่ กําหนดสีของเสนรอบวงได แตภายในวงกลมไมมีสี รูปแบบ void glcdFillCircle(unsigned int x,unsigned int y,unsigned int radius,unsigned int color)
พารามิเตอร x คือ พิกัดจุดศูนยกลางของวงกลมบนแกน x มีคาระหวาง 0 ถึง 127 y คือ พิกัดจุดศูนยกลางของวงกลมบนแกน y มีคาระหวาง 0 ถึง 159 radius คือ คารัศมีของวงกลม color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรทีกํ ่ าหนดคาไวแลวจากตัวแปร color[] ตัวอยางที่ 6-21 #include <unicon.h> void setup() { glcdFillCircle(32,120,31,GLCD_MAGENTA); // สรางรูปวงกลมพื้นสีบานเย็น รัศมี 31 พิกเซล } void loop() {}
Unicon 159
6.3.1.20 glcdArc เปนฟงกชั่นวาดสวนโคงของวงกลม โดยระบุตําแหนงจุดกึ่งกลาง รัศมี ตําแหนงจุดเริม่ จุดสิ้นสุดและ สีของเสน รูปแบบ void glcdArc(unsigned int x,unsigned int y,unsigned int r,int start_angle,int end_angle,uint color)
พารามิเตอร x คือตําแหนงจุดกึ่งกลางในแนวแกน x y คือตําแหนงจุดกึ่งกลางในแนวแกน y r คือรัศมีของเสนโคง start_angle คือตําแหนงมุมของจุดเริ่มตนของวงกลม end_angle คือตําแหนงมุมจุดสิ้นสุดของวงกลม color คือสีของเสนวงกลม ตัวอยางที่ 6-22 #include <unicon.h> void setup() { glcdArc(48,80,16,30,150,GLCD_RED); glcdCircle(48,75,5,GLCD_BLUE); glcdCircle(80,75,5,GLCD_BLUE); glcdArc(80,80,16,30,150,GLCD_RED); glcdFillCircle(64,90,7,GLCD_GREEN); glcdArc(64,100,30,220,320,GLCD_RED); } void loop() {}
160
Unicon
6.4.1 การทดลองแสดงผลขอความ Hello World (1) เปดโปรแกรม Arduino1.0 พิมพโปรแกรมที่ 6-1 แลวบันทึกไฟล (2) ติดตังบอร ้ ด GLCD-XT บนบอรด Unicon เปดสวิตชจายไฟแกบอรด Unicon แลว เชือมต ่ อสาย USB เขากับคอมพิวเตอร
#include <unicon.h> void setup() { glcd(1,0,"Hello World"); } void loop() {}
// Include main library
// Display message on screen
คําอธิบายโปรแกรม โปรแกรมนี้จะทํางานโดยสงขอความ Hello World ออกไปแสดงผลทีบรรทั ่ ด 1 คอลัมน 0 ของจอ แสดงผล จะทํางานเพียงครั้งเดียว จึงเขียนโปรแกรมไวทีตํ่ าแหนงของ void setup() เทานั้น
โปรแกรมที่ 6-1 ไฟล glcd_HelloWorld.ino สําหรับทดสอบการแสดงผลของแผงวงจร Unicon กับ GLCD-XT
Unicon 161
(3) เลือกชนิดหรือรุนของฮาร ดแวรใหถูกตอง โดยเลือกที่เมนู Tools > Board > Unicon (Catarina)
(4) เลือกพอรตอนุกรมสําหรับติดตอกับบอรด Unicon โดยเลือกที่เมนู Tools > Serial Port ดังรูป (ตําแหนงของพอรตที่ใชเชื่อมตออาจแตกตางกันในคอมพิวเตอรแตละเครือง) ่
(5) คอมไพลและอัปโหลดไปยังบอรด Unoicon หรือ POP-XT โดยคลิกที่ปุม File > Upload ทีหน ่ าจอแสดงผลกราฟก LCD แสดงขอความ Hello World
หรือเลือกที่เมนู
162
Unicon
6.4.2 การทดลองแสดงขอความหลายบรรทัด จอแสดงผลของ GLCD-XT มีขนาด 128 x 160 พิกเซล แสดงตัวอักษรความละเอียด 6 x 10 จุด จํานวน 21 ตัวอักษร 16 บรรทัด ผูใช งานสามารถระบุตําแหนงบรรทัดและตําแหนงคอลัมนที่ตองการแสดงผลได โดย กําหนดผานคําสั่ง glcd ซึ่งมีอยูในไฟล ไลบรารี glcd.h หรือ unicon.h นอกจากนันคํ ้ าสั่ง glcd ยังมีอักขระพิเศษเพือระบุ ่ ตําแหนงแทนการใชคาตัวเลข ดังในโปรแกรมที่ 6-2 (1) เปดโปรแกรม Arduino1.0 พิมพโปรแกรมที่ 6-2 แลวบันทึกไฟล (2) เปดสวิตชจายไฟแกบอรด Unicon ที่ติดตั้ง GLCD-XT แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร #include <unicon.h> int i,j; void setup() { glcdFillScreen(GLCD_WHITE); setTextColor(GLCD_BLACK); setTextBackgroundColor(GLCD_WHITE); for (i=0;i<16;i++) { glcd(i,i,"Row %d ",i); } } void loop() {}
// Include main library
// Set background color as white // Set text color as black // Set text background color as white // Loop 16 times // Display message on screen
คําอธิบายโปรแกรม ในโปรแกรมนี้เพิมเติ ่ มคําสังสํ ่ าหรับการใชงานจอแสดงผลอีก 3 คําสังคื ่ อ 1. glcdFillScreen เปนคําสังกํ ่ าหนดสีพืนหลั ้ งของจอแสดงผล 2. setTextColor สําหรับกําหนดสีใหแกตัวอักษร 3. setTextBackground สําหรับกําหนดสีพืนหลั ้ งของตัวอักษร เมื่อตั้งคาของจอแสดงผลแลว จึงทําการสงขอความ Row ตามดวยหมายเลขบรรทัดซึ่งมาจากการ เพิมค ่ าของตัวแปร i และมีการเลือนตํ ่ าแหนงตามคาของ i ดวย ดังนันที ้ บรรทั ่ ดแรก ขอความ Row0 ถูกแสดง ทีคอลั ่ มน 0 ทีบรรทั ่ ด 2 แสดงขอความ Row 1 ทีคอลั ่ มน 1 ไลไปตามลําดับจนถึงบรรทัด 15 (บรรทัดที่ 16) จะแสดงเปน Row 15 ทีคอลั ่ มน 15
โปรแกรมที่ 6-2 ไฟล glcd_MultipleTextline.ino สําหรับทดสอบการแสดงผลอักษรหลายบรรทัดของ GLCD-XT
Unicon 163
(3) คอมไพลและอัปโหลดโปรแกรม โดยคลิกทีปุ่ ม
หรือเลือกทีเมนู ่ File > Upload
ทีหน ่ าจอแสดงผลกราฟก LCD แสดงขอความ Row 0 ถึง Row 15 เรียงไปบรรทัดละขอความ
164
Unicon
6.4.3 การทดลองกําหนดขนาดตัวอักษรและทิศทางการแสดงผล ขนาดตัวอักษรปกติที่แสดงบนจอแสดงผลของ GLCD-XT เมื่อเริมต ่ นทํางานเปนขนาดเล็กสุด ใช จํานวนจุดตอตัวอักษรคือ 6 x 10 จุด (อักษรจริงมีขนาด 5 x 7 จุด) ถาตองการปรับขนาดตัวอักษรใหใหญขึน้ จะมีคําสั่ง setTextSize ไวสําหรับปรับขนาด โดยคาที่กําหนดจะเปนจํานวนเทาของตัวอักษรปกติ เชน ้ น 2 เทา ใช 12 x 20 พิกเซลตอ 1 ตัวอักษร setTextSize(2) หมายถึงขนาดตัวอักษรใหญขึนเป setTextSize(3)หมายถึงขนาดตัวอักษรใหญขึนเป ้ น 3 เทา ใช 18 x 30 พิกเซลตอ 1 ตัวอักษร เมือปรั ่ บขนาดตัวอักษรมีขนาดใหญขึน้ จํานวนตัวอักษรตอบรรทัดก็ตองลดลง จากเดิม 21 ตัวอักษร 16 บรรทัด เมือขนาดของตั ่ วอักษรเพิมขึ ่ นเป ้ นสองเทา ก็จะทําใหแสดงได 10 ตัวอักษร 8 บรรทัดแทน ดังนันเมื ้ อเขี ่ ยน โปรแกรมจะตองคํานึงถึงคาเหลานีด้ วย นอกจากขนาดตัวอักษรแลว ยังกําหนดทิศทางการแสดงผลของจอแสดงผลได โดยใชคําสัง่ glcdMode() โดยมีคาตังต ้ นคือ โหมด 0 (glcdMode(0)) นันคื ่ อ แสดงผลในแนวตัง้ สําหรับอีก 3 โหมดคือ โหมด 1, 2 และ 3 ใชปรับใหการแสดงผลหมุนไปโหมดละ 90 องศา นันคื ่ อ โหมด 1 หมุนไป 90 องศา, โหมด 2 หมุนไป 180 องศา และโหมด 3 หมุนไป 270 องศา (1) เปดโปรแกรม Arduino1.0 พิมพโปรแกรมที่ 6-3 แลวบันทึกไฟล (2) เปดสวิตชจายไฟแกบอรด Unicon ที่ติดตั้ง GLCD-XT แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร #include <unicon.h> int x,m; void setup() { 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); } } }
// Set text color as red
// Set text size // // // //
Clear screen Set orientation Change text size Chane orientation mode
โปรแกรมที่ 6-3 ไฟล glcd_TextFlipDisplay.ino สําหรับทดสอบการเพิ่มขนาดตัวอักษรในการแสดงผล และการเปลี่ยนทิศทางของการแสดงผลของ GLCD-XT
Unicon 165
(3) คอมไพลและอัปโหลดโปรแกรม โดยคลิกที่ปุม
หรือเลือกที่เมนู File > Upload
ทีหน ่ าจอแสดงผลกราฟก LCD แสดงขอความแจงขนาดของตัวอักษรและโหมดของการแสดงผล ในทิศทางทีต่ างกัน เริ่มจากมุมบนซาย, มุมบนขวา, มุมลางขวา และมุมลางซาย โดยรอบการแสดงผลจะเริ่ม จากขนาด 1X, 2X, 3X , 4X และ 5X แตละรอบจะมีการแสดงผล 4 ทิศทาง โดยดูจากคา M M = 0 จอแสดงขอความแนวตัง้ ตัวอักษรขนาด 3 เทา
M = 1 หมุนการแสดงผลไป 90 องศาทางขวา ตัวอักษรขนาด 4 เทา
M = 2 หมุนการการแสดงผลไป 180 องศา M = 3 หมุนการแสดงผลไป 270 องศา จะไดภาพทีกลั ่ บหัวเมื่อเทียบกับ M = 0 ตัวอักษรขนาด 5 เทา ตัวอักษรขนาด 4 เทา
166
Unicon
6.4.4 การทดลองแสดงลายเสนกราฟก ฟงกชัน่ 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) เปนการเคลียรหนาจอแสดงผล
#include <unicon.h> // Include main library int i,j; void setup() {} void loop() { glcdClear; // Clear screen to black background sleep(300); for (i=0;i<160;i+=4) { glcdLine(0,0,128,i,GLCD_WHITE); // Draw the white line from 0,0 to end } for (i=0;i<128;i+=4) { glcdLine(0,0,i,160,GLCD_RED); // Draw the red line from 0,0 to end } sleep(2000); glcdRect(32,40,64,80,GLCD_BLUE); // Draw the blue rectangle sleep(300); glcdFillCircle(32,40,31,GLCD_GREEN); // Create the green solid circle glcdFillCircle(96,40,31,GLCD_YELLOW); // Create the yellow solid circle glcdFillCircle(32,120,31,GLCD_MAGENTA); // Create the magenta solid circle glcdFillCircle(96,120,31,GLCD_SKY); // Create the light blue solid circle sleep(1000); glcdCircle(64,40,31,GLCD_GREEN); // Draw the green diagonal glcdCircle(32,80,31,GLCD_BLUE); // Draw the blue diagonal glcdCircle(64,120,31,GLCD_YELLOW); // Draw the yellow diagonal glcdCircle(96,80,31,GLCD_SKY); // Draw the light blue diagonal sleep(1000); glcdFillRect(0,0,128,160,GLCD_YELLOW); // Create the yellow rectangle sleep(1000); }
โปรแกรมที่ 6-4 ไฟล glcd_Simplegraphic.ino สําหรับทดสอบการแสดงผลภาพลายเสนของ GLCD-XT
Unicon 167
(1) เปดโปรแกรม Arduino1.0 พิมพโปรแกรมที่ 6-4 แลวบันทึกไฟล (2) เปดสวิตชจายไฟแกบอรด Unicon ที่ติดตั้ง GLCD-XT แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร (3) คอมไพลและอัปโหลดโปรแกรม โดยคลิกที่ปุม
หรือเลือกที่เมนู File > Upload
บอรด Unicon จะสงขอมูลเพืดแสดงผลบน ่ GLCD-XT ดังรูป
6.4.5 การทดลองลากเสนโคงบน GLCD-XT นอกจากวงกลมและสีเหลี ่ ยมแล ่ ว เสนโคงก็เปนสวนประกอบสําคัญในการสรางภาพกราฟกแลว ใน ชุดคําสั่งเกียวกั ่ บการแสดงผลจอภาพแบบกราฟกสีของ GLCD-XT ยังมีคําสั่ง glcdArc() สําหรับสรางเสน โคง โดยมีพารามิเตอรหรือตัวแปรที่ตองกําหนดอยูพอสมควร ดูรายละเอียดเพิมเติ ่ มในสวนของทฤษฎในตอน ตนของบทนี้ (1) เปดโปรแกรม Arduino1.0 พิมพโปรแกรมที่ 5 แลวบันทึกไฟล (2) เปดสวิตชจายไฟแกบอรด Unicon ที่ติดตั้ง GLCD-XT แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร (3) คอมไพลและอัปโหลดโปรแกรม โดยคลิกที่ปุม
หรือเลือกที่เมนู File > Upload
168
Unicon
#include <unicon.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() {} void loop() { for(i=0;i<4;i++) { glcdClear(); glcdMode(i); face(); sleep(1000); } }
โปรแกรมที่ 6-5 ไฟล glcd_ArcTest.ino สําหรับทดสอบการวาดเสนโคงของบอรด Unicon และ GLCDXT (4) รันโปรแกรม ดูผลการทํางานที่จอแสดงผลของ GLCD-XT ทีจอแสดงผลแสดงเป ่ นรูปการตูนหนายิมนาน ้ 1 วินาที แลวหมุนไปครั้งละ 90 องศา แลววนกลับ มาทีหน ่ าเริมต ่ น จะวนแสดงผลไปตลอดเวลา