Learning 7 Segment + Arduino



การควบคุม 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 แบบ จะใช้ค่าความต้านทานและการกินกำลังที่ต่างกัน และอาจให้ผลลัพธ์ที่ต่างกันตามความเหมาะสม
 แบบที่ 1 
การต่อตัวต้านทานที่ขา 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
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
}
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 g ไฟติด
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);
}
void loop() { //ทำการแสดงผลเลข 0 - 9 วนไปเรื่อยๆจนกว่าจะหยุดจ่ายไฟ 
for(int i=0;i<10;i++)
{
showNumber(i); //เรียกใช้ Function showNumber โดยส่งค่า i ไปให้ตัวแปร Number ใช้ในการประมวลผล
delay(1000);
turnOff(); //ทำการดับไฟทั้งหมดเมื่อกำลังจะเปลี่ยนตัวเลข เพื่อไม่ให้ไฟดวงเดิมค้างสถานะติดไว้
}
}
https://commandronestore.com/learning/7segment.php

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Coin Validator เครื่องรับเหรียญ เครื่องหยอดเหรียญ Multi Coin รุ่น SG-6