/*
01204XXX Seven-Segment
การใช้จอแสดงผลตัวเลขแบบ 7 ส่วน (7-segment digit display)
การใช้งานอย่างง่ายที่สุด คือ ให้ต่อ pin COM เข้ากับไฟ 3v3 จากนั้นต่อขา
segments ต่างๆ (A-G) เข้ากับ GPIO
วิธีการนี้จะใช้ขาจำนวนมาก ขอให้ระวังว่าขาใดใช้ได้ไม่ได้
ตัวอย่างที่แสดงคือตัวอย่างการวางฮาร์ดแวร์ที่ถูกต้องตัวอย่างหนึ่ง
ซึ่งนิสิตจะใช้เพื่อทำโจทย์ประจำสัปดาห์นี้
หมายเหตุ การทำงานของชุด 7 segment นี้ ทำโดยป้อนไฟเข้าทาง COM
(ดังนั้น COM ไม่ใช่ GND ในกรณีนี้) นิสิตจึงต้องตั้งขา output (ที่จะวิ่งเข้า segments)
เป็น LOW เพื่อให้ไฟติด และ HIGH เพื่อให้ไฟดับ
ทั้งนี้ ขณะนี้ ปุ่มกดไม่ได้ทำหน้าที่อะไรทั้งสิ้น แต่เป็นส่วนหนึ่งของโจทย์
ตำแหน่งส่วนตัวเลขกับขา pin เป็นดังนี้
-A-
F| |B
-G-
E| |C
-D-
เช่น หากต้องการแสดงผลเลข 3 ให้ทำให้ไฟที่ segments A, B, C, D, G ติด
และทำให้ไฟที่ segments E, F ดับ
การแสดงผลเลขจะใช้แบบใดก็ได้ เช่น เลข 1 จะชิดซ้ายก็ได้ หรือ 6, 7, 9
จะมีหัวมีหางหรือไม่มีอย่างไรก็ได้
################# โจทย์ #################
ให้นิสิตเขียนโปรแกรมที่จะทำให้วงจรทำงานดังนี้
1. มีการจัด seven-segment display และปุ่มกดตามที่แสดงในแผนภาพ
(สามารถคัดลอกไฟล์นี้ได้)
2. มีการเก็บตัวแปรภายในเพื่อจดจำตัวเลข
3. เมื่อเริ่มโปรแกรม seven-segment display จะแสดงเลข 0 ค้างไว้
4. เมื่อกดปุ่ม seven-segment display จะเปลี่ยนเป็นเลขที่สูงขึ้น
ได้แก่ 1, 2, 3, 4, 5, 6, 7, 8, 9
5. เมื่อเลขที่แสดงเป็น 9 และกดปุ่มอีกครั้ง จะกลับมาเป็นเลข 0
#########################################
# การส่งงาน
ให้นิสิตกดแชร์ ด้านบน แล้วก็อปปี้ link ที่ได้ ส่งในการบ้านครับ
# การให้คะแนน
ส่วนของคะแนนในวิชานี้: ไม่มี แ่ต่จะให้ extra credit ไม่เกิน 1 แต้ม
(จาก max 100 เพิ่มเป็น max 101 ไม่มีผลต่อการคิดเกรด)
การแบ่งคะแนน (การบ้านนี้คะแนนเต็ม 100 คะแนน):
- ตัวเลขแต่ละตัวแสดงผลถูกต้อง ตัวเลขละ 3 คะแนน รวม 30 คะแนน
- การเปลี่ยนตัวเลขทำได้ถูกต้อง ตัวเลขละ 3 คะแนน รวม 30 คะแนน
- ใช้คำสั่งได้ถูกต้อง 40 คะแนน (ประเมินเชิงคุณภาพ)
HINT: Hardware ทำมาให้ครบแล้ว ชื่อ Pin กำหนดให้แล้ว ที่เหลือฝากนิสิตจัดการ
*/
#define A 25
#define B 26
#define C 27
#define D 14
#define E 12
#define F 33
#define G 32
#define SWPIN 5
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(SWPIN, INPUT_PULLUP);
}
int sw = 0;
void loop() {
// put your main code here, to run repeatedly:
sw = digitalWrite(SWPIN);
if (sw == LOW){
digitalWrite(A, HIGH); // การใส่สัญญาณ HIGH จะทำให้ไฟดับ ไม่ใช่ไฟติด
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
} else if () {
} else if () {
} else if () {
} else if () {
}
delay(10); // this speeds up the simulation
}