/**
Integer 4-digit-seven-segment display driver (no libraries)
**/
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;
const int DP = 9;
const int seg[8] = {A, B, C, D, E, F, G, DP};
const int dig[4] = {10, 11, 12, 13};
// Single digit driver
void d7s(int digit, int num) {
// Number combination - - - - - -
const int n0[] = { A,B,C,D,E,F };
const int n1[] = { B,C };
const int n2[] = { A,B, D,E, G };
const int n3[] = { A,B,C,D, G };
const int n4[] = { B,C, F, G };
const int n5[] = { A, C,D,F, G };
const int n6[] = { A, C,D,E,F,G };
const int n7[] = { A,B,C };
const int n8[] = { A,B,C,D,E,F,G };
const int n9[] = { A,B,C, F,G };
// - - - - - - - - - - - - - - -
for (int pin : seg) { digitalWrite(pin, HIGH); }
switch (num) {
case 0:
for (int pin : n0) { digitalWrite(pin, LOW); }
break;
case 1:
for (int pin : n1) { digitalWrite(pin, LOW); }
break;
case 2:
for (int pin : n2) { digitalWrite(pin, LOW); }
break;
case 3:
for (int pin : n3) { digitalWrite(pin, LOW); }
break;
case 4:
for (int pin : n4) { digitalWrite(pin, LOW); }
break;
case 5:
for (int pin : n5) { digitalWrite(pin, LOW); }
break;
case 6:
for (int pin : n6) { digitalWrite(pin, LOW); }
break;
case 7:
for (int pin : n7) { digitalWrite(pin, LOW); }
break;
case 8:
for (int pin : n8) { digitalWrite(pin, LOW); }
break;
case 9:
for (int pin : n9) { digitalWrite(pin, LOW); }
break;
}
digitalWrite(dig[digit], HIGH);
digitalWrite(dig[digit], LOW);
}
// Decompose a number (0-9999) to get each digit
void dcnum(int number, int *n1000, int *n100, int *n10, int *n1) {
*n1000 = number / 1000;
number %= 1000;
*n100 = number / 100;
number %= 100;
*n10 = number / 10;
*n1 = number % 10;
}
// 4 digit driver
void d7s4d(int num) {
int n1000, n100, n10, n1;
dcnum(num, &n1000, &n100, &n10, &n1);
d7s(0, n1000);
d7s(1, n100);
d7s(2, n10);
d7s(3, n1);
}
int counter = 9980;
// Delay variables
int cdly = 0;
int dly = 500;
void dlyf() {
counter++;
if (counter > 9999) counter = 0;
}
int main() {
for (int pin : seg) { pinMode(pin, OUTPUT); }
for (int pin : dig) { pinMode(pin, OUTPUT); }
while (true) {
// Displaying
d7s4d(counter);
// This replaces delay function because d7s has to execute everytime.
// Note here that this is a sh1t code because i didnt come up with a better idea.
cdly++;
if (cdly > dly) {
cdly = 0;
dlyf();
}
}
}