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;
  }
}