// Pin Definitions
int button = 12;
int segments[] = {1, 2, 3, 4, 5, 6, 7};
int displays[] = {8, 9, 10, 11};
int number1;
int number2;
int number3;
int wildcard;
bool buttonState;
void setup() {
// Set pin modes
pinMode(button, INPUT_PULLUP);
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(displays[i], OUTPUT);
}
randomSeed(analogRead(0));
}
void spin() {
// random numbers
number1 = random(0, 9);
number2 = random(0, 9);
number3 = random(0, 9);
wildcard = random(0, 9);
// Spin
for (int i = 0; i < 20; i++) { // i causes the spin to happen after the limit is reached then it stops
digitalWrite(displays[0], LOW);
displayNum(random(1, 9));
delay(25);
digitalWrite(displays[1], LOW);
displayNum(random(1, 9));
delay(50);
digitalWrite(displays[2], LOW);
displayNum(random(1, 9));
delay(75);
digitalWrite(displays[0], HIGH);
digitalWrite(displays[1], HIGH);
digitalWrite(displays[2], HIGH);
delay(1);
}
}
void stop() {
// Stops the spinning by displaying the last known numbers which were stored in global variables
digitalWrite(displays[0], LOW);
displayNum(number1);
delay(5);
digitalWrite(displays[1], LOW);
displayNum(number2);
delay(5);
digitalWrite(displays[2], LOW);
if (number3 == wildcard) { // triggering the wildcard to be displayed
displayNum(wildcard);
} else {
displayNum(number3);
digitalWrite(displays[3], LOW);
}
delay(1);
}
void displayNum(int number) { // for the displays so the number knew where to go
for (int i = 0; i < 4; i++) {
digitalWrite(displays[i], HIGH);
}
switch (number) { // all the numbers case matches what is displayed
case 0:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], HIGH);
digitalWrite(segments[5], HIGH);
digitalWrite(segments[6], LOW);
break;
case 1:
digitalWrite(segments[0], LOW);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], LOW);
digitalWrite(segments[4], LOW);
digitalWrite(segments[5], LOW);
digitalWrite(segments[6], LOW);
break;
case 2:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], LOW);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], HIGH);
digitalWrite(segments[5], LOW);
digitalWrite(segments[6], HIGH);
break;
case 3:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], LOW);
digitalWrite(segments[5], LOW);
digitalWrite(segments[6], HIGH);
break;
case 4:
digitalWrite(segments[0], LOW);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], LOW);
digitalWrite(segments[4], LOW);
digitalWrite(segments[5], HIGH);
digitalWrite(segments[6], HIGH);
break;
case 5:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], LOW);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], LOW);
digitalWrite(segments[5], HIGH);
digitalWrite(segments[6], HIGH);
break;
case 6:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], LOW);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], HIGH);
digitalWrite(segments[5], HIGH);
digitalWrite(segments[6], HIGH);
break;
case 7:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], LOW);
digitalWrite(segments[4], LOW);
digitalWrite(segments[5], LOW);
digitalWrite(segments[6], LOW);
break;
case 8:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], HIGH);
digitalWrite(segments[5], HIGH);
digitalWrite(segments[6], HIGH);
break;
case 9:
digitalWrite(segments[0], HIGH);
digitalWrite(segments[1], HIGH);
digitalWrite(segments[2], HIGH);
digitalWrite(segments[3], HIGH);
digitalWrite(segments[4], LOW);
digitalWrite(segments[5], HIGH);
digitalWrite(segments[6], HIGH);
break;
}
}
void loop() {
buttonState = digitalRead(button);
if (buttonState == LOW) {
spin(); // calling the spin function
delay(500);
} else {
stop(); // display the numbers that were generated
}
}