int segmentA = 2;
int segmentB = 3;
int segmentC = 4;
int segmentD = 5;
int segmentE = 6;
int segmentF = 7;
int segmentG = 8;
int buttonPin = 12;
int buttonState = 0;
int segmentdp = 9;
int number;
long countD;
unsigned long prevTime_1 = millis();
unsigned long prevTime_2 = millis();
unsigned long prevTime_3 = millis();
unsigned long prevTime_4 = millis();
unsigned long prevTime_dp = millis();
long dpInterval = 10;
long interval_1 = 1000;
long interval_2 = 600;
long interval_3 = 100;
long interval_4 = 1;
void setup() {
Serial.begin(9600);
pinMode(segmentA, OUTPUT);
pinMode(segmentB, OUTPUT);
pinMode(segmentC, OUTPUT);
pinMode(segmentD, OUTPUT);
pinMode(segmentE, OUTPUT);
pinMode(segmentF, OUTPUT);
pinMode(segmentG, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(segmentdp, OUTPUT);
randomSeed(analogRead(0));
}
void loop() {
buttonState = digitalRead(buttonPin);
unsigned long currentTime = millis();
if (buttonState == 1){
number = random(9); // you can set it to any number from 0-6
countD = 10; // set here the number of seconds until the reveal
digitalWrite(segmentA, 0);
digitalWrite(segmentB, 0);
digitalWrite(segmentC, 0);
digitalWrite(segmentD, 0);
digitalWrite(segmentE, 0);
digitalWrite(segmentF, 0);
digitalWrite(segmentG, 0);
}
if (currentTime - prevTime_1 > interval_1){
if (countD > 0){countD = countD - 1;} //countdown checker
Serial.print("Countdown Checker: ");
Serial.println(countD);
prevTime_1 = currentTime;
}
if (currentTime - prevTime_2 > interval_2){
if (countD > 0) {
digitalWrite(segmentG, LOW);
digitalWrite(segmentA, HIGH);
delay (100);
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
delay(100);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
delay(100);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, HIGH);
delay(100);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, HIGH);
delay(100);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
delay(100);
digitalWrite(segmentF, LOW);
}
prevTime_2 = currentTime;
}
if (currentTime - prevTime_3 > interval_3){
if (countD == 0){
switch (number) {
case 1:
digitalWrite(segmentA, 0);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, 0);
digitalWrite(segmentE, 0);
digitalWrite(segmentF, 0);
digitalWrite(segmentG, 0);
break;
case 2:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, 0);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, 0);
digitalWrite(segmentG, HIGH);
break;
case 3:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
break;
case 4:
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 5:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 6:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 7:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
break;
case 8:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 9:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
default:
digitalWrite(segmentA, 1);
digitalWrite(segmentB, 1);
digitalWrite(segmentC, 1);
digitalWrite(segmentD, 1);
digitalWrite(segmentE, 1);
digitalWrite(segmentF, 1);
digitalWrite(segmentG, 0);
}
}
prevTime_3 = currentTime;
}
if (currentTime - prevTime_dp > dpInterval){
if (3 >= countD > 0){
digitalWrite(segmentdp, 1);
delay (50*(countD/12));
digitalWrite(segmentdp, 0);
} //dp blinker
prevTime_dp = currentTime;
}
}