const int DATA_PIN = 2;
const int LATCH_PIN = 4;
const int CLOCK_PIN = 3;
const int PIN_DIGIT[3] = {12, 11, 10};
int digit[3] = {0, 0, 0};
int n = 0;
int seg = 0;
int segAnt = 0;
const int NUMS[10] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246};
void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
for (int i = 0; i < 3; i++) {
pinMode(PIN_DIGIT[i], OUTPUT);
}
Serial.begin(9600);
}
void loop() {
if (n >= 999) {
n = 0;
} else {
n++;
}
writeNum(n);
seg = millis() / 100;
if (seg != segAnt) {
segAnt = seg;
}
}
void writeNum(int num) {
digit[0] = num / 100;
digit[1] = (num % 100) / 10;
digit[2] = num % 10;
for (int i = 0; i < 3; i++) {
if (i == 0 && digit[i] == 0) continue;
if (i == 1 && digit[i] == 0 && digit[i-1] == 0) continue;
ledOut(NUMS[digit[i]], i);
digits(i);
delay(300);
}
}
void digits(int x) {
for (int i = 0; i < 3; i++) {
digitalWrite(PIN_DIGIT[i], LOW);
}
digitalWrite(PIN_DIGIT[x], HIGH);
}
void ledOut(int num, int dig) {
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, ~num);
digitalWrite(LATCH_PIN, LOW);
digitalWrite(LATCH_PIN, HIGH);
}