int ledPin = 13,
countDown = 20, //sec
quick = 0,
interval = 0;
long startTime = 0,
nowTime = 0,
preTime = 0,
timePass = 0;
bool state = 1;
int gameEnd = 0;
bool cutOrNot[3] = {0,0,0};
int whatWire[3] = {3,3,3};
//0:nothing,1:defuse,2:explode
void setup() {
Serial.begin(9600);
//Serial.println("begin");
pinMode(ledPin, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
startTime = millis();
preTime = startTime;
interval = 1000 / countDown * 1.2;
randomWire();
}
void loop() {
switch (gameEnd){
case 1:
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(13,0);
state = 0;
Serial.println("Bomb Defused");
gameEnd = 4;
break;
case 2:
Serial.println("BOMB EXPLODED!!!");
gameEnd = 4;
break;
case 4:
break;
default:
countDownFuc();
bottonCheck();
digitalWrite(8,!cutOrNot[0]);
digitalWrite(9,!cutOrNot[1]);
digitalWrite(10,!cutOrNot[2]);
break;
}
}
void countDownFuc(){
nowTime = millis();
timePass = nowTime - startTime;
//Serial.println(timePass);
if((countDown * 1000) <= timePass){
gameEnd = 2;
return;
}
if(quick <= 800) quick = timePass / 1000 * interval;
else quick = 850;
//Serial.println(quick);
if((nowTime - preTime) >= (1000-quick) && timePass < (countDown * 1000)){
state = !state;
preTime = nowTime;
}
//Serial.println(state);
digitalWrite(ledPin, state);
}
void bottonCheck(){
if(gameEnd == 2) return;
for(int i=0;i<=2;i++){
if(cutOrNot[i] == 0 && digitalRead(i+2) == 0){
cutOrNot[i] = !cutOrNot[i];
gameEnd = whatWire[i];
}
}
}
void randomWire(){
int num;
randomSeed(analogRead(A0));
for(int i=0;i<=2;i++){
do{
num = random(3);
for(int j=0;j<i;j++)
if(whatWire[j] == num){
num = -1;
break;
}
}
while(num == -1);
whatWire[i] = num;
//Serial.println(whatWire[i]);
}
}