const int number[11] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
0b0000010, 0b1111000, 0b0000000, 0b0010000 };
int input[] = { A0, A1, A2, A3 };
void setup() {
for (int i = 0; i <= 13; i++) {
pinMode(i, OUTPUT); // Set all pins from 0 to 13 as OUTPUT SSD
}
for (int i = 0; i < 4; i++) { // connect 4 buttons to A0 - A3
pinMode(input[i], INPUT_PULLUP);
}
}
void loop() {
reset:
bool b1 = (digitalRead(A0) == LOW);
bool b2 = (digitalRead(A1) == LOW);
bool b3 = (digitalRead(A2) == LOW);
bool b4 = (digitalRead(A3) == LOW);
unsigned long startMillis = millis();
while (!(digitalRead(A0) || digitalRead(A1) || digitalRead(A2) || digitalRead(A3))) {
reset();
}
if (b1 == true) {
while (true) {
for (int tens = 9; tens >= 0; tens--) {
bool out = false;
display_tensR(tens);
if (interupt(100)) {
out = true;
goto reset;
}
}
}
reset();
} else if (b2 == true) {
while (true) {
for (int tens = 0; tens <=9; tens++) {
bool out = false;
display_tens1(tens);
if (interupt(100)) {
out = true;
goto reset;
}
}
}
reset();
} else if (b3 == true) {
while (true) {
for (int i = 0, j = 9; i < 10; i++, j--) {
display_ones(i);
display_tens(j);
if (interupt(300)) {
goto reset;
}
}
}
} else if (b4 == true) {
while (true) {
for (int i = 0; i < 10; i++) {
display_ones2(0);
display_tens2(0);
delay(500);
if (interupt(100)) {
goto reset;
}
display_ones2(10);
display_tens2(10);
delay(500);
if (interupt(100)) {
goto reset;
}
}
}
}
reset();
}
void display_tens(const int tens) {
int pin1, a, ones;
if (tens > 9) {
for (pin1 = 0; pin1 < 7; pin1++) {
digitalWrite(pin1, 0);
}
} else {
for (pin1 = 0, a = 0; pin1 < 7; pin1++, a++) {
digitalWrite(pin1, (bitRead(number[tens], a)));
}
}
}
void display_ones(const int ones) {
int pin2, b;
if (ones > 9) {
for (pin2 = 7; pin2 <= 13; pin2++) {
digitalWrite(pin2, 0);
}
} else {
for (pin2 = 7, b = 0; pin2 <= 13; pin2++, b++) {
digitalWrite(pin2, !(bitRead(number[ones], b)));
}
}
}
///////////////////
void display_tens2(const int tens) {
int pin1, a, ones;
if (tens > 9) {
for (pin1 = 0; pin1 < 7; pin1++) {
digitalWrite(pin1, 1);
}
} else {
for (pin1 = 0, a = 0; pin1 < 7; pin1++, a++) {
digitalWrite(pin1, (bitRead(number[tens], a)));
}
}
}
void display_ones2(const int x) {
int pin2, b;
if (x > 9) {
for (pin2 = 7; pin2 <= 13; pin2++) {
digitalWrite(pin2, 0);
}
} else {
for (pin2 = 7, b = 0; pin2 <= 13; pin2++, b++) {
digitalWrite(pin2, !(bitRead(number[x], b)));
}
}
}
void display_tens1(const int tens) {
int pin1, a, ones;
for (pin1 = 7, a = 0; pin1 < 14; pin1++, a++)
{
digitalWrite(pin1, !bitRead(number[tens], a));
}
for (ones = 0; ones < 10; ones++)
{
display_ones1(ones);
delay(150);
}
}
void display_ones1(const int x) {
int pin2, b;
for (pin2 = 0, b = 0; pin2 <= 6; pin2++, b++)
{
digitalWrite(pin2, bitRead(number[x], b));
}
}
void display_tensR(const int tens) {
int pin1, a, ones;
for (pin1 = 7, a = 0; pin1 < 14; pin1++, a++)
{
digitalWrite(pin1, !bitRead(number[tens], a));
}
for (ones = 9; ones >= 0; ones--)
{
display_onesR(ones);
delay(150);
}
}
void display_onesR(const int x) {
int pin2, b;
for (pin2 = 0, b = 0; pin2 <= 6; pin2++, b++)
{
digitalWrite(pin2, bitRead(number[x], b));
}
}
void reset() {
display_ones(0);
display_tens(0);
}
bool interupt(int w) {
unsigned long startMillis = millis();
while (millis() - startMillis <= w) {
if (digitalRead(A0) == LOW || digitalRead(A1) == LOW || digitalRead(A2) == LOW || digitalRead(A3) ==
LOW) {
return true;
}
}
return false;
}