const int dataPin = 2;
const int clockPin = 4;
const int latchPin = 16;
const int btnPin = 13;
int cnt = 0;
bool flag = 1;
int debounce = 200;
int sn;
unsigned long trigTime = 0;
const byte num[] = {
0b11111100,
0b01100000,
0b11011010,
0b11110010,
0b01100110,
0b10110110,
0b10111110,
0b11100000,
0b11111110,
0b11110110,
0b00000000,
};
void press() {
if (millis() - trigTime > debounce) {
cnt += 1;
flag = !flag;
trigTime = millis();
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(btnPin, INPUT_PULLUP);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
attachInterrupt(btnPin, press, RISING);
digitalWrite(clockPin, LOW);
digitalWrite(latchPin, LOW);
}
void displayNum(int n) {
for (int i = 0; i < 8; i++) {
digitalWrite(dataPin, !bitRead(num[n], i));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()>0) {
sn = Serial.parseInt();
Serial.println(sn);
}
if (flag && cnt == 0) {
for (int i = 0; i <= 9; i++) {
displayNum(i);
delay(400);
if (!flag) break;
}
} else {
displayNum(10);
}
if (flag && cnt == 1) {
for (int i = sn; i >= 0; i--) {
if (i > 4) {
displayNum(i);
delay(1000);
} else {
for (int j = 0; j < 4; j++) {
displayNum(i);
delay(200);
displayNum(10);
delay(200);
}
}
}
}
}