Learning 7 Segment + Arduino
![](https://commandronestore.com/learning/learning_img/preview_img/7segment/3.gif)
การควบคุม LED แต่ละ Segment ขึ้นอยู่กับการจ่าไฟไปยัง Segment นั้นๆ แต่ไม่ได้หมายความว่า เมื่อจ่ายไฟบวกไปยัง Segment ใดๆ แล้ว Segment นั้นไฟจะติด เพราะมันขึ้นอยู่กับว่า 7 Segment ของเราเป็นแบบขาบวกร่วม หรือลบร่วม | ||
![]() | ||
แบบ Common Anode เมื่อต้องการให้ไฟที่ Segment ใดๆติด จะต้องให้ขาของ Segment นั้นเป็น 0 หรือ LOW | ||
แบบ Common Cathode เมื่อต้องการให้ไฟที่ Segment ใดๆติด จะต้องให้ขาของ Segment นั้นเป็น 1 หรือ HIGH | ||
เนื่องจาก ตามหลักการที่ว่า กระแสไฟฟ้าย่อมไหลจาก ศักย์สูง ไปยัง ศักย์ต่ำ นั่นหมายถึง การที่ไฟ LED จะติดได้ จะต้องเกิดจากการที่มีกระแสไฟฟ้าไหลผ่านตัวมัน จากจุดที่มีศักย์ไฟฟ้าสูงกว่า ไปยังจุดที่มีศักย์ไฟฟ้าต่ำกว่า หรือที่เรียกว่าความต่างศักย์นั่นเอง เพราะฉะนั้นขาร่วมแบบ "บวกร่วม" จะมีศักย์ไฟฟ้าที่สูงกว่า จึงต้องทำให้ปลายอีกข้างเป็น LOW เพื่อให้กระแสไหลผ่านได้ ส่วนขาร่วมแบบ "ลบร่วม" ก็จะตรงกันข้ามนั่นเอง | ||
โดยค่าความต่างศักย์ จะต้องไม่เกินค่าที่ LED นั้นๆทนได้ ซึ่งในบทเรียนนี้ เราจะยกตัวอย่างเป็น 7 Segment LED สีแดง ซึ่งจะทนความต่างศักย์ได้ไม่เกิน 2.3 V | ||
| ||
อย่าลืมว่า 7 Segment ก็เป็น LED ชนิดหนึ่ง ซึ่งตามที่เรารู้กันดีว่า เมื่อมีสถานะ HIGH , ขาของ Arduino จะปล่อยแรงดันออกมา 5 V ในขณะที่ LED ส่วนมาก ทนแรงดันได้ไม่ถึงขนาดนั้น เราจึงต้องมีตัวต้านทานมารับเอาแรงดันส่วนเกินไปด้วย ซึ่งการต่อตัวต้านทานกับ 7 Segment ก็จะนิยมต่อ 2 แบบหลักๆ | ||
• แยกต่อตัวต้านทานที่ ขา Segment แต่ละขา | ||
• ต่อตัวต้านทานที่ขาร่วม | ||
โดยการต่อตัวต้านทานทั้ง 2 แบบ จะใช้ค่าความต้านทานและการกินกำลังที่ต่างกัน และอาจให้ผลลัพธ์ที่ต่างกันตามความเหมาะสม | ||
| ||
การต่อตัวต้านทานที่ขา Segment แต่ละขา หากใช้วิธีนี้ เราจะต้องต่อตัวต้านทานไว้ที่ขา Segment ทุกขา ตั้งแต่ขา a-g รวมถึงขา h ด้วยหากต้องการใช้จุดทศนิยม วิธีการเลือกค่าความต้านทาน ในกรณีนี้ เราเลือกใช้งานกับ Arduino ซึ่งให้คิดในกรณีที่มีแรงดันสถานะ HIGH ไหลผ่าน นั่นก็คือ 5 V แต่ LED สีแดงทั่วไป ไม่ควรได้รับไปสูงกว่า 2.3 V และกินกระแสประมาณ 20 mA ดังนั้น ตัวต้านทานที่เราเลือกใช้คือ |
int a = 2; //ขา a ต่อเข้ากับ Pin 2
int b = 3; //ขา b ต่อเข้ากับ Pin 3
int c = 4; //ขา c ต่อเข้ากับ Pin 4
int d = 5; //ขา d ต่อเข้ากับ Pin 5
int e = 6; //ขา e ต่อเข้ากับ Pin 6
int f = 7; //ขา f ต่อเข้ากับ Pin 7
int g = 8; //ขา g ต่อเข้ากับ Pin 8
int point = 9; //ขา h หรือจุด ต่อเข้ากับ Pin 9
int b = 3; //ขา b ต่อเข้ากับ Pin 3
int c = 4; //ขา c ต่อเข้ากับ Pin 4
int d = 5; //ขา d ต่อเข้ากับ Pin 5
int e = 6; //ขา e ต่อเข้ากับ Pin 6
int f = 7; //ขา f ต่อเข้ากับ Pin 7
int g = 8; //ขา g ต่อเข้ากับ Pin 8
int point = 9; //ขา h หรือจุด ต่อเข้ากับ Pin 9
void setup() {
pinMode(a, OUTPUT); //a
pinMode(b, OUTPUT); //b
pinMode(c, OUTPUT); //c
pinMode(d, OUTPUT); //d
pinMode(e, OUTPUT); //e
pinMode(f, OUTPUT); //f
pinMode(g, OUTPUT); //g
pinMode(point, OUTPUT); //point
}
pinMode(a, OUTPUT); //a
pinMode(b, OUTPUT); //b
pinMode(c, OUTPUT); //c
pinMode(d, OUTPUT); //d
pinMode(e, OUTPUT); //e
pinMode(f, OUTPUT); //f
pinMode(g, OUTPUT); //g
pinMode(point, OUTPUT); //point
}
void showNumber(int number) //สร้าง Function ชื่อ showNumber ที่ใช้ในการแสดงผลตัวเลข โดยรับค่า number จาก void loop มาอีกที การสร้าง fuction จะช่วยให้ประหยัดพื้นที่และทำให้ไม่สับสนในการเรียกใช้งานโปรแกรม
{
//เงื่อนไขที่ Segment a ไฟติด เมื่อไม่ใช่เลข 1 และเลข 4
if(number != 1 && number != 4)
digitalWrite(a,LOW);
//เมื่อมีสถานะเป็น LOW ไฟจะติด เพราะเป็นแบบ Common Anode
//เงื่อนไขที่ Segment b ไฟติด
if(number != 5 && number != 6)
digitalWrite(b,LOW);
//เงื่อนไขที่ Segment c ไฟติด
if(number != 2)
digitalWrite(c,LOW);
//เงื่อนไขที่ Segment d ไฟติด
if(number != 1 && number != 4 && number != 7)
digitalWrite(d,LOW);
//เงื่อนไขที่ Segment e ไฟติด เมื่อเป็นเลข 2 หรือ 6 หรือ 8 หรือ 0
if(number == 2 || number == 6 || number == 8 || number == 0)
digitalWrite(e,LOW);
//เงื่อนไขที่ Segment f ไฟติด
if(number != 1 && number != 2 && number != 3 && number != 7)
digitalWrite(f,LOW);
{
//เงื่อนไขที่ Segment a ไฟติด เมื่อไม่ใช่เลข 1 และเลข 4
if(number != 1 && number != 4)
digitalWrite(a,LOW);
//เมื่อมีสถานะเป็น LOW ไฟจะติด เพราะเป็นแบบ Common Anode
//เงื่อนไขที่ Segment b ไฟติด
if(number != 5 && number != 6)
digitalWrite(b,LOW);
//เงื่อนไขที่ Segment c ไฟติด
if(number != 2)
digitalWrite(c,LOW);
//เงื่อนไขที่ Segment d ไฟติด
if(number != 1 && number != 4 && number != 7)
digitalWrite(d,LOW);
//เงื่อนไขที่ Segment e ไฟติด เมื่อเป็นเลข 2 หรือ 6 หรือ 8 หรือ 0
if(number == 2 || number == 6 || number == 8 || number == 0)
digitalWrite(e,LOW);
//เงื่อนไขที่ Segment f ไฟติด
if(number != 1 && number != 2 && number != 3 && number != 7)
digitalWrite(f,LOW);
//เงื่อนไขที่ Segment g ไฟติด
if (number != 0 && number != 1 && number != 7)
digitalWrite(g,LOW);
}
if (number != 0 && number != 1 && number != 7)
digitalWrite(g,LOW);
}
void turnOff() //สร้าง Function ชื่อ turnOff ที่ใช้ในการดับไฟทั้งหมด เพื่อ Reset เมื่อกำลังจะเปลี่ยนเป็นอีกตัวเลขหนึ่ง
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(point,HIGH);
}
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(point,HIGH);
}
void loop() { //ทำการแสดงผลเลข 0 - 9 วนไปเรื่อยๆจนกว่าจะหยุดจ่ายไฟ
for(int i=0;i<10;i++)
{
showNumber(i); //เรียกใช้ Function showNumber โดยส่งค่า i ไปให้ตัวแปร Number ใช้ในการประมวลผล
delay(1000);
turnOff(); //ทำการดับไฟทั้งหมดเมื่อกำลังจะเปลี่ยนตัวเลข เพื่อไม่ให้ไฟดวงเดิมค้างสถานะติดไว้
}
for(int i=0;i<10;i++)
{
showNumber(i); //เรียกใช้ Function showNumber โดยส่งค่า i ไปให้ตัวแปร Number ใช้ในการประมวลผล
delay(1000);
turnOff(); //ทำการดับไฟทั้งหมดเมื่อกำลังจะเปลี่ยนตัวเลข เพื่อไม่ให้ไฟดวงเดิมค้างสถานะติดไว้
}
}
https://commandronestore.com/learning/7segment.php
ความคิดเห็น
แสดงความคิดเห็น