// Greg Wojcik
byte one = B11110011; // PORTD outputs for numbers
byte two = B01001001;
byte three = B01100001;
byte four = B00110011;
byte five = B00100101;
byte six = B00000101;
byte seven = B11110001;
byte eight = B00000001;
byte nine = B00110001;
byte wild = B01111111; // PORTD output for wild card
byte blank = B11111111; // PORTD output for blank
int t = 20; // delay time
int num1 = 10; // integers to store final output values
int num2 = 10;
int num3 = 10;
void setup()
{
DDRD = B11111110; // data register inputs and outputs
DDRB = B00001111;
}
void loop()
{
while (digitalRead(12) == false) // loops before button is pressed and sequence begins
{
out(num1); // calls output number function
digit(2); // calls digit select function
out(num2);
digit(3);
out(num3);
digit(4);
}
while (digitalRead(12) == true) // loops while button held down and sequence is begun
{
out(random(1,11)); // send a random number, 1 to 10, to output function (1,10 ony sends up to 9)
digit(2); // turns on digit 4
out(random(1,11));
digit(3); // turns on digit 3
out(random(1,11));
digit(4); // turns on digit 2
}
for (int i = 0; i <= 10; i++) // begins once button is released, continues displaying random values for 10 loops
{
out(random(1,11));
digit(2);
out(random(1,11));
digit(3);
out(random(1,11));
digit(4);
}
num1 = random(1,11); // generates random number for value 1
for (int j = 0; j <= 10; j++) // displays value 1 and displays random numbers for other two values
{
out(num1);
digit(2);
out(random(1,11));
digit(3);
out(random(1,11));
digit(4);
}
num2 = random(1,11); // generates random number for value 2
for (int k = 0; k <= 10; k++) // displays value 1 and 2 and displays random numbers for value 3
{
out(num1);
digit(2);
out(num2);
digit(3);
out(random(1,11));
digit(4);
}
num3 = random(1,11); // generates random number for value 3
for (int l = 0; l <= 7; l++) // displays final values
{
out(num1);
digit(2);
out(num2);
digit(3);
out(num3);
digit(4);
}
if ((num1 == num2 && num2 == num3) || (num1 == 10 && num2 == num3) // conditions for win
|| (num2 == 10 && num1 == num3) || (num3 == 10 && num1 == num2)
|| (num1 == 10 && num2 == 10) || (num2 == 10 && num3 == 10)
|| (num1 == 10 && num3 == 10))
{
for (int o = 0; o <= 5; o++) // flashes winning numbers six times
{
for (int m = 0; m <= 2; m++) // flashes winning numbers for two loops
{
out(num1);
digit(4);
out(num2);
digit(3);
out(num3);
digit(2);
}
for (int n = 0; n <= 2; n++) // turns all digits off for two loops
{
out(11);
digit(4);
digit(3);
digit(2);
}
}
}
}
void out(int num) // function that is sent integers and outputs onto 7 segment display
{
if (num == 1)
{
PORTD = one;
}
else if (num == 2)
{
PORTD = two;
}
else if (num == 3)
{
PORTD = three;
}
else if (num == 4)
{
PORTD = four;
}
else if (num == 5)
{
PORTD = five;
}
else if (num == 6)
{
PORTD = six;
}
else if (num == 7)
{
PORTD = seven;
}
else if (num == 8)
{
PORTD = eight;
}
else if (num == 9)
{
PORTD = nine;
}
else if (num == 10)
{
PORTD = wild;
}
else if (num == 11)
{
PORTD = blank;
}
}
void digit(int select) // function that turns digits on and off
{
if (select == 4)
{
PORTB = B00000001;
delay(t);
PORTB = B00000000;
delay(t);
}
else if (select == 3)
{
PORTB = B00000010;
delay(t);
PORTB = B00000000;
delay(t);
}
else if (select == 2)
{
PORTB = B00000100;
delay(t);
PORTB = B00000000;
delay(t);
}
}