byte led[7] = {13, 12, 11, 10, 9, 8, 7}; // a,b,c,d,e,f,g 共陰極 1=亮
byte digits[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
#define BTN_STARTSTOP 5
#define BTN_RESET 6
bool running = false;
int number = 0;
void setup() {
// 七段顯示器輸出
for (int i = 0; i < 7; i++) pinMode(led[i], OUTPUT);
// 按鍵輸入(使用內建上拉電阻)
pinMode(BTN_STARTSTOP, INPUT_PULLUP);
pinMode(BTN_RESET, INPUT_PULLUP);
}
void loop() {
// ---- Start/Stop 按鍵(5 腳)----
if (digitalRead(BTN_STARTSTOP) == LOW) {
delay(50); // 按鍵去抖
if (digitalRead(BTN_STARTSTOP) == LOW) {
running = !running; // 切換狀態
while (digitalRead(BTN_STARTSTOP) == LOW); // 等放開
}
}
// ---- Reset 按鍵(6 腳)----
if (digitalRead(BTN_RESET) == LOW) {
delay(50);
if (digitalRead(BTN_RESET) == LOW) {
number = 0; // 回到 0
running = false; // 停止
showDigit(number);
while (digitalRead(BTN_RESET) == LOW);
}
}
// ---- 若正在運行就顯示並遞增 ----
if (running) {
showDigit(number);
delay(800); // 顯示間隔
number++;
if (number > 9) number = 0;
} else {
// 停止時保持原本顯示的數字
showDigit(number);
}
}
void showDigit(int n) {
for (int i = 0; i < 7; i++) {
digitalWrite(led[i], digits[n][i]);
}
}