โปรเจกต์ เริ่มต้นใช้งาน seven segment
เรียนรู้วิธีการใช้งาน 1-digit seven segment โดยไม่ต้องติดตั้ง library ใดๆ!
เรียนรู้วิธีการใช้งาน 1-digit seven segment โดยไม่ต้องติดตั้ง library ใดๆ!
Seven-segment display คืออุปกรณ์ display device อิเล็กทรอนิกส์รูปแบบหนึ่งสำหรับแสดงผล decimalnumerals ซึ่งเป็นทางเลือกแทน dot matrix displays ที่มีความซับซ้อนมากกว่า
Seven-segment displays ถูกใช้งานอย่างแพร่หลายใน digital clocks, เครื่องวัดอิเล็กทรอนิกส์, เครื่องคิดเลขพื้นฐาน และอุปกรณ์อิเล็กทรอนิกส์อื่นๆ ที่แสดงข้อมูลตัวเลข
มาพูดถึงคุณลักษณะและฟังก์ชันการทำงานของ 7-segment display สั้นๆ ก่อนที่เราจะเชื่อมต่อเข้ากับ Arduino
7-segment display แท้จริงแล้วคือ LED เจ็ดดวงที่เรียงต่อกันในรูปแบบเฉพาะ ในกรณีนี้คือรูปทรงตัวเลข ‘8’ ที่เราคุ้นเคยกันดี LED แต่ละดวงจากทั้งเจ็ดดวงจะเรียกว่า segment เพราะเมื่อสว่างขึ้น segment จะประกอบกันเป็นส่วนหนึ่งของตัวเลข (ทั้ง Decimal และ Hex) ที่ต้องการแสดงผล และบางครั้งอาจมี LED ดวงที่ 8 เพิ่มเข้ามาเพื่อแสดงผล decimal point

LED แต่ละดวงใน display จะถูกกำหนดตำแหน่ง segment โดยมี pin เชื่อมต่อหนึ่งด้านที่ต่อออกมาจากตัวถังพลาสติกทรงสี่เหลี่ยม LED pin แต่ละตัวเหล่านี้จะถูกระบุชื่อตั้งแต่ a ถึง g เพื่อแทน LED แต่ละดวง ส่วน pin อื่นๆ ของ LED จะถูกเชื่อมต่อเข้าด้วยกันและเดินสายรวมเป็น common pin
ในการเปิดและปิดส่วนต่างๆ ของ display คุณเพียงแค่ตั้งค่า pin ที่เหมาะสมให้เป็น HIGH หรือ LOW เช่นเดียวกับที่ทำกับ LED ทั่วไป เพื่อให้บาง segment สว่างและบาง segment มืด ซึ่งจะทำให้เกิดรูปแบบตัวอักษรหรือตัวเลขที่ต้องการบน display วิธีนี้ช่วยให้เราสามารถแสดงตัวเลข decimal ทั้งสิบตัวตั้งแต่ 0 ถึง 9 บน 7-segment display ตัวเดียวกันได้
Seven segment displays มี 2 ประเภท คือ: Common Cathode (CC) และ Common Anode (CA) โดยโครงสร้างภายในของทั้งสองประเภทเกือบจะเหมือนกัน ข้อแตกต่างคือขั้วของ LED และ common terminal ตามชื่อที่ระบุ common cathode จะมีขา cathode ของ LED ทั้งหมดใน 7-segment เชื่อมต่อรวมกัน และ common anode จะมีขา anode ของ LED ทั้งหมดใน 7-segment เชื่อมต่อรวมกัน
ใน display แบบ common cathode ขา cathode ทั้งหมดของ LED segment จะถูกเชื่อมต่อเข้าด้วยกันที่ ‘logic 0’ / GND จากนั้น segment แต่ละส่วนจะสว่างขึ้นเมื่อป้อนสัญญาณ HIGH / ’logic 1’ ไปยังขา Anode (a-g) ของแต่ละ segment

ใน display แบบ common anode ขา anode ทั้งหมดของ LED segment จะถูกเชื่อมต่อรวมกันที่ logic “1” โดย segment แต่ละส่วนจะสว่างขึ้นเมื่อป้อนสัญญาณ ground, logic “0” หรือ “LOW” ไปยังขา Cathode ของแต่ละ segment (a-g)

คุณ สามารถทราบประเภทได้โดยการทดสอบ เมื่อคุณเชื่อมต่อหนึ่งใน pin กลางของ seven segment เข้ากับ GND และเชื่อมต่อ pin อื่นๆ เข้ากับ VCC หากไฟสว่างขึ้น แสดงว่าเป็น common cathode, ในทางกลับกัน แสดงว่าเป็น common anode
คุณ สามารถทดสอบได้โดยการเชื่อมต่อขาตรงกลางเข้ากับ (GND สำหรับ cathode / VCC สำหรับ anode)
และ pin อื่นๆ เข้ากับ (VCC สำหรับ cathode / GND สำหรับ anode)
ใน code tutorial นี้ Schematic จะแสดงการเชื่อมต่อระหว่าง seven segment และ Arduino
/*
การแสดงตัวเลข ตัวอักษร และวลี
A (seg[0] ในโปรเจกต์นี้)
---
F (seg[5] ในโปรเจกต์นี้) | | B (seg[1] ในโปรเจกต์นี้)
| |
--- G (seg[6] ในโปรเจกต์นี้)
E (seg[4] ในโปรเจกต์นี้) | |
| | C (seg[2] ในโปรเจกต์นี้)
--- . dot หรือ decimal (seg[7] ในโปรเจกต์นี้)
D (seg[3] ในโปรเจกต์นี้)
*/
#define A 8
#define B 7
#define C 6
#define D 5
#define E 4
#define F 3
#define G 2
#define DP 9 // decimal
#define common_cathode 0
#define common_anode 1
bool segMode = common_cathode; // ตั้งค่าตามประเภท segment ของคุณ, segment ของผมเป็น common_cathode
int seg[] {A,B,C,D,E,F,G,DP}; // segment pins
byte chars = 35; // ค่าสูงสุดใน array "Chars"
byte Chars[35][9] {
{'0',1,1,1,1,1,1,0,0},//0
{'1',0,1,1,0,0,0,0,0},//1
{'2',1,1,0,1,1,0,1,0},//2
{'3',1,1,1,1,0,0,1,0},//3
{'4',0,1,1,0,0,1,1,0},//4
{'5',1,0,1,1,0,1,1,0},//5
{'6',1,0,1,1,1,1,1,0},//6
{'7',1,1,1,0,0,0,0,0},//7
{'8',1,1,1,1,1,1,1,0},//8
{'9',1,1,1,1,0,1,1,0},//9
{'a',1,1,1,0,1,1,1,0},//A/10
{'b',0,0,1,1,1,1,1,0},//b/11
{'c',1,0,0,1,1,1,0,0},//C/12
{'d',0,1,1,1,1,0,1,0},//d/13
{'e',1,0,0,1,1,1,1,0},//E/14
{'f',1,0,0,0,1,1,1,0},//F/15
{'g',1,0,1,1,1,1,0,0},//G/16
{'h',0,1,1,0,1,1,1,0},//H/17
{'i',0,0,0,0,1,1,0,0},//I/18
{'j',0,1,1,1,1,0,0,0},//J/19
{'l',0,0,0,1,1,1,0,0},//L/20
{'n',0,0,1,0,1,0,1,0},//n/21
{'o',0,0,1,1,1,0,1,0},//o/22
{'p',1,1,0,0,1,1,1,0},//P/23
{'q',1,1,1,0,0,1,1,0},//q/24
{'r',0,0,0,0,1,0,1,0},//r/25
{'s',1,0,1,1,0,1,1,0},//S/26 ดูเหมือนเลข 5
{'t',0,0,0,1,1,1,1,0},//t/27
{'u',0,1,1,1,1,1,0,0},//U/28
{'y',0,1,1,1,0,1,1,0},//y/29
{'-',0,0,0,0,0,0,1,0},//-/30
{'.',0,0,0,0,0,0,0,1},//./31
{']',1,1,1,1,0,0,0,0},//]/32
{'[',1,0,0,1,1,1,0,0},//[/33
{'_',0,0,0,1,0,0,0,0},//_/34
};
void setup() {
// ตั้งค่า segment pins เป็น OUTPUT
pinMode(seg[0],OUTPUT);
pinMode(seg[1],OUTPUT);
pinMode(seg[2],OUTPUT);
pinMode(seg[3],OUTPUT);
pinMode(seg[4],OUTPUT);
pinMode(seg[5],OUTPUT);
pinMode(seg[6],OUTPUT);
pinMode(seg[7],OUTPUT);
}
void setState(bool mode) //ตั้งค่าสถานะ segment ทั้งหมดเป็น "mode"
{ for(int i = 0;i<=6;i++)
{
digitalWrite(seg[i],mode);
}
}
void Print(char Char) // พิมพ์ตัวอักษรใดๆ บน segment (หมายเหตุ: ไม่สามารถใช้ตัวอักษรพิมพ์ใหญ่ได้)
{
int charNum = -1;// ตั้งค่าผลการค้นหาเป็น -1
setState(segMode);//ปิด segment
for(int i = 0; i < chars ;i++){//ค้นหาตัวอักษรที่ป้อนเข้ามา
if(Char == Chars[i][0]){//ถ้าพบตัวอักษร
charNum = i;//เก็บลำดับที่พบลงใน charNum (เพราะฟังก์ชันนี้พิมพ์ตัวอักษรโดยใช้ลำดับใน array)
}
}
if(charNum == -1 )// ถ้าไม่พบตัวอักษร
{
for(int i = 0;i <= 6;i++)
{
digitalWrite(seg[i],HIGH);
delay(100);
digitalWrite(seg[i],LOW);
}
for(int i = 0;i <= 2;i++)
{
delay(100);
setState(HIGH);
delay(100);
setState(LOW);
}
}else // ถ้าพบตัวอักษรให้พิมพ์ออกไป
{
for(int i = 0;i<8;i++)
{digitalWrite(seg[i],Chars[charNum][i+1]);
}
}
}
void Print(int num) // พิมพ์ตัวเลขใดๆ บน segment
{
setState(segMode);//ปิด segment
if(num > chars || num < 0 )// ถ้าตัวเลขไม่ได้ถูกกำหนดไว้
{
for(int i = 0;i <= 6;i++)
{
digitalWrite(seg[i],HIGH);
delay(100);
digitalWrite(seg[i],LOW);
}
for(int i = 0;i <= 2;i++)
{
delay(100);
setState(HIGH);
delay(100);
setState(LOW);
}
}else // ถ้าตัวเลขถูกกำหนดไว้ ให้พิมพ์ออกไป
{
if(segMode == 0){ //สำหรับโหมด segment
for(int i = 0;i<8;i++)
{digitalWrite(seg[i],Chars[num][i+1]);
}
}
else{
for(int i = 0;i<8;i++)
{digitalWrite(seg[i],!Chars[num][i+1]);
}
}
}
}
void loop() {
for(int i = 0;i < chars;i++) //พิมพ์
{
Print(i);
delay(1000);
}
//Print(ตัวเลขหรือตัวอักษร); // พิมพ์ตัวเลขหรือตัวอักษรใดๆ บน segment (หมายเหตุ: ไม่สามารถใช้ตัวอักษรพิมพ์ใหญ่ได้)
//setState(state); //ตั้งค่าสถานะ segment ทั้งหมดเป็น "mode"
}
#define A 8
#define B 7
#define C 6
#define D 5
#define E 4
#define F 3
#define G 2
#define DP 9 // decimal
เหล่านี้คือ pin defines
#define common_cathode 0
#define common_anode 1
Seven segment types define
bool segMode = common_cathode;
ประเภทของ Seven segment, ให้ตั้งค่าตามประเภท seven segment ของคุณ
int seg[] {A,B,C,D,E,F,G,DP}; // segment pins
ใส่ pin ต่างๆ ลงใน array, ( สำคัญ:ห้ามลบarrayนี้เนื่องจากมีการใช้งานในcode)
byte chars = 35; // ค่าสูงสุดใน array "Chars"
ตั้งค่า ตัวแปรนี้ตามจำนวนตัวอักษรใน "Chars"(สำคัญ:ตัวแปรนี้มีการใช้งานในcode)
byte Chars[35][9] {
{'0',1,1,1,1,1,1,0,0},//0
{'1',0,1,1,0,0,0,0,0},//1
{'2',1,1,0,1,1,0,1,0},//2
{'3',1,1,1,1,0,0,1,0},//3
{'4',0,1,1,0,0,1,1,0},//4
{'5',1,0,1,1,0,1,1,0},//5
{'6',1,0,1,1,1,1,1,0},//6
{'7',1,1,1,0,0,0,0,0},//7
{'8',1,1,1,1,1,1,1,0},//8
{'9',1,1,1,1,0,1,1,0},//9
{'a',1,1,1,0,1,1,1,0},//A/10
{'b',0,0,1,1,1,1,1,0},//b/11
{'c',1,0,0,1,1,1,0,0},//C/12
{'d',0,1,1,1,1,0,1,0},//d/13
{'e',1,0,0,1,1,1,1,0},//E/14
{'f',1,0,0,0,1,1,1,0},//F/15
{'g',1,0,1,1,1,1,0,0},//G/16
{'h',0,1,1,0,1,1,1,0},//H/17
{'i',0,0,0,0,1,1,0,0},//I/18
{'j',0,1,1,1,1,0,0,0},//J/19
{'l',0,0,0,1,1,1,0,0},//L/20
{'n',0,0,1,0,1,0,1,0},//n/21
{'o',0,0,1,1,1,0,1,0},//o/22
{'p',1,1,0,0,1,1,1,0},//P/23
{'q',1,1,1,0,0,1,1,0},//q/24
{'r',0,0,0,0,1,0,1,0},//r/25
{'s',1,0,1,1,0,1,1,0},//S/26 ดูเหมือนเลข 5
{'t',0,0,0,1,1,1,1,0},//t/27
{'u',0,1,1,1,1,1,0,0},//U/28
{'y',0,1,1,1,0,1,1,0},//y/29
{'-',0,0,0,0,0,0,1,0},//-/30
{'.',0,0,0,0,0,0,0,1},//./31
{']',1,1,1,1,0,0,0,0},//]/32
{'[',1,0,0,1,1,1,0,0},//[/33
{'_',0,0,0,1,0,0,0,0},//_/34
};
นี่คือ character list โปรเจกต์นี้ใช้ตัวอักษรแรกในการระบุ ค่า 0/1 คือ states ของแต่ละ pin ใน "seg[]"
void setup() {
// ตั้งค่า segment pins เป็น OUTPUT
pinMode(seg[0],OUTPUT);
pinMode(seg[1],OUTPUT);
pinMode(seg[2],OUTPUT);
pinMode(seg[3],OUTPUT);
pinMode(seg[4],OUTPUT);
pinMode(seg[5],OUTPUT);
pinMode(seg[6],OUTPUT);
pinMode(seg[7],OUTPUT);
}
เหล่านี้คือ " pinModes "
นี่คือคำอธิบายที่สำคัญสำหรับผู้ใช้งานโปรเจกต์นี้
โปรเจกต์นี้ประกอบด้วย two ฟังก์ชันที่มีประโยชน์ มาเรียนรู้วิธีการใช้งานกัน!
ฟังก์ชันนี้ใช้สำหรับ print characters หรือ numbers บน seven segment!
คุณสามารถใช้งานแบบ Print(number or character) โดยป้อนค่าเป็นตัวอักษร (char) หรือจะใช้แบบ Print(ลำดับของตัวอักษรใน array "Chars") ซึ่งวิธีหลังนี้จะใช้เพียงตัวเลขลำดับของตัวอักษรใน array " Chars " เท่านั้น
ตัวอย่าง:
1:
for(int i = 0;i < chars;i++) //พิมพ์
{
Print(i);
delay(1000);
}
นี่คือ วิธีที่สอง สำหรับการพิมพ์ ผมสร้างวิธีนี้ขึ้นเพื่อให้ ใช้งานได้ง่าย ร่วมกับ for loops และส่วนอื่นๆ
2:
Print('y');// หรือตัวอักษรอื่นๆ
และนี่คือ วิธีแรก สำหรับการพิมพ์
ฟังก์ชันนี้จะตั้งค่า seven segment ทั้งหมด ให้เป็น HIGH หรือ LOW "state"
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้
ประเมิน Project
เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า
รีวิวจากคนใช้งานจริง
ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย
ยังไม่มีรีวิวบนหน้านี้ ถ้าเคยใช้งานหรือมีข้อเสนอแนะ เขียนเป็นคนแรกได้เลย