The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

IPST-MicoBOX (SE) Starter Manual
คู่ มือเริ่มต้นใช้งานกล่องสมองกล IPST-MicroBOX (SE) กับ Arduino IDE

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Kritsada Jaiyen, 2021-04-25 06:20:25

คู่มือเริ่มต้นใช้งานกล่องสมองกล IPST-MicroBOX SE

IPST-MicoBOX (SE) Starter Manual
คู่ มือเริ่มต้นใช้งานกล่องสมองกล IPST-MicroBOX (SE) กับ Arduino IDE

Keywords: IPST-SE,inex,Arduino

      Arduino IDE101

6.3.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); // กาํ หนดใหพ น้ื หลงั เปน สนี ํ้าเงนิ

102      Arduino IDE

6.3.4 glcdSetColorWordBGR

เปนฟง กชน่ั กําหนดการเรยี งบิตขอมูลสีใหเ ปนแบบ BGR (5-6-5) นน่ั คือ คาของสนี ้าํ เงิน 5 บิต
ตอดว ยสเี ขียว 6 บติ และปด ทา ยดวยคา ของสแี ดง 5 บติ ทั้งนเ้ี น่ืองจากผูผลิตจอแสดงผลกราฟก LCD
สมี กี ารผลติ จอแสดงทม่ี ีคุณสมบตั ิเหมอื นกนั ออกมา 2 รนุ แตมีการเรียงบิตขอมลู สตี างกัน คือ เรียง
แบบ BGR และเรียงแบบ RGB

อยา งไรก็ตาม คาตั้งตนของไฟลไ ลบรารี ipst_glcd.h เลือกใชการเรียงบิตขอ มลู สีใหเปนแบบ
BGR น่นั คือ มกี ารเรียกใชฟง กช่นั นีต้ ั้งแตตน จงึ ไมต องเขียนฟง กช่นั นล้ี งในโปรแกรม

รูปแบบ
glcdSetColorWordBGR()

ตัวอยางท่ี 6-6

#include <ipst.h>
void setup()
{

glcdSetColorWordBGR(); // เขยี นฟง กช ั่นนลี้ งไปหรอื ไมก ไ็ ด
}
void loop()
{}

6.3.5 glcdSetColorWordRGB( );

เปนฟง กช่นั กําหนดการเรยี งบิตขอมลู สใี หเ ปนแบบ RGB (5-6-5) นัน่ คือ คาของสีแดง 5 บิต
ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีน้ําเงิน 5 บิต ทั้งน้ีเนื่องจากผูผลิตจอแสดงผลกราฟก
LCD สมี กี ารผลิตจอแสดงผลแบบน้ี 2 รนุ โดยมีการเรียงบิตขอ มลู สแี บบ BGR และแบบ RGB

หากผูใชงานแผงวงจร IPST-SE และทดลองกําหนดสขี องภาพหรอื ตัวอกั ษรแลวพบวา สีท่ีได
ไมถ ูกตอง จะตอ งเรยี กใชฟง กชนั่ นี้ โดยบรรจไุ วใน setup() ท่ตี อนตนของโปรแกรม

รูปแบบ
glcdSetColorWordRGB()

ตัวอยางที่ 6-7

#include <ipst.h>
void setup()
{

glcdSetColorWordBGR(); // เลอื กรปู แบบการเรยี งบติ สเี ปน แบบ RGB
}
void loop()
{}

     Arduino IDE103

6.3.6 setTextColor

เปนการกําหนดคาสีของตัวอักษรที่แสดงดวยฟงกชั่น glcd() โดยคาต้ังตนกําหนดเปนสีขาว

รูปแบบ
void setTextColor(unsigned int newColor)

พารามเิ ตอร

newColor คอื สีทต่ี องการ เปน ตัวเลข 16 บติ หรอื เปน คา ตัวแปรทกี่ าํ หนดคา ไวแ ลวจากตวั แปร color[]

ตัวอยางท่ี 6-8

#include <ipst.h>

int colors;

void setup()

{

int colors;

colors=colorRGB(31,0,0); // สงคา สี 16 บิตของสีแดงใหต ัวแปร colors

setTextColor(colors); // กาํ หนดใหส ขี องตวั อักษรเปน สแี ดง

glcd(1,0,"Text color is Red"); // กาํ หนดขอความ
}
void loop()
{
setTextColor(GLCD_YELLOW); // กาํ หนดใหส ีของตวั อกั ษรเปน สเี หลอื ง

glcd(3,0,"Text color is Yellow"); // กาํ หนดขอ ความ

}

28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB ON14 SV1 13 SV2 12 SV3
Textocolordis0red0000
OK 000000000000000000000 G
Textocolordis0yellow0 6V
SW1 000000000000000000000 12
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000

104      Arduino IDE

6.3.7 setTextBackgroundColor

เปนฟง กช่นั กําหนดสขี องพ้นื หลงั ตัวอกั ษร โดยคาต้ังตนเปนสดี าํ สขี องพื้นหลงั ตัวอกั ษรจะ
เปน คนละสว นกบั สขี องพนื้ จอภาพ (screen background) ซงึ่ ตอ งกาํ หนดคา ผา นฟง กช นั่ glcdFillScreen

รูปแบบ

void setTextBackgroundColor(unsigned int newColor)

พารามเิ ตอร

newColor คอื สที ต่ี อ งการ เปน ตัวเลข 16 บติ หรอื เปน คา ตัวแปรทก่ี าํ หนดคา ไวแ ลวจากตัวแปร color[]

ตวั อยา งที่ 6-9

#include <ipst.h>

void setup() // กาํ หนดใหส ีพนื้ หลงั ตวั อักษรเปน สแี ดง
{
// กาํ หนดใหส ีของตวั อกั ษรเปน สเี หลอื ง
setTextBackgroundColor(GLCD_RED); // กาํ หนดขอ ความ
} // กาํ หนดขอ ความ
void loop() // กาํ หนดขอ ความ
{

setTextColor(GLCD_YELLOW);
glcd(3,0,"Text color is Yellow.");
glcd(5,0,"Text background color");
glcd(6,0,"is Red.");
}

28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB ON 14 SV1 13 SV2 12 SV3
Hello0World0000000000
OK 000000000000000000000 G
Textocolordis0Yellow0 6V
SW1 000000000000000000000 12
G
Text0background0color 6V
is0Red000000000000000 13
G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000

    Arduino IDE105

6.3.8 glcdClear

เปน การเคลยี รห นา จอแสดงผล โดยสขี องพนื้ หลงั จะเปน สพี นื้ หลงั ของตวั อกั ษรลา สดุ โดยถา ไม
ไดก าํ หนดดว ยคาํ สง่ั setTextBackGroundColor() มากอ นหนา น้ี หลงั จากทาํ คาํ สงั่ glcdClear()แลว
พน้ื หลงั จะเปน สดี าํ

รูปแบบ
void glcdClear()

ตัวอยางท่ี 6-10

glcdClear(); // เคลยี รหนาจอแสดงผล

  

 

 

IPST-SE

106     Arduino IDE

6.3.9 glcdFillScreen

เปนการเคลียรหนาจอแสดงผล แลว เปลี่ยนสีพนื้ หลังของจอแสดงผลดวยสีทีร่ ะบุ

รูปแบบ
void glcdFillScreen(unsigned int color)

พารามเิ ตอร

Color คอื สีทตี่ องการ เปน ตัวเลข 16 บิต หรอื เปน คาตัวแปรทีก่ าํ หนดคา ไวแ ลว จากตัวแปร color[]

ตวั อยางที่ 6-11

glcdFillScreen(GLCD_YELLOW); // กาํ หนดสพี น้ื หลงั ของจอภาพเปน สเี หลอื ง

 

   

 

6.3.10 glcdMode

เปนการกาํ หนดทศิ ทางแสดงผลของจอกราฟก LCD สี โดยกําหนดใหขอความหรอื ภาพหนา
จอใหแสดงภาพต้ังฉากตรงหนา (โหมด 0), หมนุ ขวา 90 องศา (โหมด 1), หมนุ 180 องศาหรอื กลบั
หวั (โหมด 2) และหมนุ 270 องศา (โหมด 3)

รูปแบบ
glcdMode(unsigned int modeset)

พารามเิ ตอร

modeset คือคาทิศทางของการหมุนมีคา 0 ถึง 3 โดยใชแทนทิศทาง 0, 90, 180 หรือ 270 องศา
โดยมีคา เรมิ่ ตนคือ 0 องศา ทาํ งานอยใู นแนวต้ัง

     Arduino IDE107

    

IPST-SE IPST-SE

IPST-SE IPST-SE

ตัวอยา งที่ 6-12

#include <ipst.h>

void setup()

{

setTextSize(2); // ขนาดตวั อกั ษร 2 เทา

}

void loop()

{

glcdClear(); // เคลยี รห นาจอ

glcdMode(0); // โหมด 0 องศา

glcd(0,0,"IPST-SE"); // แสดงขอ ความ

sw_ok_press(); // รอกดสวติ ชเ ขา โหมดตอ ไป

glcdClear();

glcdMode(1);

glcd(0,0,"IPST-SE");

sw_ok_press();

glcdClear();

glcdMode(2);

glcd(0,0,"IPST-SE");

sw_ok_press();

glcdClear();

glcdMode(3);

glcd(0,0,"IPST-SE");

sw_ok_press();
}

108      Arduino IDE

6.3.11 setTextSize

เปน การกาํ หนดขนาดตวั อกั ษรโดยระบเุ ปน จาํ นวนเทา ของขนาดปกติ คา ตง้ั ตน เมอ่ื เรม่ิ ทาํ งาน
ทุกคร้ังคือ ขนาดตัวอักษรปกติ ใชพ้ืนท่ีรวมระยะชองไฟคอื 6 x 10 พกิ เซลตอ 1 ตัวอักษร จงึ แสดง
ได 21 ตัวอักษร 16 บรรทดั ในแนวต้ัง

 

  
 




รูปแบบ
setTextSize(unsigned int newSize)

พารามเิ ตอร

newSize คอื คา ขนาดจํานวนเทา ของขนาดปกติ มีคา 1 ถึง 16 เพอื่ ใหต ัวอักษรทแ่ี สดงไมล น หนาจอ
ถาหากกําหนดเปน 1 เทา แสดงตัวอกั ษรได 21 ตัว 16 บรรทดั
ถาหากกําหนดเปน 2 เทา แสดงตัวอักษรได 10 ตัว 8 บรรทดั
ถาหากกําหนดเปน 3 เทา แสดงตัวอกั ษรได 7 ตัว 5 บรรทดั
ถาหากกําหนดเปน 4 เทา แสดงตัวอักษรได 5 ตัว 4 บรรทดั
ถาหากกําหนดเปน 5 เทา แสดงตัวอกั ษรได 4 ตัว 3 บรรทดั
ถาหากกําหนดเปน 6 และ 7 เทา แสดงตัวอักษรได 3 ตัว 2 บรรทดั
ถาหากกําหนดเปน 8 เทา แสดงตัวอักษรได 2 ตัว 2 บรรทดั
ถาหากกําหนดเปน 9 และ 10 เทา แสดงตัวอกั ษรได 2 ตัว 1 บรรทดั
ถาหากกําหนดเปน 11 ถึง 16 เทา แสดงตัวอักษรได 1 ตัว 1 บรรทดั (แบบไมล น จอแสดงผล)

     Arduino IDE109

ตัวอยางที่ 6-13 // กาํ หนดขนาดขอ ความ 1 เทา
// สีตัวอักษรเปน สเี ขยี ว
#include <ipst.h> // แสดงขอ ความ
void setup() // กาํ หนดขนาดขอ ความ 2 เทา
{ // กาํ หนดขนาดขอ ความ 3 เทา
// กาํ หนดขนาดขอ ความ 4 เทา
setTextSize(1);
setTextColor(GLCD_GREEN);
glcd(0,0,"Size1");
setTextSize(2);
glcd(1,0,"Size2");
setTextSize(3);
glcd(2,0,"Size3");
setTextSize(4);
glcd(3,0,"Size4");
}
void loop()
{}

6.3.12 getTextColor

เปนคําส่ังคืนคาสีปจจุบันของตัวอักษร

รูปแบบ
unsigned int getTextColor()

การคืนคา

textColor เปน คาสแี สดงอยใู นรปู ของตวั เลข 16 บิต ดรู ปู แบบไดจากฟง กช ั่น colorRGB()

ตัวอยางที่ 6-14 // นาํ คา สขี องตวั อกั ษรเกบ็ ไวท ตี่ วั แปร color

unsigned int color;
color=getTextColor();

110       Arduino IDE

6.3.13 getTextBackgroundColor

เปนคําสั่งคืนคาสีพื้นหลังของตัวอักษรในปจจุบัน

รูปแบบ
unsigned int getTextBackgroundColor()

การคืนคา

textBackgroundColor เปน คา สแี สดงอยใู นรปู ของตวั เลข 16 บติ ดรู ปู แบบไดจ ากฟง กช นั่ colorRGB()

ตวั อยา งที่ 6-15

unsigned int color;
color=getTextBackgroundColor(); // นาํ คา สพี นื้ หลงั ของตวั อกั ษรเกบ็ ในตวั แปร color

6.3.14 getTextSize

คืนคาขนาดของตัวอักษรออกมาเปนจํานวนเทาของคาปกติ

รูปแบบ
unsigned int getTextSize()

การคืนคา

textSize เปน คาจาํ นวนเทา ของขนาดตวั อักษร

ตวั อยางที่ 6-16

unsigned int textSize;
textSize=getTextSize(); // นําคา จาํ นวนเทาของขนาดของตวั อกั ษรเกบ็ ในตัวแปร textSize

6.3.15 glcdGetMode

เปนคําส่ังคืนคาของโหมดทิศทางการแสดงผลในปจจุบัน

รูปแบบ
unsigned int glcdGetMode()

การคืนคา

mode เปน คาของโหมดทศิ ทางการแสดงผล เปน ตัวเลข 0 ถึง 3 เพอ่ื แสดงผลในทศิ ทาง 0 องศา, หมุน 90
องศา, หมุน 180 องศา และหมุน 270 องศาตามลาํ ดบั

ตวั อยางท่ี 6-17

unsigned int Mode;
Mode=glcdGetMode(); // คนื คาทิศทางการแสดงผลของหนา จอ GLCD

    Arduino IDE111

6.3.16 glcdPixel

เปนคําสั่งพล็อตจุดบนจอภาพตามพิกัดท่ีกําหนด โดยอางอิงถึงตําแหนงของพิกเซลหรือจุด
ของจอแสดงผลท่ีความละเอียด 128 x 160 จดุ ดังรปู ท่ี 6-2

รูปแบบ
void glcdPixel(unsigned int x,unsigned int y,unsigned int color)

พารามเิ ตอร

x คอื คา พิกดั ในแนวนอนหรอื แกน x มีคา ระหวาง 0 ถึง 127

y คอื คา พิกดั ในแนวตงั้ หรือแกน y มีคา ระหวาง 0 ถึง 159

color คอื คา ของสที ต่ี องการ เปน ตัวเลข 16 บิต หรอื เปน คาตัวแปรที่กาํ หนดคา ไวแ ลว จากตัวแปร color[]

     
 

 




 
 


รปู ที่ 6-2 แสดงการกาํ หนดตาํ แหนง ของพกิ เซลหรอื จดุ ของจอแสดงผลกราฟก LCD สที ใ่ี ชบ นแผงวงจร
IPST-SEในชดุ กลอ งสมองกล IPST-MicroBOX (SE)

112      Arduino IDE

ตวั อยา งท่ี 6-18 // พลอ็ ตจดุ ทกุ ๆ 4 พกิ เซลในแนวแกน x กลางจอ
// พลอ็ ตจดุ ทกุ ๆ 4 พกิ เซลในแนวแกน y กลางจอ
#include <ipst.h>
int i;
void setup()
v}{ oid{ff{}}oolorro((piigg==(ll)cc00dd;;iiPP<<ii11xxee26ll80((6i;;,ii84++0,==i,,44GG))LLCCDD__RREEDD));;
{}

28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3 D

Hello0World0000000000
000000000000000000000

ON

KNOB 000000000000000000000 G 14 SV1 13 SV2 12 SV3
000000000000000000000 6V
OK 000000000000000000000 12
000000000000000000000
SW1 000000000000000000000 G
000000000000000000000 6V
000000000000000000000 13
000000000000000000000
000000000000000000000 G
6V
14

     Arduino IDE113

6.3.1.17 glcdRect

เปน ฟง กช นั่ ลากเสน จากพกิ ดั ทก่ี าํ หนดมายงั พกิ ดั ปลายทาง โดยอา งองิ ถงึ ตาํ แหนง ของพกิ เซล
หรือจุดของจอแสดงผลที่ความละเอยี ด 128 x 160 จดุ ตามรปู ท่ี 6-2

รูปแบบ
void glcdRect(unsigned int x1,unsigned int y1,unsigned int width,unsigned int

height,unsigned int color)

พารามเิ ตอร

x1 คอื คา ตําแหนง เร่ิมตนของรปู สี่เหลย่ี มในแกน x มีคา ระหวา ง 0 ถึง 127

y1 คอื คา ตําแหนง เร่มิ ตนของรูปส่เี หลยี่ มในแกน y มีคา ระหวาง 0 ถึง 159

width คอื คา ความกวางของรปู สี่เหลยี่ ม (แนวนอน) มีคา ระหวาง 1 ถึง 128

height คอื คา ความสงู ของรูปสเี่ หลย่ี ม (แนวตงั้ ) มีคา ระหวา ง 1 ถึง 158

color คอื สขี องเสน เปน คาตัวเลข 16 บิต หรอื เปน คาตัวแปรท่กี าํ หนดคา ไวแ ลวจากตัวแปร color[]

ตัวอยางท่ี 6-19

#include <ipst.h>
void setup()
{

glcdRect(32,40,64,80,GLCD_RED); // วาดรปู สเี่ หลย่ี มเสนสแี ดง ขนาด 64 x 80 พกิ เซล
}
void loop()
{}

   
     

300000000000000000000
 400000000000000000000

500000000000000000000
600000000000000000000
   700000000000000000000
800000000000000000000
900000000000000000000
a00000000000000000000
b00000000000000000000
  c00000000000000000000
d00000000000000000000

e00000000000000000000

f00000000000000000000

114      Arduino IDE

6.3.18 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

width คอื คา ความกวางของรูปสีเ่ หลย่ี ม (แนวนอน) มีคา ระหวาง 1 ถึง 128

height คอื คา ความสงู ของรปู สเ่ี หลยี่ ม (แนวตง้ั ) มีคา ระหวา ง 1 ถึง 158

color คอื สขี องเสน เปน คาตัวเลข 16 บิต หรอื เปน คาตัวแปรท่กี าํ หนดคา ไวแ ลวจากตัวแปร color[]

ตวั อยางที่ 6-20

#include <ipst.h>
void setup()
{

glcdFillRect(32,40,64,80,GLCD_RED);
// สรา งภาพสเ่ี หลยี่ มพนื้ สแี ดง ขนาด 64 x 80 พกิ เซล
}
void loop()
{}

   

    300000000000000000000
    400000000000000000000

500000000000000000000
600000000000000000000

  700000000000000000000

800000000000000000000
900000000000000000000
a00000000000000000000

b00000000000000000000
c00000000000000000000
 
d00000000000000000000

 e00000000000000000000

f00000000000000000000

     Arduino IDE115

6.3.19 glcdLine

เปนฟง กชั่นลากเสน จากจุดหนงึ่ ไปยงั อกี จุดหนงึ่ กําหนดเปน พกิ ัดในแนวแกนนอน (x) และ
แกนตง้ั (y)

รูปแบบ
void glcdLine(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int

y2,unsigned int color)

พารามเิ ตอร
x1 คอื คา ตําแหนง เรมิ่ ตนของเสน บนแกน x มีคา ระหวาง 0 ถึง 127

y1 คอื คา ตําแหนง เร่ิมตนของเสน บนแกน y มีคา ระหวาง 0 ถึง 159

x2 คอื คา ตําแหนง ส้นิ สดุ ของเสนบนแกน x มีคา ระหวาง 0 ถึง 127

y2 คอื คา ตําแหนง ส้นิ สดุ ของเสน บนแกน y มีคา ระหวาง 0 ถึง 159

color คอื คา สขี องเสน เปน ตัวเลข 16 บิต หรอื เปน คาตัวแปรท่ีกาํ หนดคา ไวแ ลวจากตัวแปร color[]

ตัวอยางที่ 6-21

#include <ipst.h>
void setup()
{

glcdLine(0,0,127,159,GLCD_RED); // ลากเสน สแี ดงทะแยงมมุ จากดา นบนซา ยลงมาดา นลา งขวา
}
void loop()
{}

 0
 43 0

0000000000000000 
0000000000000000 
500000000000000000000 43
600000000000000000000
700000000000000000000
800000000000000000000
900000000000000000000
a00000000000000000000
b00000000000000000000
c00000000000000000000
d00000000000000000000
e00000000000000000000
f00000000000000000000

0
0

116      Arduino IDE

6.3.20 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-22

#include <ipst.h>
void setup()
{

glcdCircle(32,120,31,GLCD_RED);// สรางเสน วงกลมสแี ดง มีรศั มี 31 พกิ เซล
}
void loop()
{}

0000000000000000
0000000000000000
500000000000000000000
600000000000000000000
700000000000000000000

800000000000000000000
900000000000 00000000
 a000000000 0000000000

b00000000000000000000
c00000000000000000000

d00000000000000000000
e00000000000000000000

f00000000000000000000

     Arduino IDE117

6.3.21 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-23

#include <ipst.h>
void setup()
{

glcdFillCircle(32,120,31,GLCD_RED); // สรา งรปู วงกลมพน้ื สแี ดง รศั มี 31 พกิ เซล
}
void loop()
{}

0000000000000000
0000000000000000
500000000000000000000
600000000000000000000
700000000000000000000

800000000000000000000
900000000000 00000000
   a000000000 0000000000

b00000000000000000000
c00000000000000000000

d00000000000000000000
e00000000000000000000

f00000000000000000000

118      Arduino IDE

6.3.22 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-24

#include <ipst.h>
void setup()
{

glcdArc(48,80,16,30,150,GLCD_RED);
glcdCircle(48,75,5,GLCD_YELLOW);
glcdCircle(80,75,5,GLCD_YELLOW);
glcdArc(80,80,16,30,150,GLCD_RED);
glcdFillCircle(64,90,7,GLCD_GREEN);
glcdArc(64,100,30,220,320,GLCD_RED);
}
void loop()
{}

      Arduino IDE119

 

 


7.1 LED คอื อะไร

LED (Light Emiting Diode) หรอื ไดโอดเปลงแสงเปนอปุ กรณเ อาตพตุ สําหรบั การแสดงผล
ซ่ึงสามารถติดสวา งไดเ ม่ือไดรบั แรงดนั กระตนุ อยา งเหมาะสม โดย LED มีใหเลือกใชงานไดห ลายสี
อาทิ สแี ดง, เหลอื ง, เขียว, นํ้าเงิน, ขาว, สม, มวง เปนตน

LED สามารถกําเนิดแสงออกมาไดเ ม่ือไดร บั จา ยไฟอยา งถกู ตอ ง การจายไฟให LED ทํางาน
เรียกวา การไบแอส (bias) และการไบแอสท่ีทําให LED ทํางาน เรียกวา การไบแอสตรง (forward
bias) โดยปกติแรงดันทใี่ ชในการขับหรอื ไบแอสให LED ทาํ งานจะมีคาอยูระหวา ง 1-4.5 V ขึ้นอยูกับ
สารทนี่ าํ มาใชท าํ LED และขนึ้ อยกู บั ปรมิ าณกระแสทไ่ี หลผา น กลา วคอื ถา กระแสไหลผา น LED มาก
มผี ลทําใหแรงดนั ที่ตกครอม LED มคี ามากและแสงที่ LED กําเนิดออกมากจ็ ะสวา งมากขึน้ ดว ย โดย
ปกติมักจะกําหนดใหแ รงดันไบแอสตรงของ LED เทากับ 2V ในรปู ที่ 7-1 เปนสญั ลักษณ, โครงสรา ง
และการจัดขาของ LED

LED สามารถเปลง แสงออกไดห ลายสขี ้ึนอยกู ับวา นาํ สารก่ึงตัวนาํ ชนดิ ใดมาสรางเปน LED
ถาหากเปนสีแดงและเหลืองทํามาจากแกลเลี่ยมอารเซไนดฟอสไฟด (GaAsP) สวนสีเขียวทํามาจาก
แกลเลี่ยมฟอสไฟด (GaP) และ LED ท่ีใหแสงอินฟาเรดซงึ่ ทํามาจากแกลเลี่ยมอารเ ซไนด (GaAs)

R1

AK ขาแคโทด ขาแอโนด Vs + LED1

(ก) สญั ลักษณข อง LED (ข) โครงสรา งภายในของ LED I1

รปู ที่ 7-1 แสดงสญั ลกั ษณ, โครงสรา งและการจดั ขาของไดโอด รปู ท่ี 7-2 การตอ ตวั ตา นทานเพื่อ

เปลง แสงหรอื LED จาํ กดั กระแสใหแ ก LED

120       Arduino IDE

7.2 การใชง าน LED

LEDตอ งการแรงดนั ไบแอสตรงประมาณ2Vและยอมใหก ระแสไฟฟา ไหลผา นไดไ มเ กนิ 40mA
แตป รมิ าณกระแสไฟฟา ทเี่ หมาะสมคอื 10 ถงึ 20mA ดงั นน้ั การใชง าน LED จงึ ตอ งมตี วั ตา นทานจาํ กดั
กระแสไฟฟา ตออนุกรมรวมอยูดวย ดังในรูปท่ี 7-2

การหาคาของตัวตา นทานทีใ่ ชในการจาํ กัดกระแสไฟฟา ให LED ทําไดโ ดยใชสตู ร

Vcc VF
RS 

IF

โดยที่ VCC คอื ไฟเลยี้ ง

VF คอื แรงดนั ไบแอสตรงทตี่ กครอ ม LED

IF คอื กระแสไฟฟาทไ่ี หลผา น LED เม่ือไดรับไบแอสตรง

ในทางตรงกนั ขา ม หากจา ยแรงดนั ไบแอสกลบั แก LED นอกจาก LED จะไมท าํ งานแลว อาจ
ทาํ ให LED เสยี หายเนอ่ื งจาก LED มอี ตั ราการทนแรงดนั ยอ นกลบั ไดไ มส งู นกั เพยี ง 3 ถงึ 10V เทา นนั้

7.3 การควบคมุ LED ดวยไมโครคอนโทรลเลอรแ ละโปรแกรมภาษา C

การควบคมุ การตดิ /ดบั ของ LED นนั้ ผพู ฒั นาสามารถใชสัญญาณจากจุดตอพอรต ใดๆ ของแผง
วงจรIPST-SE กไ็ ดโดยในการเขยี นโปรแกรมควบคมุ การตดิ /ดบั ของ LEDนนั้ ใชก ลมุ คาํ สง่ั เอาตพ ตุ เพอ่ื
ควบคมุ สถานะของจดุ ตอพอรต ทเ่ี ชอ่ื มตอ กบั LED

ฟง กช นั่ หรอื คาํ สง่ั หลกั ของโปรแกรมภาษา C/C++ สาํ หรบั ชดุ กลอ งสมองกล IPST-MicroBOX
(SE) ที่นาํ มาใชควบคุมการทํางานของ LED คือ out ซ่งึ บรรจอุ ยใู นไลบรารี ipst_in_out.h ในการใช
งานจึงตองผนวกไฟลไ บรารี ipst_in_out.h หรอื ipst.h ดวยคาํ ส่งั #include ทส่ี วนหวั ของโปรแกรม
กอนเสมอ ฟง กช่นั out มรี ปู แบบและการเรยี กใชดงั น้ี

out เปนฟง กชน่ั กาํ หนดระดบั สัญญาณหรือขอมลู ดจิ ติ อลไปยังขาพอรต ทกี่ าํ หนด

รูปแบบ

out(char _bit,char _dat)

พารามเิ ตอร

_bit - กาํ หนดขาพอรต ทต่ี องการ มีคา 0 ถึง 50 สาํ หรบั IPST-SE ใชไดถ ึง 30
_dat - กาํ หนดขอ มูลทต่ี องการสงออก มีคา เปน 0 หรอื 1

ตวั อยางที่ 7-1

out(17,1); // กาํ หนดใหข าพอรต 17 เปน “1”
out(18,0); // กาํ หนดใหข าพอรต 18 เปน “0”

     Arduino IDE121

  
  

เพ่ือใหเ ครือ่ งมอื และอปุ กรณอยใู นสภาพทพี่ รอ มทาํ งานตลอดเวลา ส่ิงทคี่ วรกระทําทุกครั้ง
ทใี่ ชง านชดุ กลองสมองกล IPST-MicroBOX คอื

1. ปดสวติ ชไ ฟเล้ยี งทกุ คร้ังทม่ี กี ารถอดหรือตอ สายเขากบั คอมพิวเตอรและชดุ โปรแกรม

2. ปดสวิตชไฟเล้ียงทุกคร้ังท่ีมีการตอหรือปลดสายของแผงวงจรตรวจจับสัญญาณหรือ
อปุ กรณใดๆ เขากบั แผงวงจรควบคมุ IPST-SE

3. หลงั จากทที่ ดลองเสรจ็ ในแตล ะการทดลอง ควรปด สวติ ชไ ฟเลย้ี งกอ นทจี่ ะทาํ การปลดสาย
สัญญาณเพื่อตอแผงวงจรใหมเ ขาไปเพ่ือทําการทดลองในหวั ขอใหม

4. ไมค วรปลดหรือตอ สายสญั ญาณของแผงวงจรใดๆ เขากบั แผงวงจร IPST-SE ในขณะที่
แผงวงจรกาํ ลงั ทาํ งาน เวน แตม ขี น้ั ตอนการปฏบิ ตั อิ น่ื ใดทร่ี ะบเุ จาะจงวา ตอ งสายสญั ญาณในขณะ
ทํางานของการทดลองนน้ั ๆ

5. หากมคี วามผดิ พลาดใดๆ เกดิ ข้ึน ตอ งปดสวติ ชไ ฟเลี้ยงทนั ที

6. ไมใ ชอ ะแดปเตอรไฟตรงทมี่ แี รงดนั ขาออกเกิน +9V กับแผงวงจร IPST-SE

7. หลงั จากเสร็จสนิ้ การทดลอง ใหป ลดสายเชอ่ื มตอ คอมพิวเตอรและสายของอะแดปเตอร
หรือแหลงจา ยไฟออกจากแผงวงจร IPST-SE เสมอ

122     Arduino IDE

    

ปฏบิ ัตกิ ารที่ 1-1 สัง่ การให LED ตดิ สวา ง

การเชื่อมตอทางฮารด แวร

 เชื่อมตอ แผงวงจร ZX-LED เขา กบั จุดตอ พอรต 17 ของแผงวงจรหลัก IPST-SE

28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
ZX-LED Hello0World0000000000
000000000000000000000
000000000000000000000

000000000000000000000 ON
000000000000000000000

000000000000000000000
000000000000000000000

000000000000000000000

+ S 000000000000000000000

000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

000000000000000000000
000000000000000000000
S+ G
6V
   O 12
DC MOTOR
15 SV0 14 SV1 13 SV2 12 SV3KNOBG
6V
OK

000000000000000000000 13

SW1 G
6V
14

16 18 UART1 LOW 12 G
+5 6V

15

17 19 20 RESET 2 RxD1 3 TxD1 SERVO

#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั คําอธบิ ายโปรแกรม
void setup()
{} โปรแกรมจะส่ังใหสงสัญญาณ “1” ออกมา
void loop() ทางจุดตอ พอรต 17 สัญญาณ “1” มแี รงดนั
{ ไฟฟา +5V จึงทําให LED ติดสวางได และ
out(17,1); // สง่ั ให LED ทจ่ี ุดตอ พอรต 17 ติดสวา ง กาํ หนดใหต ดิ นาน 0.5 วินาที จากนน้ั จงึ ส่ังให
delay(500); // หนวงเวลา 0.5 วนิ าที ดบั ดว ยการสง สญั ญาณ “0” ซง่ึ มแี รงดนั ไฟฟา
out(17,0); // ส่ังให LED ท่ีจดุ ตอ พอรต 17 ดบั 0V ทาํ ใหไ มม แี รงดนั และกระแสไฟฟา สง ไปขบั
delay(500); // หนวงเวลา 0.5 วนิ าที LED ได LED ที่แผงวงจร ZX-LED จึงดบั ลง
}

โปรแกรมท่ี L1-1 : ไฟล microbox_LedTest01.ino โปรแกรมภาษา C สาํ หรบั ทดลองขบั LED เบอ้ื งตน

    Arduino IDE123

ขน้ั ตอนการทดลอง

1.1.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมท่ี L1-1 บันทึกในชื่อ microbox_LEDtest01

1.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
6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000 SERVO

000000000000000000000
000000000000000000000

000000000000000000000
000000000000000000000

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

1.1.3 เลอื กชนดิ หรอื รนุ ของฮารด แวรใ หถ กู ตอ ง โดยเลอื กทเ่ี มนู Tools > Board > IPST-SE > ATmega644P ดงั รปู

124      Arduino IDE

1.1.4 เลือกพอรต ตดิ ตอ กบั แผงวงจร IPST-SE โดยเลือกที่เมนู Tools > Serial Port ดงั รปู (ตาํ แหนงของพอรต ท่ี
ใชเ ชอื่ มตอ อาจแตกตา งกนั ในคอมพวิ เตอรแ ตล ะเครอ่ื ง)

1.1.5 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทปี่ มุ หรอื เลอื กทเี่ มนู File > Upload
to Wiring Hardware

1.1.6 รนั โปรแกรม สังเกตการทาํ งานของ LED

LED ท่ีตอ กบั จุดตอ พอรต 17 ตดิ -ดบั ทุกๆ 0.5 วนิ าที

เพม่ิ เตมิ ผพู ฒั นาสามารถกาํ หนดอตั ราในการตดิ -ดบั หรอื อตั ราการกะพรบิ ของ LED ได ดว ยการ
ปรบั คา เวลาในฟงกช ั่น delay(); ภายในโปรแกรมที่ L1-1

1.1.7 ทดลองแกไ ขโปรแกรมที่ L1-1 ให LED มคี วามเรว็ ในการตดิ -ดบั ชาลง

1.1.8 ทดลองแกไ ขโปรแกรมท่ี L1-1 ให LED มคี วามเรว็ ในการตดิ -ดบั เรว็ ขนึ้

1.1.9 ทดลองแกไ ขโปรแกรมท่ี L1-1 เพ่ือเปลียนจุดตอ พอรต จากเดมิ พอรต หมายเลข 17 เปนพอรต อน่ื ๆ เชน 18,
19 และ 20

      Arduino IDE125

ปฏบิ ัตกิ ารท่ี 1-2 ควบคมุ LED ดวยเวลา

การเชอ่ื มตอ ทางฮารด แวร

 เชอ่ื มตอ แผงวงจร ZX-LED กบั จดุ ตอ พอรต 17 ของแผงวงจรหลกั IPST-SE

ขนั้ ตอนการทดลอง

1.2.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมที่ L1-2 บันทึกในช่ือ microbox_LEDtimer

1.2.2 ¤Í Áä¾Åáì ÅÐÍÑ» âËÅ´ â» Ãá¡ ÃÁä» Â§Ñἧǧ¨ ÃIPST-SE ⴠ¤šԷèÕ»èØÁ หรอื เลอื กทเ่ี มนู File > Upload

to Wiring Hardware
1.2.3 รนั โปรแกรม สังเกตการทาํ งานของ LED

LED จะตดิ นาน 4 วินาที หลังจากน้ันจงึ ดบั ลง
1.2.4 แกไ ขโปรแกรมท่ี L1-2 ให LED ตดิ สวางนานขน้ึ
1.2.5 แกไ ขโปรแกรมท่ี L1-2 ให LED ดบั เรว็ ขน้ึ

#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั

void setup()

{}

void loop()

{

out(17,1); // ส่งั ให LED ทจ่ี ดุ ตอ พอรต 17 ติดสวา ง

delay(4000); // หนวงเวลา 4 วินาที

out(17,0); // ส่ังให LED ทจ่ี ดุ ตอ พอรต 17 ดบั

while(1); // วนทาํ งานทค่ี าํ สง่ั นี้

}

คําอธบิ ายโปรแกรม

ในโปรแกรมจะกาํ หนดใหเ ขยี นขอ มลู “1” ไปยงั ขาพอรต 17 ซงึ่ ตอ กบั ZX-LED ทาํ ให LED ตดิ สวางนาน
ประมาณ 4 วนิ าทกี อ นทจี่ ะดบั ลง เนอื่ งจากเมอื่ สง่ั ให LED ตดิ สวา งจากการสงั่ ขบั สญั ญาณเอาตพ ตุ เปน “1”แลว
ตอ ดว ยการหนว งเวลาดว ยฟง กช น่ั delay หรอื sleep โปรแกรมจะทาํ งานอยทู ค่ี าํ สง่ั นนี้ านเปน เวลาประมาณ 4000
มลิ ลวิ นิ าที หรือ 4 วนิ าที หลงั จากครบรอบเวลา จงึ สง สญั ญาณ “0” เพอ่ื ควบคมุ ให LED ดบั และวนอยูท่ีคาํ สั่ง
while(); ทําใหไมมกี ารทํางานใดๆ LED จึงดบั จนกวาจะมกี ารกดสวติ ช RESET หรอื ปดเปดไฟเล้ียงใหม

โปรแกรมที่ L1-2 : ไฟล microbox_Ledtimer.c โปรแกรมภาษา C สาํ หรบั ทดลอง
ควบคมุ การทาํ งานของ LED ดว ยเวลา

126     Arduino IDE

      Arduino IDE127

 


 

ในบทที่ผานมาเปนการนาํ เสนอการควบคุม LED ดวยกระบวนการทางซอฟตแวร แต LED
ทคี่ วบคุมนน้ั มเี พยี งชองเดยี ว ในบทนี้นําเสนอการควบคมุ LED ในจํานวนมากชอ งขน้ึ ถงึ 8 ชอ งใน
เวลาเดยี วกัน

อปุ กรณเ อาตพตุ ทนี่ ํามาใชใ นการเรยี นรคู ือ แผงวงจร ZX-LED8 ซึ่งมี LED 8 ดวงพรอ มวงจร
ประกอบ การควบคุม LED ทง้ั 8 ดวงใหท ํางานพรอมกนั หรอื ทาํ งานแยกกนั ตองใชค วามรเู กี่ยวกับ
ระบบเลขฐานสองและโครงสรา งของขอ มลู ทงั้ แบบบติ และไบตใ นการกาํ หนดรปู แบบของขอ มลู ทนี่ าํ
มาแสดงผล

8.1 เลขฐานสอง

ในระบบตัวเลขฐานสองนม้ี ีตัวเลขเพยี ง 2 ตัวคอื “0” และ “1” ซึ่งสามารถใชแทนสถานะตํ่า
สูง, เปด-ปด, ไมตอ-ตอ, ดับ-ติด เปนตน แตถาหากนําตัวเลขฐานสองมากกวา 1 หลักมาพิจารณา
เชน 2 หลกั จะทาํ ใหเ กดิ จาํ นวนของการเปลยี่ นแปลงเปน 4 สถานะ หากแทนดว ยการตดิ -ดบั ของหลอด
ไฟ จะได ดับ-ดับ, ดบั -ติด, ติด-ดับ และติด-ติด ถา หากมี 3 หลักก็จะเกิดการเปลีย่ นแปลง 8 สถานะ
จงึ สามารถสรปุ เปน สมการคณติ ศาสตรแ ละความสมั พนั ธข องจาํ นวนหลกั และสถานะของการเปลย่ี น
แปลงไดดงั น้ี

จํานวนของการเปลี่ยนแปลง = 2 จาํ นวนหลกั

ถา มี 2 หลกั จะไดจ าํ นวนของการเปลี่ยนแปลง 22 = 4

ถา มี 3 หลกั จะไดจ าํ นวนของการเปลี่ยนแปลง 23 = 8

ถา มี 4 หลกั จะไดจ ํานวนของการเปล่ียนแปลง 24 = 16

128      Arduino IDE

8.1.1 การนับจาํ นวนของระบบเลขฐานสอง

เนอ่ื งจากเลขฐานสองมตี วั เลขเพยี ง 2 ตวั คอื 0 และ 1 เมอื่ มกี ารนบั จาํ นวนขนึ้ จงึ ตอ งมกี ารเพมิ่
จาํ นวนหลกั ดงั นน้ั เพอ่ื ใหเ หน็ การเปลย่ี นแปลงอยา งชดั เจนจะใชเ ลขฐานสบิ เปน ตวั เปรยี บเทยี บดงั น้ี

เลขฐานสอง เลขฐานสบิ
00 0
01 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15

8.1.2 ตวั แปรของเลขฐานสอง (bit variables)

เมอ่ื เลขฐานสองถกู นาํ มาใชง านมากขนึ้ จาก 1 หลกั เปน 2, 3 จนถงึ 8 หลกั ทาํ ใหเกดิ ตวั แปรใหมๆ ดงั นี้

(1) บติ (bit) หมายถึง หนง่ึ หลกั ของเลขฐานสอง (binary digit) มีเลข 0 กับ 1 เทานนั้

(2) ไบต (byte) หมายถงึ เลขฐานสองจาํ นวน 8 หลกั หรอื เทา กบั 8 บติ ไบตม คี วามสาํ คญั
มากเพราะในระบบคอมพวิ เตอรจ ะประมวลขอ มลู เลขฐานสองครงั้ ละ8บติ หรอื 1ไบตเ ปน อยา งนอ ยเสมอ

(3) LSB : Least Significant Bit หรอื บติ นยั สาํ คญั ตาํ่ สดุ หมายถงึ บติ ทอี่ ยใู นตาํ แหนง
ขวาสดุ ของเลขฐานสอง มคี านํ้าหนกั ประจําหลกั ต่าํ สุดคือ 20 ถา เปน “1” คาของหลกั สุดทายเทากับ 1
x 20 = 1 x 1 = 1 แตถาบติ สุดทา ยนี้เปน “0” คาของหลกั สุดทา ยจะเทากับ 0 x 20 = 0 x 1= 0

     Arduino IDE129

(4) การกําหนดชือ่ หลักของเลขฐานสอง บิตท่ีอยขู วามอื สดุ จะถูกเรยี กวา บิตศูนย (bit
0 : b0) หรอื บติ LSB บติ ถัดมาเรียกวา บติ หน่ึง (bit 1 : b1) ไลไ ปทางซา ยจนครบ สามารถสรปุ ชอื่ หลกั
ของเลขฐานสองไดค ือ b7 b6 b5 b4 b3 b2 b1 b0 โดยตัวเลขแสดงตําแหนง 0-7 ตองเขียนเปนตัวหอ ย
เสมอ แตเพ่ือความสะดวกจงึ ขอเขียนในระดบั เดยี วกนั เปน b7 b6 b5 b4 b3 b2 b1 b0

(5) MSB : Most Significant Bit หรอื บติ นยั สําคญั สงู สดุ หมายถงึ บติ ทอ่ี ยใู นตําแหนง
ซา ยมือสดุ ของเลขฐานสองจาํ นวนนนั้ ๆ หากเลขฐานสองมจี าํ นวน 8 บิต บติ MSB คือบติ 7 (bit 7 :
b7) มคี านาํ้ หนกั ประจําหลกั เทากับ 27 หรอื 128 แตถาหากจํานวนบติ มีนอ ยกวา น้นั เชน 6 บติ , 5 บิต
หรอื 4 บิต บิต MSB จะมีคานาํ้ หนกั ประจําหลกั เปลี่ยนเปน 25, 24 และ 23 ตามลําดับ

8.1.3 คา นาํ้ หนักประจําหลัก

ในเลขฐานสิบจะมีคานาํ้ หนกั ประจําหลกั โดยคิดจากจํานวนสบิ ยกกําลงั โดยในหลักหนวยมี
คานํา้ หนกั ประจําหลกั เปน 100 หรอื 1 หลกั สิบมคี านาํ้ หนกั ประจําหลกั เปน 101 หรอื 10 ในหลักรอย
มีคานํ้าหนกั ประจําหลกั เปน 102 หรอื 100 เปนตน

ในเลขฐานสองกม็ คี า นา้ํ หนกั ประจาํ หลกั เชน กนั แตจ ะคดิ จากจาํ นวนสองยกกาํ ลงั โดยในหลกั
ขวาสดุ คือ บติ 0 หรอื บติ LSB มคี านํ้าหนกั ประจําหลกั เปน 20 หรอื เทา กับ 1 หลกั ถัดมาคือบติ 1 มีคา
น้ําหนกั เปน 21 หรอื 2 ถดั มาเปนบิต 2 มคี านา้ํ หนกั เปน 22 หรอื 4 เมื่อพจิ ารณาทีเ่ ลขฐานสอง 8 บิต

คาน้ําหนกั ประจําหลกั สามารถสรปุ ไดด ังน้ี

บติ คาน้ําหนกั ประจาํ หลัก เลขฐานสบิ

0 20 1

1 21 2

2 22 4

3 23 8

4 24 16

5 25 32

6 26 64

7 27 128

จากคา นา้ํ หนกั ประจาํ หลกั จงึ สามารถแปลงเลขฐานสองเปน ฐานสบิ หรอื แปลงฐานสบิ เปน ฐาน
สองได

130    Arduino IDE

8.2 การแปลงเลขฐานสองและฐานสบิ

8.2.1 การแปลงเลขฐานสองเปนฐานสบิ

เรม่ิ ตนดวยการกําหนดคา นํ้าหนกั ประจําหลกั ของเลขฐานสองแตล ะหลัก แลว คณู ดว ยคาของ
เลขฐานสองในหลกั น้ันๆ สดุ ทา ยนําผลคูณทงั้ หมดมารวมกัน ก็จะไดเ ปนเลขฐานสิบที่ตองการ

ตัวอยางท่ี 8-1

จงแปลงเลขฐานสอง 1011 เปนฐานสบิ

(1) กาํ หนดคา นํ้าหนกั ประจําหลกั

หลัก b3 b2 b1 b0
คา น้ําหนักประจําหลักคอื 23 22 21 20
เลขฐานสอง 1011

(2) จากนนั้ นาํ คา นา้ํ หนกั ประจาํ หลกั คณู กบั คา ของเลขฐานสองประจาํ บติ นนั้ แลว นาํ ผลคณู ของทกุ หลกั
มารวมกนั

เลขฐานสบิ = (1x23) + (0x22) + (1x21) + (1x20)
= (1x8) + (0x4) + (1x2) + (1x1)
= 8+0+2+1
= 11

8.2.2 การแปลงเลขฐานสิบเปนเลขฐานสอง

จะใชว ธิ กี ารหารเลขฐานสบิ จาํ นวนนนั้ ดว ย2แลว เกบ็ คา ของเศษทไ่ี ดจ ากการหารเปน เลขฐานสอง
ในแตล ะหลกั โดยเศษทไ่ี ดจ ากการหารครงั้ แรกไมว า จะเปน “0” หรอื “1” จะเปน หลกั ทม่ี นี ยั สาํ คญั ตา่ํ สดุ
หรอื บติ LSB หรอื บติ 0 (b0) และเศษตวั สดุ ทา ยจะเปน เลขฐานสองหลกั ทมี่ นี ยั สาํ คญั สงู สดุ หรอื บติ MSB

ตัวอยา งท่ี 8-2

จงแปลงเลขฐานสิบ 13 เปน เลขฐานสอง
(1) หาร 13 ดว ย 2 ได 6 เศษ 1 เศษที่ไดจะเปน บติ ศูนย (bo) หรอื บิต LSB น่ันคือ บิต LSB = 1
(2) หาร 6 ดว ย 2 ได 3 เศษ 0 เศษที่ไดจะเปน บติ หนึ่ง (b1) ซึ่งกค็ อื 0
(3) หาร 3 ดว ย 2 ได 1 เศษ 1 เศษท่ีไดจะเปนบิตสอง (b2) ซึ่งก็คอื 1
(4) หาร 1 ดว ย 2 ได 0 เศษ 1 เศษท่ีไดจะเปน บติ สาม (b3) และเปนบิต MSB ซงึ่ กค็ อื 1
ดงั น้ันจะไดเ ลขฐานสองเทา กบั 1101

     Arduino IDE131

8.3 เครื่องหมายของเลขฐานสอง

ในเลขฐานสองสามารถทจี่ ะมที ง้ั คา ตวั เลขทเ่ี ปน บวกและลบเชน เดยี วกบั เลขฐานอน่ื ๆ โดยจะ
ใชบิต MSB เปนตัวกําหนดเครื่องหมายของเลขฐานสอง ถากําหนดบิต MSB เปน “0” เลขจาํ นวน
นัน้ จะมีคาเปนบวก และหากกาํ หนดบติ MSB เปน “1” เลขจํานวนนน้ั จะมีคาเปนลบ

ขอ มลู ตอ ไปนจ้ี ะเปน การแสดงคา ของจาํ นวนเลขฐานสอง เมอื่ คดิ เครอื่ งหมายและไมค ดิ เครอ่ื ง
หมายโดยไดท าํ การแปลงเปนเลขฐานสิบเปรยี บเทียบเพอ่ื ใหเ ห็นความแตกตางอยา งชดั เจน

เลขฐานสอง เลขฐานสบิ

0000 คดิ เคร่ืองหมาย ไมคดิ เครื่องหมาย
0001 0 0
0010 1 1
0011 2 2
0100 3 3
0101 4 4
0110 5 5
0111 6 6
1000 7 7
1001 -8 8
1010 -7 9
1011 -6 10
1100 -5 11
1101 -4 12
1110 -3 13
1111 -2 14

-1 15

ในกรณีคิดเคร่ืองหมาย เมื่อนบั ถอยหลงั จาก 0000 ก็จะเปน 1111 นั่นคือเกิดการถอยหลงั หนงึ่
จาํ นวนหรอื -1 นับถอยหลงั ตอไปจะเปน 1110 ซ่ึงก็คือ -2 เมื่อเปน เชนน้ีการแปลงเลขฐานสองทีค่ ิด
เครอื่ งหมายเปน ฐานสบิ จงึ ไมส ามารถใชว ธิ กี ารแปลงแบบเดมิ ได แตก พ็ อมเี ทคนคิ ในการพจิ ารณา โดย
ใชหลกั เกณฑค านาํ้ หนกั ประจําหลกั ยกตัวอยาง เลขฐานสอง 1000 เลข 1 ท่อี ยหู นา สดุ มคี านา้ํ หนกั
ประจําหลกั เทา กับ 23 หรอื 8 จากการกําหนดวา ถาคิดเครื่องหมาย เมื่อบติ MSB เปน “1” จะตองเปน
คาลบ ดงั นน้ั จึงเปน -8 สว นอกี 3 หลกั ท่ีเหลือจะเปนเลขบวกจงึ กลายเปน -8+0 = -8 มาพจิ ารณาที่เลข
ฐานสอง 1101 บติ แรกเปน ลบเทากับ -8 สว น 3 บิตหลังเปน บวกมคี า +5 จงึ ได -8+5= -3 เปนตน

132     Arduino IDE

8.4 สวนประกอบของขอมลู

ขอ มลู ทใี่ ชใ นการประมวลผลของไมโครคอนโทรลเลอรน นั้ สามารถกระทาํ ไดต งั้ แต1 บติ ขน้ึ ไป
สาํ หรบั ไมโครคอนโทรลเลอร ATmega644 ในชดุ IPST-MicroBOX จะทาํ งานกบั ขอ มลู 1 ถงึ 16 บติ
โดยมกี ารกาํ หนดโครงสรา งสว นประกอบของขอ มลู ทเ่ี ปน มาตรฐานเดยี วกบั ไมโครคอนโทรลเลอรต วั อนื่
ทว่ั โลกและเหมอื นกบั ในคอมพวิ เตอรด ว ย ดงั น้ี

เวิรด

ไบตส ูง (8 บติ บน) ไบตต ่ํา (8 บติ ลาง)

MSB LSB

บิต 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

ขอ มลู * 1 1 1 0 1 1 1 0 0 0 1 1 1 0 0 1

คา นา้ํ หนกั 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20

* สามารถเปลีย่ นแปลงได

บติ -นบิ เบลิ -ไบต- เวริ ด เปน ชอื่ หนว ยของขอ มลู ทใ่ี ชใ นการประมวลผลของไมโครคอนโทรลเลอร

บิต (bit) เปนขนาดของขอมลู เลขฐานสองทเ่ี ล็กท่ีสุด เทากับ 1 หลกั ของเลขฐานสอง

นิบเบลิ (nibble) มีขนาดเทากับ 4 บติ

ไบต (byte) มีขนาดเทากับ 8 บิต

เวริ ด (word) มขี นาดเทากับ 16 บิต หรอื 2 ไบต

8.5 แผงวงจรไฟแสดงผล 8 ดวง : ZX-LED8

เปน แผงวงจรทมี่ ี LED ขนาด 3 มลิ ลเิ มตรสาํ หรบั แสดงผล 8 ดวง พรอ มจดุ ตอ พว งเอาตพ ตุ เพอ่ื
นาํ ไปใชใ นการขบั รเี ลยไ ดด ว ย โดยแผงวงจร ZX-LED8 นจ้ี ะตอ เขา กบั ขาพอรต ใดของแผงวงจร IPST-
SE กไ็ ด โดยใชข าพอรต เพยี งขาเดยี วในการควบคมุ และขบั LED ใหต ดิ ดบั ตามทตี่ อ งการไดพ รอ มกนั
ถึง 8 ดวง มีหนาตาและวงจรทางไฟฟา ของแผงวงจร ZX-LED8 แสดงในรปู ที่ 8-1

ในแผงวงจร ZX-LED8 ใชการติดตอกับแผงวงจรหลัก IPST-SE ในแบบสอ่ื สารขอมลู อนุกรม
รว มกับคําส่งั ทางซอฟตแวร ผูพฒั นาโปรแกรมสามารถเขียนโปรแกรมให ZX-LED8 ติดดับไดต ั้งแต
1 ถึง 8 ตัว หรอื จะเขียนโปรแกรมใหท าํ งานเปนไฟวง่ิ ไดต ้ังแต 1 ถงึ 8 ดวงเชน กัน

     Arduino IDE133

MSB LSB
D7 D6 D5 D4 D3 D2 D1 D0

76543210

+5V
47 47 47 47 47 47 47 47

76543210

510 510 510 510 510 510 510 510

9 8 5 6 7 14 15 16
D7 D6 D5 D4 D3 D2 D1 D0

ZX-LED controller 17
PIC18F14K50 with firmware VDDU
UART 9600 bps. to 8 bit parallel outputs

XT1 XT2 RXD VDD RST VSS PGD PGC 0.1F
2 3 63V
12 +5V 1 4 20 19 18
Ceramic 4k7 4k7
Resonator

(Option)

47F 0.1F
6.3V 63V

ICSP

GND
RxD
+5V

รปู ที่ 8-1 ลกั ษณะและวงจรทางไฟฟา ของแผงวงจรไฟแสดงผล ZX-LED8 ทใี่ ชใ นชดุ กลอ งสมองกล IPST-
MicroBOX (SE)

134      Arduino IDE

  

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 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
KNOB ON
OK Rowl00World0000000000
SW1 0Row01000000000000000 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

  
  

รปู ท่ี 8-2 แนวทางการตอ ใชงานแผงวงจรไฟแสดงผล ZX-LED8 กบั แผงวงจรหลกั IPST-SE ในชุดกลอ ง
สมองกล IPST-MicroBOX (SE)

ท่ีดา นบนของแผงวงจร ZX-LED8 มีจุดตอ JST ซึง่ ตอพว งมาจาก LED ทาํ งานท่ลี อจกิ “1” มี
ระดบั แรงดันไฟตรงขาออกประมาณ +5V ดังแสดงในรปู ที่ 8-3 จึงสามารถใชสัญญาณเอาตพตุ จากจดุ
นไ้ี ปตอ กบั วงจรขบั โหลดกระแสไฟฟา สงู อาทิ แผงวงจรขบั รเี ลย ไดท นั ที โดยไมต อ งเขยี นโปรแกรม
ควบคมุ เพม่ิ เตมิ

8.6 กลมุ คาํ สงั่ โปรแกรมภาษา C/C++ ของไลบรารี ipst.h ท่ีใชค วบคมุ LED
8 ดวงบนแผงวงจร ZX-LED8

pinLED8(); ใชก ําหนดจุดตอ พอรต ของแผงวงจร IPST-SE ท่ีตอ กับแผงวงจร ZX-LED8
LED8 ใชกําหนดคาการแสดงผลของ LED 8 ดวงบนแผงวงจร ZX-LED8

    Arduino IDE135

+5V +5V +5V +5V

   
7 6 5 4 3 2 1 0  
    
7 6 5 4 3 2 1 0      
MSB LSB    
LED8      
+5V
Serial LED-8 RxD
GND
UART communication DC MOTOR
15 SV0 14 SV1 13 SV2 12 SV3
9600 bps. Baud

Secondary Education

28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 30 A6 27 A3
D
 KNOB ON
  OK Rowl00World0000000000
 SW1 0Row01000000000000000 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
+5

17 19 20 RESET 2 RxD1 3 TxD1

     
  

รปู ที่ 8-3 แสดงความสมั พันธของการตดิ ดบั ของ LED กบั ระดบั แรงดนั ไฟฟา ท่ีจดุ ตอ เอาตพ ุต 0 ถึง 7
ของแผงวงจรไฟแสดงผล ZX-LED8

136     Arduino IDE

     

ปฏบิ ัตกิ ารท่ี 2-1 ควบคมุ LED ดวยขอมลู เลขฐานสอง

ในการทดลองนเี้ ปน การเขยี นโปรแกรมภาษา C เพอื่ ควบคมุ ให LED 8 ดวงบนแผงวงจร ZX-LED8 ตดิ หรอื
ดบั ดวยขอมลู ที่กาํ หนดไว

การเช่ือมตอทางฮารด แวร

 เชื่อมตอ สัญญาณจากจุดตอ 20 ของแผงวงจรหลัก IPST-SE เขา กบั จุดตอ RXD ของแผงวงจร ZX-LED8 ดว ย
สายสัญญาณ JST3AA-8

ขนั้ ตอนการทดลอง

2.1.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมท่ี L2-1 บันทึกในช่ือ microbox_LED8test.ino

2.1.2 คอมไพลและอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกทปี่ มุ

76543210

76543210
MSB LSB

LED8

Serial LED-8
UART communication
9600 bps. Baud

Secondary Education
+5V
RxD 28 A4 25 A1 8 SCL 9 SDA
GND 29 A5 26 A2 USB
DC MOTOR24 A030 A6 27 A3
15 SV0 14 SV1 13 SV2 12 SV3D
KNOB ON
OK Rowl00World0000000000
SW1 0Row01000000000000000 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
+5

17 19 20 RESET 2 RxD1 3 TxD1

  

รปู ท่ี L2-1 การตอ วงจรเพ่ือทําการทดลองสาํ หรบั ปฏบิ ัตกิ ารท่ี 2 และ 3

    Arduino IDE137

#include <ipst.h> // ผนวกไลบรารหี ลกั
void setup() // เช่ือมตอ ZX-LED8 ผา นทางจดุ ตอพอรต 20
{
pinLED8(20);
}

void loop() // LED บิต 7 และ 0 ติดสวา ง ท่ีเหลอื ดบั หมด
{
LED8(0b10000001);
}
คําอธบิ ายโปรแกรม

การทํางานของโปรแกรมน้ี ขอ มลู เลขฐานสอง 10000001 ถกู สงไปยงั แผงวงจร ZX-LED8 ผานฟงกช ่ัน
LED8 โดยใชจุดตอ พอรต 20 ซ่ึงประกาศไวดว ยฟงกช ่ัน pinLED8 ท่ีสวนของ setup()

ขอ มลู 8 บิตท่ีสงไปในรูปของเลขฐานสองสามารถเทียบเคียงไดกบั ตาํ แหนงหลักของ LED ท้ัง 8 ดวง
น่ันเอง โดยคาของหลักขอ มลู ใดเปน “1” LEDประจําหลกั นั้นจะตดิ สวา ง ในทางกลับกันถามคี า เปน “0” LED
กจ็ ะดบั ดงั นน้ั ถาทําการแกไขโปรแกรมเพ่ือสงคา ใหมจ ะไดผลลัพธท ่ีแตกตา งกันไป

โปรแกรมที่ L2-1 : ไฟล microbox_LED8test.ino โปรแกรมภาษา C สาํ หรบั ทดลองควบคมุ LED 8 ดวง

2.1.3 สังเกตผลการทํางานที่แผงวงจร ZX-LED8

LED ที่หลัก 0 และ 7 ของแผงวงจร ZX-LED8 ตดิ สวาง จากผลของขอ มูล 10000001 ท่ีกาํ หนดใน
โปรแกรม

76 5 4 3 2 1 0

2.1.4 ทดลองแกไ ขขอ มลู แสดงผลเปน LED8(0b11110000); ทาํ การคอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร
IPST-SE

ไดผลการทํางานดงั น้ี

76 5 4 3 2 1 0

2.1.5 ทดลองแกไขขอมูลแสดงผลเปน led8(0b00011000); ทําการคอมไพลไฟลโปรเจก็ ตใ หม แลว ดาวนโหลด
โปรแกรมไปยงั แผงวงจร IPST-SE

ไดผลการทํางานดงั น้ี

76 5 4 3 2 1 0

138     Arduino IDE

#include <ipst.h> // ผนวกไลบรารหี ลกั
void setup()
{}
void loop()
{

unsigned char i=0;
while(1)
{

LED8(20,i++); // กาํ หนดใหใ ชจุดตอพอรต 20 ในการควบคมุ ZX-LED8
// โดยแสดงผลดว ยคา ของ i ทเ่ี ปลี่ยนแปลงจาก 00000000 ถึง 11111111

delay(300);
}
}

คําอธบิ ายโปรแกรม

การทาํ งานของโปรแกรมน้ี ขอ มลู เลขฐานสองทกี่ าํ หนดโดยตวั แปร i ถกู สง ออกไปยงั แผงวงจร ZX-LED8
ผานฟงกชั่น LED8 ท่ีเขยี นในแบบใหม ใหเหลือเพียงบรรทัดเดยี ว โดยกําหนดพอรต ท่ีใชในการตดิ ตอ แลว ตอ
ดว ยขอมลู ที่ตอ งการแสดงผล ทําใหโปรแกรมกระชับขน้ึ

โดยขอมลู 8 บิตท่ีสงไปในรูปของเลขฐานสองน้นั มีคา 00000000 ถงึ 11111111 ตามชนดิ ของตวั แปร i
ท่ีกาํ หนดใหเ ปน แบบ char ซ่ึงมขี นาด 8 บิต

โปรแกรมท่ี L2-2 : ไฟล microbox_LED8binary.ino โปรแกรมภาษา C/C++ สาํ หรบั ทดลองควบคมุ LED 8
ดวง ใหแ สดงผลตามคา ของเลขฐานสองขนาด 8 บติ จาก 00000000 ถงึ 11111111

2.1.6 เขยี นโปรแกรมท่ี L2-2 บันทึกไฟลเปน microbox_LED8binary.ino จากน้ันทําการคอมไพลและอปั โหลด
โปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทปี่ มุ

2.1.6 สังเกตผลการทํางานท่ีแผงวงจร ZX-LED8

LED ท้ัง 8 ดวงแสดงเปนรหัสเลขฐานสอง 8 บิต เรมิ่ จาก 00000000 ถงึ 11111111 แลว กลบั มาเรมิ่ ตน
ท่ี 00000000 ใหมอ กี ครง้ั โดยมีอัตราการเปลี่ยนขอ มลู ทุกๆ 0.3 วินาที

     Arduino IDE139

ปฏบิ ัตกิ ารที่ 2-2 ไฟกะพรบิ LED 8 ดวง

ในการทดลองนเ้ี ปน การเขยี นโปรแกรมแกรมควบคมุ ให LED 8 ดวงบนแผงวงจร ZX-LED8 ตดิ หรอื ดบั ดว ย
ขอ มลู ท่ีกาํ หนด โดยในการทดลองนี้จะสงขอ มลู 11111111 ไปแสดงผลในแบบไฟกะพริบ

การเช่ือมตอ ทางฮารด แวร

 เช่ือมตอ สัญญาณจากจุดตอ 20 ของแผงวงจรหลัก IPST-SE เขา กบั จุดตอ RXD ของแผงวงจร ZX-LED8 ดว ย
สายสัญญาณ JST3AA-8

ขนั้ ตอนการทดลอง

2.2.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมที่ L2-3 บันทึกในช่ือ microbox_LED8blink.ino

2.2.2 คอมไพลและอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกทป่ี มุ

2.2.3 รนั โปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8

LED ทั้ง 8 ดวงของแผงวงจร ZX-LED8 ตดิ กะพรบิ ในทุกๆ 1 วินาที โดยประมาณ

#include <ipst.h> // ผนวกไลบรารหี ลกั
void setup()
{} // กาํ หนดให LED ทง้ั 8 ดวงตดิ หมด
void loop() // หนวงเวลา 0.5 วนิ าที
{ // กาํ หนดให LED ทง้ั 8 ดวงดับหมด
// หนวงเวลา 0.5 วนิ าที
LED8(20,0b11111111);
sleep(500);
LED8(20,0b00000000);
sleep(500);

}

คําอธบิ ายโปรแกรม

การทํางานของโปรแกรมนี้ มขี อ มลู เลขฐานสอง 2 ชุดท่ีสงออกไปยงั แผงวงจร ZX-LED8 ดว ยฟงกช่ัน
LED8 ที่เขียนในแบบกําหนดพอรตท่ีใชในการติดตอแลวตอดวยขอมูลที่ตองการแสดงผล โดยชุดแรกคือ
11111111 ทําให LED 8 ดวงตดิ สวา งทง้ั หมด สวนชดุ ท่ี 2 คอื 00000000 ทําให LED ท้ังหมดดบั

อตั ราการตดิ ดบั หรอื กะพรบิ ถูกกาํ หนดโดยฟง กช่ัน sleep() ซ่ึงมกี ารทํางานเหมอื นกับ delay() โดยใน
โปรแกรมน้ีกาํ หนดใหเ ทากบั 500 มลิ ลิวินาทีหรอื 0.5 วินาที

โปรแกรมที่ L2-3 : ไฟล microbox_LED8blink.ino โปรแกรมภาษา C/C++ สาํ หรบั ควบคุม LED กะพรบิ
พรอ มกนั 8 ดวง

140     Arduino IDE

     


ปฏบิ ัตกิ ารที่ 3-1 ไฟวง่ิ LED 8 ดวง

ในการทดลองนเ้ี ปน การเขยี นโปรแกรมภาษา C เพอื่ ควบคมุ ให LED 8 ดวงบนแผงวงจร ZX-LED8 ทาํ งาน
ในลักษณะไฟวิ่งทางซา ยและขวา

การเชื่อมตอทางฮารด แวร

 เชื่อมตอ สัญญาณจากจุดตอ 20 ของแผงวงจรหลัก IPST-SE เขา กบั จุดตอ RXD ของแผงวงจร ZX-LED8 ดว ย
สายสัญญาณ JST3AA-8 (รปู ท่ี L2-1 ในปฏบิ ัตกิ ารที่ 2 ของบทท่ี 8)

ขน้ั ตอนการทดลอง

3.1.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมท่ี L3-1 บันทึกในช่ือ microbox_LED8running.ino

3.1.2 คอมไพลและอัปโหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกท่ีปุม

3.1.3 รนั โปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร DSP-4

LED จะตดิ ครงั้ ละ 1 ดวงจากตาํ แหนงทอ่ี ยทู างขวาสดุ (บิต 0) ไลม าตามลาํ ดบั ในลกั ษณะไฟว่ิงจาก
ขวาไปซายจนสุดทางขวา (บิต 7) จากน้ันจะไลกลบั ทิศทางเปนติดจากดวงซายสดุ (บิต 7) กลบั มายงั ดวงขวา
สุด (บิต 0) ในลักษณะไฟว่ิงจากซายมาขวา วนทํางานเชน นี้ไปตลอด

76 5 4 3 2 1 0
76 5 4 3 2 1 0

7 6 5 4 3 2 1 0   

76 5 4 3 2 1 0

76 5 4 3 2 1 0

      Arduino IDE141

#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
void setup()
{
// แสดงขอ ความของการทดลอง
glcdClear();
glcd(0,0,"Example: LED8_02");
glcd(2,0,"connect LED8 to (20)");
glcd(4,0,"LED running LEFT");
glcd(5,0," and RIGHT");

pinLED8(20); // ใชจุดตอ พอรต 20 ในการเช่ือมตอ
}

void loop() // กาํ หนดใหเ ลอ่ื นขอ มูลไปทางซาย
{ // เลอ่ื นบิตไปทางซายแลว สง ไปแสดงที่ ZX-LED8 โดยมีคา ต้ังตน ท่ี 00000001
// หนวงเวลา 0.3 วนิ าที
int i; // กาํ หนดใหเ ลอ่ื นขอ มูลไปทางขวา
for (i=0;i<8;i++) // เลอ่ื นบิตไปทางขวาแลว สงไปแสดงที่ ZX-LED8
{ // หนวงเวลา 0.3 วนิ าที

LED8(0x01<<i);
delay(300);
}
for (i=6;i>0;i--)
{
LED8(0x01<<i);
delay(300);
}
}
คําอธบิ ายโปรแกรม

โปรแกรมนท้ี าํ งานโดยอาศยั การสง ขอ มลู ผา นฟง กช น่ั LED8 เพอ่ื ให LED ตดิ ครง้ั ละ 1 ดวงนานประมาณ
0.3 วินาที โดยไลลําดบั จากบิต 0 ไปยงั บิต 7 และวนกลับจากบิต 7 กลบั มายงั บิต 0 เปน เชนนอี้ ยา งตอ เนอื่ ง

การทํางานของ LED ในลักษณะไฟวิ่งนี้ของโปรแกรมนี้เกิดจากการเล่ือนบติ ขอมลู ทั้งทางซา ยและขวา
โดยหลังจากเล่ือนขอ มลู 1 ครั้งกจ็ ะสงไปแสดงผลนาน 0.3 วินาที จากน้นั จงึ เล่ือนขอ มลู ในครง้ั ตอ ไป

ดา นอตั ราเรว็ ในการแสดงผลของ LED จะขน้ึ อยกู บั คา หนว งเวลาของฟง กช น่ั delay (หรอื อาจใช sleep
กไ็ ด) ถา กาํ หนดใหม คี า นอยกวา 300 กจ็ ะทําให LED แสดงผลการเปลี่ยนแปลงไดเ รว็ มากขน้ึ นั่นคือ ไดเหน็
ไฟวงิ่ เรว็ ขน้ึ นน่ั เอง

โปรแกรมที่ L3-1 : ไฟล microbox_LED8running.ino โปรแกรมภาษา C/C++ สาํ หรบั ทดลองควบคมุ ไฟวงิ่
LED 8 ดวง

142      Arduino IDE

ปฏบิ ัตกิ ารท่ี 3-2 ขับ LED 8 ดวง ดวยรปู แบบขอมลู ท่ีกาํ หนดลว งหนา

ในการทดลองนเ้ี ปน การเขยี นโปรแกรมภาษา C เพอื่ ควบคมุ ให LED 8 ดวงบนแผงวงจร ZX-LED8 ทาํ งาน
ในลักษณะไฟวงิ่ ตามรปู แบบขอ มลู ทก่ี าํ หนดไวลว งหนา โดยใชต วั แปรแบบอะเรยใ นการเกบ็ ตารางรปู แบบขอ มลู

การเช่ือมตอทางฮารด แวร

 เช่ือมตอ สัญญาณจากจุดตอ 20 ของแผงวงจรหลัก IPST-SE เขา กบั จุดตอ RXD ของแผงวงจร ZX-LED8 ดว ย
สายสัญญาณ JST3AA-8 (รปู ท่ี L2-1 ในปฏิบัตกิ ารที่ 2 ของบทที่ 8)

ขั้นตอนการทดลอง

3.2.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมที่ L3-2 บันทึกในช่ือ microbox_LED8pattern.ino

3.2.2 คอมไพลและอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกทปี่ มุ

3.2.3 รนั โปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8

LED จะตดิ ตามขอมลู ท่ีกาํ หนด ซ่ึงมดี ว ยกนั 4 แบบ โดยเรมิ่ จากแบบท่ี 1 ไปถงึ 4 แลว ทํางานยอ นกลับ
จากแบบท่ี 4 มายงั แบบท่ี 1 วนทํางานเชนน้ีไปตลอด

  76543210

  76543210

 76543210

   1 0   
7 6 5 4 3 2

 
76543210

 76543210

 76543210

   7 6 5 43 210

     Arduino IDE143

#include <ipst.h> // ผนวกไลบรารหี ลกั

int pattern[]={ // กาํ หนดรูปแบบขอ มูลแสดงผล
0b00011000, // รปู แบบขอ มูล #1
0b00111100, // รปู แบบขอ มูล #2
0b01111110, // รปู แบบขอ มูล #3
0b11111111}; // รปู แบบขอ มูล #4

void setup()
{

// แสดงขอ ความของการทดลอง
glcdClear();
glcd(0,0,"Example: LED8_pattern");
glcd(2,0,"connect LED8 to (20)");
glcd(4,0,"Pattern LED demo");

pinLED8(20); // ใชจุดตอ พอรต 20 ในการเชื่อมตอ
}

void loop() // เปลี่ยนรปู แบบขอ มูลแสดงผล
{ // แสดงผลตามรูปแบบขอ มูลจาก 1 ถึง 4

int i; // เปลี่ยนรูปแบบขอ มูลแสดงผล
for (i=0;i<4;i++) // แสดงผลตามรปู แบบขอ มูลจาก 4 ถึง 1
{

LED8(pattern[i]);
delay(300);
}
for (i=2;i>0;i--)
{
LED8(pattern[i]);
delay(300);
}
}
คําอธบิ ายโปรแกรม

ขอ มลู สาํ หรบั การแสดงผลของโปรแกรมจะแตกตา งไปจากตวั อยา งทผ่ี า นๆ มา ในโปรแกรมมกี ารกาํ หนด
ตารางรปู แบบขอมลู ไวลวงหนาเก็บไวในตวั แปร pattern ที่เปน ตัวแปรแบบอะเรย 4 ชุด จากน้นั โปรแกรมจะ
ใชตวั แปร i เปน ตัวช้ีขอ มลู ของ pattern ออกมาแสดงผลโดยผา นฟง กช ั่น LED8 ขอ มลู แตละชุดจะไดร บั การ
แสดงผลนานประมาณ 0.3 วินาที

โปรแกรมท่ี L3-2 : ไฟล microbox_LED8pattern.ino โปรแกรมภาษา C/C++ สาํ หรบั ควบคมุ ไฟวง่ิ LED 8
ดวง ในแบบกาํ หนดรปู แบบการแสดงผลดว ยตวั แปรชนดิ อะเรย

144      Arduino IDE

ปฏบิ ัตกิ ารที่ 3-3 ขบั LED 8 ดวง แสดงผลในแบบกราฟแทง

ในการทดลองนเ้ี ปน การเขยี นโปรแกรมภาษา C เพอ่ื ควบคมุ ให LED 8 ดวงบนแผงวงจร ZX-LED8 ทาํ งาน
ในลักษณะไฟวง่ิ ตามรูปแบบขอ มลู ทกี่ าํ หนดไวลว งหนา โดยใชต วั แปรแบบอะเรยใ นการเกบ็ ตารางรปู แบบขอ มลู

การเช่ือมตอ ทางฮารด แวร

 เช่ือมตอ สัญญาณจากจุดตอ 20 ของแผงวงจรหลัก IPST-SE เขา กบั จุดตอ RXD ของแผงวงจร ZX-LED8 ดว ย
สายสัญญาณ JST3AA-8 (รปู ที่ L2-1 ในปฏบิ ัตกิ ารท่ี 2 ของบทที่ 8)

ข้ันตอนการทดลอง

3.3.1 เปด ซอฟตแ วร Wiring 1.0 สรา งไฟลใ หม พมิ พโ ปรแกรมที่ L3-3 บนั ทกึ ในชอ่ื microbox_LED8bargraph.ino

3.3.2 คอมไพลและอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกทป่ี มุ

3.3.3 รนั โปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8

LED จะเรมิ่ ติดจากดวงซายสุด (บิต 0) ตามดว ยบิต 1 โดยที่ LED ของบิต 0 ยงั ตดิ อยู จากนน้ั จะทยอย
คดิ สวา งเพิ่มข้นึ ทลี ะดวง จนครบ 8 ดวง จากน้ันจะเรม่ิ ดบั ลงทีละดวงจาก LED บิต 7 ไลตามลําดบั จนถึงบิต 1
จากน้นั วนกลบั LED บิต 1 ตดิ สวา ง ตามดว ยบิต 2 วนทาํ งานเชนน้ไี ปตลอด ทําใหดแู ลว คลา ยกราฟแทงที่มกี าร
เพ่ิมคาและลดคาตลอดเวลา

76543210
76543210

7 6 5 4 3 2 1 0    

76543210

76543210

76543210

ตอ ยอด

ผูพัฒนาโปรแกรมสามารถนําเทคนิคน้ีไปใชในการเขียนโปรแกรมเพ่ือแสดงคาของสัญญาณไฟฟาท่ีได
จากตัวตรวจจบั แบบอะนาลอก โดยเมอ่ื คา ของสญั ญาณไฟฟามคี า ตา้ํ LED จะตดิ ดวงเดยี ว และคดิ เพิ่มขึน้ เมอื่
ระดบั สญั ญาณไฟฟา มคี า สูงขน้ึ

     Arduino IDE145

#include <ipst.h> // ผนวกไลบรารหี ลกั
void setup()
{
// แสดงขอ ความของการทดลอง
glcdClear();
glcd(0,0,"Example: LED8_bar");
glcd(2,0,"connect LED8 to (20)");
glcd(4,0,"Solid bargraph demo");

pinLED8(20); // ใชจดุ ตอ พอรต 20 ในการเช่ือมตอ
}

void loop() // สรา งขอ มูลแสดงผลดว ยการออรบ ิต
{

int i,n;
n=0;
for (i=0;i<8;i++)
{

n|=(0x01<<i);
LED8(n);
delay(300);
}

for (i=7;i>0;i--) // สรา งขอ มูลแสดงผลดว ยการแอนดบ ิต
{

n&=0xff^(0x01<<i);
LED8(n);
delay(300);
}
}
คําอธบิ ายโปรแกรม

ขอ มลู สาํ หรบั การแสดงผลของโปรแกรมนจ้ี ะใชต วั ดาํ เนนิ การตรรกะหรอื ลอจกิ ในระดบั บติ ทง้ั การออร (|)
และการแอนด (&) โดยการออรบ ติ ในโปรแกรมทาํ ใหบ ติ ขอ มลู ทเ่ี ปน “1” อยแู ตเ ดมิ ไมเ ปลย่ี น จงึ นาํ มาใชใ นการ
เพิ่มจํานวนบิตที่ทําให LED ตดิ สวา ง สวนการแอนดบิตในโปรแกรมนีจ้ ะทําใหบิตที่มนี ัยสาํ คญั สูงเปลี่ยนเปน
“0” ทลี ะบิต ทําใหจํานวนของ LED ท่ีตดิ สวา งลดลง

โปรแกรมที่ L3-3 : ไฟล microbox_LED8bargraph.ino โปรแกรมภาษา C/C++ สาํ หรบั ทดลองควบคมุ ไฟวงิ่
LED 8 ดวง ในแบบกราฟแทง

146     Arduino IDE

    Arduino IDE147

 

   
 

ในบทน้ีเปนการนําแผงวงจรสวิตชเขามาตอทํางานรวมกับไมโครคอนโทรลเลอรของแผง
วงจร IPST-SE อนั เปน การเรยี นรกู ารอา นคาจากอนิ พตุ มาประมวลผลเพอ่ื สงสัญญาณออกไปควบคุม
อปุ กรณท างเอาตพตุ อยางงา ยน่ันเอง

ปฏบิ ตั กิ ารทงั้ หมดทนี่ าํ เสนอในบทน้ีผพู ฒั นาสามารถนาํ ความรไู ปใชส รา งระบบควบคมุ อยา งงา ย
ทม่ี กี ารตรวจจบั อนิ พตุ จากการกดสวติ ช แลว กาํ หนดใหโ ปรแกรมทอี่ อกแบบนนั้ มกี ารตอบสนองอะไร
บางอยา งออกมา เชน เมอ่ื มกี ารกดสวติ ช ระบบตอบสนองดว ยการเปด /ปด ไฟ, ควบคมุ มอเตอร หรอื สง
ขอ มลู อณุ หภมู ไิ ปแสดงผลยงั คอมพวิ เตอรท เ่ี ชอ่ื มตอ อยู เปน ตน

9.1 ความรเู บ้ืองตน เกี่ยวกบั การทาํ งานของสวติ ช

สวติ ชเปนอปุ กรณพ น้ื ฐานที่มบี ทบาทและใชประโยชนอยา งมากในวงจรอเิ ล็กทรอนกิ ส โดย
เฉพาะอยางยิ่งในการใชงานเปนอุปกรณตัดตอหรืออุปกรณสําหรับสรางสัญญาณอินพุตใหแกวงจร
โดยเฉพาะอยา งยงิ่ กับวงจรดิจติ อล

9.1.1 สวิตชก ดตดิ ปลอยดบั (Push-button switch/Tact switch)

เปน อปุ กรณส าํ หรบั ตดั ตอ วงจรไฟฟา ทน่ี ยิ มใชอ ยา งมากในระบบไมโครคอนโทรลเลอร โดย
สวติ ชแ บบนปี้ กตเิ มอ่ื ไมม กี ารกดหนา สมั ผสั ของสวติ ชจ ะแยกออกจากกนั หรอื เรยี กวา เปด วงจรเมอื่ มกี าร
กดลงบนปมุ ดา นบนซงึ่ ทาํ มาจากยางสงั เคราะหห รอื พลาสตกิ ทาํ ใหห นา สมั ผสั ตวั นาํ ภายในสวติ ชต อ ถงึ
กนั กระแสไฟฟา กจ็ ะสามารถไหลผา นไปได

รปู รา งของสวิตชกดติดปลอยดบั มดี ว ยกันหลายแบบ ทงั้ แบบบดั กรีตอสาย แบบลงแผน วงจร
พมิ พ แบบติดหนา ปด และในบางแบบมีไฟแสดงในตัว สวนขาตอใชง านมีต้ังแต 2 ขาข้ึนไป ในการ
ใชงานกับไมโครคอนโทรลเลอรน้ันมักใชสวิตชเปนอุปกรณสรางสัญญาณอินพุตแบบหนึ่ง โดยตอ
ปลายขา งหนง่ึ กบั ตวั ตา นทาน และปลายของตวั ตา นทานนน้ั ตอ กบั ไฟเลย้ี งหรอื ทเ่ี รยี กวา “พลู อปั ” ทจ่ี ดุ

148     Arduino IDE

ปมุ ยางสําหรับกด +5V

R1
4k7

เอาตพุต = +5V เปนลอจกิ "1"

S1 ไมมีกระแสไฟฟา ไหล
เนื่องจากเปด วงจร

(ก) รูปรางของสวติ ชก ดตดิ ปลอยดบั

+5V

R1 เอาตพตุ = 0V เกิดลอจิก "0"
4k7
ทิศทางการไหลของ
กดสวติ ช กระแสไฟฟา

(ข) วงจรสมมูลของสวติ ชก ดติดปลอยดบั เกดิ การตอ วงจร S1

(ค) สัญลักษณที่ใชในวงจร (ง) แสดงวงจรการนาํ สวติ ชก ดตดิ ปลอ ยดบั ไปใชใ น
การสรา งสญั ญาณลอจกิ ใหแ กไ มโครคอนโทรลเลอร

รปู ท่ี 9-1 แสดงรปู รา งและสญั ลกั ษณข องสวิตชแบบกดตดิ ปลอ ยดบั ท่ีใชในการทดลอง

ตอวงจรระหวางสวิตชกับตัวตานทานจะเปนจุดที่ตอเขากับไมโครคอนโทรลเลอรเพื่ออานคาลอจิก
ของการกดสวติ ชด งั แสดงในรปู ท่ี2-1 (ง) ถา หากไมม กี ารกดสวติ ช สถานะลอจกิ ขอสวติ ชต วั นนั้ จะเปน
“1” อนั เน่ืองจากการตอ ตัวตา นทานพลู อปั และเมื่อมกี ารกดสวติ ช จะเกิดสถานะลอจกิ เปน “0” เน่ือง
จากจุดตอสัญญาณน้ันถกู ตอลงกราวด

9.1.2 การตอ สวติ ชเพ่ือกาํ หนดลอจกิ ทางอินพตุ

ในรปู ที่ 9-2 เปนการตอสวติ ชก ดติดปลอยดับเพอ่ื สรา งสญั ญาณอนิ พตุ ลอจิก “0” ใหแ กวงจร
โดยเมื่อกดสวติ ช S1 จะเปนการตอ ขาอนิ พตุ ลงกราวด อยา งไรก็ตาม การตอสวติ ชเพยี งตวั เดยี วอาจ
ทาํ ใหส ถานะลอจกิ ทางอนิ พตุ ในขณะทไี่ มม กี ารกดสวติ ชม คี วามไมแ นน อน จงึ ควรตอ ตวั ตา นทานเขา
กับไฟเลย้ี งหรอื ลงกราวดเ พอื่ กําหนดสถานะทางลอจกิ ในขณะทไ่ี มม กี ารกดสวติ ชใ หแกวงจร

S1 เอาตพ ตุ ตอ กบั

ขาพอรต อินพตุ ของ รปู ท่ี 9-2 การเชอื่ มตอ สวติ ชก ดตดิ ปลอ ยดบั เขา
ไมโครคอนโทรลเลอร กบั อนิ พตุ ของไมโครคอนโทรลเลอรอ ยา งงา ย

    Arduino IDE149

+5V +5V S1 เอาตพุตตอ กบั
ขาพอรต อินพตุ ของ
R1 R1 ไมโครคอนโทรลเลอร
100k
S1 10k เอาตพ ุตตอกับ
ขาพอรตอนิ พุตของ
ไมโครคอนโทรลเลอร

รปู ท่ี 9-3 การเชื่อมตอ สวิตชกดตดิ ปลอ ยดบั เขา รูปท่ี 9-4 การเชื่อมตอสวิตชกดติดปลอยดับเขา

กบั อนิ พตุ ของไมโครคอนโทรลเลอรแ บบมตี วั ตา นทาน กบั อนิ พตุ ของไมโครคอนโทรลเลอรแ บบมตี วั ตา นทาน

ตอ พลู อปั ทาํ ใหส ถานะลอจกิ เมอ่ื ไมม กี ารกดสวติ ช ตอ พลู ดาวน ทาํ ใหส ถานะลอจกิ เมอ่ื ไมก ดสวติ ชเ ปน

เปน ลอจิก "1" ลอจกิ "0"

ในรปู ที่9-3 เปน การตอ สวติ ชเ ขา กบั อนิ พตุ ของไมโครคอนโทรลเลอร โดยมกี ารตอ ตวั ตา นทาน
เขา ทข่ี าอนิ พตุ ของวงจรและไฟเลย้ี ง +5V เรยี กการตอ ตวั ตา นทานแบบนว้ี า การตอ ตวั ตา นทานพลู อปั
(pull-up)ดว ยการตอ ตวั ตา นทานในลกั ษณะนท้ี าํ ใหเ มอ่ื ยงั ไมม กี ารกดสวติ ช สถานะลอจกิ ทอ่ี นิ พตุ ตอ ง
เปนลอจกิ “1” อยา งแนน อน

สว นในรปู ท่ี 9-4 เปน การตอ สวติ ชเ ขา กบั อนิ พตุ ในอกี ลกั ษณะหนงึ่ ทม่ี กี ารตอ ตวั ตา นทานเขา ท่ี
ขาอนิ พตุ ของวงจรและกราวด จะเรียกการตอตัวตานทานแบบนวี้ า การตอ ตวั ตานทานพลู ดาวน (pull-
down) ดว ยการตอ ตวั ตา นทานในลกั ษณะนที้ าํ ใหเ มอื่ ยงั ไมม กี ารกดสวติ ชส ถานะลอจกิ ทข่ี าอนิ พตุ เปน
ลอจกิ “0”

9.1.3 สัญญาณรบกวนของการกดสวิตช

ในทางทฤษฎี เมอ่ื สวติ ชม กี ารเปด ปด วงจร สญั ญาณไฟฟา จะถกู ปลดหรอื ตอ เขา ไปในวงจรและ
สามารถวเิ คราะหผ ลการทาํ งานได แตใ นความเปน จรงิ เมอ่ื มกี ารกดและปลอ ยสวติ ช หนา สมั ผสั ของสวติ ช
จะเกดิ การสนั่ และกวา ทจี่ ะตอ หรอื เปด วงจรอยา งสมบรู ณน นั้ จะตอ งใชเ วลาชว่ั ขณะหนง่ึ ซง่ึ มนษุ ยไ มส ามารถ
มองเหน็ ภาวะนนั้ ได แตว งจรอเิ ลก็ ทรอนกิ สจ ะตรวจจบั ความไมค งทนี่ นั้ ได และมองเปน สญั ญาณรบกวน

สัญญาณรบกวนที่เกิดขึ้นนั้นเรียกวา สัญญาณรบกวนจากการสั่นของหนาสัมผัสสวิตช หรอื
การเบาซ (bounce) ถา หากนาํ สวติ ชน น้ั ไปใชเ ปน อปุ กรณเ พอื่ ปอ นสญั ญาณอนิ พตุ ใหแ กว งจรนบั ใน
ทางอดุ มคตเิ ม่ือกดสวติ ช 1 ครงั้ จะไดส ญั ญาณพลั สเพยี ง 1 ลูกเพอ่ื สง ไปยงั วงจรเพอื่ เปลย่ี นคาหนง่ึ คา
แตทางปฏบิ ัติ จะมีสญั ญาณพลั สส งออกไปอาจจะมเี พยี ง 1 ลกู ตามตองการหรอื มากกวา นนั้ ก็ได ซ่งึ
ไมอ าจคาดเดาได โดยสญั ญาณพลั สทเี่ กิดขึ้นนั้นจะเกดิ ขึ้นเมื่อสวติ ชเริม่ ตอวงจร และเมื่อสวติ ชกําลัง
เปดวงจรเน่อื งจากการปลอยสวติ ช ในรปู ท่ี 9-5 แสดงปรากฏการณด ังกลา ว

150      Arduino IDE

+5V +5V +5V

R1 R1 R1
10k 10k
S1 10k
OUTPUT S1 OUTPUT S1

+5V +5V +5V

0V 0V 0V

สัญญาณรบกวนทเี่ กดิ ข้นึ สญั ญาณรบกวนทเ่ี กิดขึ้น
จากการกดสวติ ช จากการปลอยสวติ ช

รปู ท่ี 9-5 แสดงการเกดิ สญั ญาณรบกวนเมอ่ื มกี ารกดและปลอ ยสวิตชในวงจรดจิ ติ อล

9.1.4 การแกไ ขสญั ญาณรบกวนของการกดสวติ ชเ มอ่ื ใชง านกบั ไมโครคอนโทรลเลอร

หลกั การแกไ ขสญั ญาณรบกวนแบบนค้ี อื หนว งเวลาการเกดิ ขน้ึ ของสญั ญาณพลั สเ ลก็ นอ ย เพอื่ ให
วงจรไมส นใจสญั ญาณทเี่กดิ ขน้ึ ในชว งเรม่ิ ตน กดสวติ ชเรยี กการแกไ ขสญั ญาณรบกวนนว้ี า ดเีบาซ(debounce)

วธิ กี ารแรก ทาํ ไดโ ดยใชอ ปุ กรณอ เิ ลก็ ทรอนกิ สพ นื้ ฐานอยา งตวั ตา นทานและตวั เกบ็ ประจุโดยตอ
กนั ในลกั ษณะวงจร RC อนิ ตเิ กรเตอร ดงั ในรปู ที่ 9-6 ดว ยวธิ กี ารนจ้ี ะชว ยลดผลของสญั ญาณรบกวนที่
เกดิ ขนึ้ จากการกดสวติ ชไ ดใ นระดบั หนงึ่ โดยประสทิ ธภิ าพของวงจรจะขนึ้ กบั การเลอื กคา ของตวั ตา นทาน
และตวั เกบ็ ประจุ หากเลอื กคา ของตวั เกบ็ ประจนุ อ ยเกนิ ไป อาจไมส ามารถลดสญั ญาณรบกวนได แตถ า
เลอื กคา มากเกนิ ไปจะทาํ ใหค วามไวในการตรวจจบั การกดสวติ ชล ดลง นน่ั คอื อาจตอ งกดสวติ ชม ากกวา
1 ครง้ั เพอื่ ใหไ ดส ญั ญาณท่ตี องการ

+5V

R1
10k

S1 R3 OUTPUT

R2

C1

วงจร RC อนิ ติเกรเตอร

รปู ท่ี 9-6 การตอ วงจร RC อินตเิ กรเตอรเ พ่ือแกไ ขปญหาสญั ญาณรบกวนจากการกดสวิตช


Click to View FlipBook Version