Unicon06-141168

Page 1

  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 10F 16V

21-character 16-line CS 17

+3.3V IC5 LM1117-3.3V

C16 10F 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.1F

PORT

+3.3V xx

+5V R11 1k

R10 4.7k RST C17 0.1F

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 องศา แลววนกลับ มาทีหน ่ าเริมต ่ น จะวนแสดงผลไปตลอดเวลา


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.