#define SWB13 PB13
#define SWB14 PB14
#define SWB15 PB15
#define LED_START PA3
#define LED_PAUSE PC15
#define LED_RESET PB2
int segPinsTens[] = {PC7, PA7, PA6, PA5, PB9, PB8, PD3};
int segPinsOnes[] = {PA9, PA15, PB5, PB4, PB10, PB3, PA10};
byte numbers[10][7] = {
{0,0,0,0,0,0,1}, {1,0,0,1,1,1,1}, {0,0,1,0,0,1,0},
{0,0,0,0,1,1,0}, {1,0,0,1,1,0,0}, {0,1,0,0,1,0,0},
{0,1,0,0,0,0,0}, {0,0,0,1,1,1,1}, {0,0,0,0,0,0,0},
{0,0,0,0,1,0,0}
};
int countNum = 0;
bool running = false;
unsigned long lastCountTime = 0;
void setup() {
pinMode(SWB13, INPUT_PULLUP);
pinMode(SWB14, INPUT_PULLUP);
pinMode(SWB15, INPUT_PULLUP);
pinMode(LED_START, OUTPUT);
pinMode(LED_PAUSE, OUTPUT);
pinMode(LED_RESET, OUTPUT);
for (int i = 0; i < 7; i++) {
pinMode(segPinsTens[i], OUTPUT);
pinMode(segPinsOnes[i], OUTPUT);
}
}
void loop() {
bool btnStart = !digitalRead(SWB13);
bool btnPause = !digitalRead(SWB14);
bool btnReset = !digitalRead(SWB15);
digitalWrite(LED_START, btnStart);
digitalWrite(LED_PAUSE, btnPause);
digitalWrite(LED_RESET, btnReset);
// Logic ปุ่ม
if (btnStart) running = true;
if (btnReset) { running = false; countNum = 0; }
if (running && !btnPause && millis() - lastCountTime >= 1000) {
lastCountTime = millis();
if (++countNum > 99) countNum = 0;
}
// แสดงเลข
showDigit(countNum / 10, segPinsTens);
showDigit(countNum % 10, segPinsOnes);
}
void showDigit(int num, int* segPins) {
for (int i = 0; i < 7; i++) digitalWrite(segPins[i], numbers[num][i]);
}