#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // the I2C LCD address of your display might differ, in this case,
// replace this line: LiquidCrystal_I2C lcd(0x3F,20,4)
// with this: LiquidCrystal_I2C lcd(I2C_adrs_of_your_display,20,4)
// to find it, first upload and run the I2C_scanner.txt code to your arduino - it will show you the I2C_adrs_of_your_display
// DECLARATION:
// Power for LCD
int LCD_power = 8;
int buzzerPin = 9; // You can use any digital pin
// beep/light
int signal_pin = 10;
int main_state = 0;
const int button_1 = 2;
boolean button_1_state = 0;
const int button_2 = 3;
boolean button_2_state = 0;
int timer = 1;
int timer_sec;
float timer_fast;
float timer_faster;
int timer_sec_remainder;
int timer_min;
int SEQ = 300;
// Bomb wires:
const int Red_wire = 12;
boolean R = 0;
const int Black_wire = 11;
boolean B = 0;
const int Green_wire = 7;
boolean G = 0;
const int Yellow_wire = 8;
boolean Y = 0;
int D_current[] = {R, B, G, Y};
// Disarm state:
int D_State = 0;
int D0[] = {0, 0, 0, 0};
int D1[] = {0, 0, 0, 0};
int D2[] = {0, 0, 0, 0};
int D3[] = {0, 0, 0, 0};
int readVcc() {
// Read 1.1V reference against AVcc
// set the reference to Vcc and the measurement to the internal 1.1V reference
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0) ;
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Start conversion
while (bit_is_set(ADCSRA, ADSC)); // measuring
uint8_t low = ADCL; // must read ADCL first - it then locks ADCH
uint8_t high = ADCH; // unlocks both
long result = (high << 8) | low;
result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
return result; // Vcc in millivolts
}
void setup() {
pinMode(LCD_power, OUTPUT);
digitalWrite(LCD_power, HIGH);
// Signal pin:
pinMode(signal_pin, OUTPUT);
// Buttons:
pinMode(button_1, INPUT);
pinMode(button_2, INPUT);
lcd.init(); // initialize the lcd
Serial.begin(9600); // initialize debug serial
// Bomb wires:
pinMode(Red_wire, INPUT_PULLUP);
pinMode(Black_wire, INPUT_PULLUP);
pinMode(Green_wire, INPUT_PULLUP);
pinMode(Yellow_wire, INPUT_PULLUP);
// Initialize the buzzer pin as an OUTPUT
pinMode(buzzerPin, OUTPUT);
// INTRO MESSAGE TO LCD:
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
lcd.backlight();
lcd.clear();
// INTRO:
delay(500);
lcd.setCursor(1, 0);
lcd.print("Created");
delay(500);
lcd.setCursor(1, 0);
lcd.print("Created by");
delay(500);
lcd.setCursor(1, 0);
lcd.print("Created by Ben");
delay(500);
lcd.setCursor(0, 1);
lcd.print("www.airsoft-onli");
delay(1500);
lcd.setCursor(0, 1);
lcd.print(".airsoft-online-");
delay(500);
lcd.setCursor(0, 1);
lcd.print("rsoft-online-jap");
delay(500);
lcd.setCursor(0, 1);
lcd.print("ft-online-japan.");
delay(500);
lcd.setCursor(0, 1);
lcd.print("online-japan.com");
delay(2000);
lcd.clear();
readVcc();
if (readVcc() >= 3800)
{
lcd.setCursor(0, 0);
lcd.print("Voltage = ");
lcd.print(readVcc() / 1000.00);
lcd.print("v");
lcd.setCursor(0, 1);
lcd.print("Voltage Good!");
delay(3000);
}
if (readVcc() <= 3800)
{
lcd.setCursor(0, 0);
lcd.print("voltage =");
lcd.print(readVcc() / 1000.00);
lcd.print("v");
lcd.setCursor(0, 1);
lcd.print("Replace Battery!");
delay(1000000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set timer [min]:");
lcd.setCursor(0, 1);
lcd.print("timer = ");
lcd.print(timer);
}
void loop() {
// STATE 0 - SET THE TIMER:
if (main_state == 0) {
button_1_state = digitalRead(button_1);
if (button_1_state == LOW) {
delay(100);
}
else if (button_1_state == HIGH) {
timer = timer + 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set timer [min]:");
lcd.setCursor(0, 1);
lcd.print("timer = ");
lcd.print(timer);
delay(150);
}
button_2_state = digitalRead(button_2);
if (button_2_state == LOW) {
delay(1);
}
else if (button_2_state == HIGH) {
//lcd.clear();
//lcd.setCursor(0,0);
//lcd.print("Timer set");
//lcd.setCursor(0,1);
//lcd.print("Timer[min] = ");
//lcd.print(timer);
main_state = 1;
//delay(1000);
}
} // END STATE 0
// STATE 1 - SET SNOOZE AND DISARM:
else if (main_state == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Generating");
delay(500);
lcd.setCursor(0, 0);
lcd.print("Generating.");
delay(500);
lcd.setCursor(0, 0);
lcd.print("Generating..");
delay(500);
lcd.setCursor(0, 0);
lcd.print("Generating...");
delay(500);
lcd.setCursor(0, 1);
lcd.print("Done!");
delay(1000);
// print a random number from 1 to 24, random(1, 25)
randomSeed(analogRead(0));
int SEQ = random(1, 25);
// SETTING THE SEQ:
if (SEQ == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: R,B,G (01)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {1,0,0,0}; // *
D1[0] = 1;
//int D2[] = {1,1,0,0}; // **
D2[0] = 1;
D2[1] = 1;
//int D3[] = {1,1,1,0}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[2] = 1;
delay(2000);
}
else if (SEQ == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: R,B,Y (02)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {1,0,0,0}; // *
D1[0] = 1;
//int D2[] = {1,1,0,0}; // **
D2[0] = 1;
D2[1] = 1;
//int D3[] = {1,1,0,1}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: R,G,B (03)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {1,0,0,0}; // *
D1[0] = 1;
//int D2[] = {1,0,1,0}; // **
D2[0] = 1;
D2[2] = 1;
//int D3[] = {1,1,1,0}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[2] = 1;
delay(1000);
}
else if (SEQ == 4) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: R,G,Y (04)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {1,0,0,0}; // *
D1[0] = 1;
//int D2[] = {1,0,1,0}; // **
D2[0] = 1;
D2[2] = 1;
//int D3[] = {1,0,1,1}; // Disarmed
D3[0] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 5) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: R,Y,B (05)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {1,0,0,0}; // *
D1[0] = 1;
//int D2[] = {1,0,0,1}; // **
D2[0] = 1;
D2[3] = 1;
//int D3[] = {1,1,0,1}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 6) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: R,Y,G (06)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {1,0,0,0}; // *
D1[0] = 1;
//int D2[] = {1,0,0,1}; // **
D2[0] = 1;
D2[3] = 1;
//int D3[] = {1,0,1,1}; // Disarmed
D3[0] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 7) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: B,R,G (07)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,1,0,0}; // *
D1[1] = 1;
//int D2[] = {1,1,0,0}; // **
D2[0] = 1;
D2[1] = 1;
//int D3[] = {1,1,1,0}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[2] = 1;
delay(1000);
}
else if (SEQ == 8) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: B,R,Y (08)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,1,0,0}; // *
D1[1] = 1;
//int D2[] = {1,1,0,0}; // **
D2[0] = 1;
D2[1] = 1;
//int D3[] = {1,1,0,1}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 9) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: B,G,R (09)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,1,0,0}; // *
D1[1] = 1;
//int D2[] = {0,1,1,0}; // **
D2[1] = 1;
D2[2] = 1;
//int D3[] = {1,1,1,0}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[2] = 1;
delay(1000);
}
else if (SEQ == 10) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: B,G,Y (10)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,1,0,0}; // *
D1[1] = 1;
//int D2[] = {0,1,1,0}; // **
D2[1] = 1;
D2[2] = 1;
//int D3[] = {0,1,1,1}; // Disarmed
D3[1] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 11) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: B,Y,R (11)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,1,0,0}; // *
D1[1] = 1;
//int D2[] = {0,1,0,1}; // **
D2[1] = 1;
D2[3] = 1;
//int D3[] = {1,1,0,1}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 12) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: B,Y,G (12)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,1,0,0}; // *
D1[1] = 1;
//int D2[] = {0,1,0,1}; // **
D2[1] = 1;
D2[3] = 1;
//int D3[] = {0,1,1,1}; // Disarmed
D3[1] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 13) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: G,R,B (13)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,1,0}; // *
D1[2] = 1;
//int D2[] = {1,0,1,0}; // **
D2[0] = 1;
D2[2] = 1;
//int D3[] = {1,1,1,0}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[2] = 1;
delay(1000);
}
else if (SEQ == 14) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: G,R,Y (14)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,1,0}; // *
D1[2] = 1;
//int D2[] = {1,0,1,0}; // **
D2[0] = 1;
D2[2] = 1;
//int D3[] = {1,0,1,1}; // Disarmed
D3[0] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 15) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: G,B,R (15)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,1,0}; // *
D1[2] = 1;
//int D2[] = {0,1,1,0}; // **
D2[1] = 1;
D2[2] = 1;
//int D3[] = {1,1,1,0}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[2] = 1;
delay(1000);
}
else if (SEQ == 16) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: G,B,Y (16)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,1,0}; // *
D1[2] = 1;
//int D2[] = {0,1,1,0}; // **
D2[1] = 1;
D2[2] = 1;
//int D3[] = {0,1,1,1}; // Disarmed
D3[1] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 17) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: G,Y,R (17)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,1,0}; // *
D1[2] = 1;
//int D2[] = {0,0,1,1}; // **
D2[2] = 1;
D2[3] = 1;
//int D3[] = {1,0,1,1}; // Disarmed
D3[0] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 18) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: G,Y,B (18)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,1,0}; // *
D1[2] = 1;
//int D2[] = {0,0,1,1}; // **
D2[2] = 1;
D2[3] = 1;
//int D3[] = {0,1,1,1}; // Disarmed
D3[1] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 19) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: Y,R,B (19)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,0,1}; // *
D1[3] = 1;
//int D2[] = {1,0,0,1}; // **
D2[0] = 1;
D2[3] = 1;
//int D3[] = {1,1,0,1}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 20) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: Y,R,G (20)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,0,1}; // *
D1[3] = 1;
//int D2[] = {1,0,0,1}; // **
D2[0] = 1;
D2[3] = 1;
//int D3[] = {1,0,1,1}; // Disarmed
D3[0] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 21) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: Y,B,R (21)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,0,1}; // *
D1[3] = 1;
//int D2[] = {0,1,0,1}; // **
D2[1] = 1;
D2[3] = 1;
//int D3[] = {1,1,0,1}; // Disarmed
D3[0] = 1;
D3[1] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 22) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: Y,B,G (22)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,0,1}; // *
D1[3] = 1;
//int D2[] = {0,1,0,1}; // **
D2[1] = 1;
D2[3] = 1;
//int D3[] = {0,1,1,1}; // Disarmed
D3[1] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 23) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: Y,G,R (23)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,0,1}; // *
D1[3] = 1;
//int D2[] = {0,0,1,1}; // **
D2[2] = 1;
D2[3] = 1;
//int D3[] = {1,0,1,1}; // Disarmed
D3[0] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
else if (SEQ == 24) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEY: Y,G,B (24)");
// Set the Disarm steps {R,B,G,Y}:
//int D0[] = {0,0,0,0}; // Fully armed
//int D1[] = {0,0,0,1}; // *
D1[3] = 1;
//int D2[] = {0,0,1,1}; // **
D2[2] = 1;
D2[3] = 1;
//int D3[] = {0,1,1,1}; // Disarmed
D3[1] = 1;
D3[2] = 1;
D3[3] = 1;
delay(1000);
}
// Move to next state:
main_state = 2;
} // END STATE 1
// STATE 2 -:
else if (main_state == 2) {
// CONFIRM USER WROTE DOWN THE KEY:
lcd.setCursor(0, 1);
lcd.print("Press Red to ARM");
button_2_state = digitalRead(button_2);
if (button_2_state == LOW) {
delay(100);
}
else if (button_2_state == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ARMED:");
lcd.setCursor(7, 0);
//lcd.print(timer_sec);
timer_min = int(timer_sec / 60);
timer_sec_remainder = timer_sec % 60;
if (timer_min < 10) {
lcd.print("0");
}
else {
Serial.print(" ");
}
lcd.print(timer_min);
if (timer_sec_remainder < 10) {
lcd.print(":0");
}
else {
lcd.print(":");
}
lcd.print(timer_sec_remainder);
timer_sec = timer * 60;
timer_fast = timer_sec / 6;
timer_faster = timer_fast / 3;
// Move to next state:
main_state = 3;
}
}
// END STATE 2
// STATE 3 -:
// - run timer
else if (main_state == 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ARMED:");
lcd.setCursor(7, 0);
//lcd.print(timer_sec);
timer_min = int(timer_sec / 60);
timer_sec_remainder = timer_sec % 60;
if (timer_min < 10) {
lcd.print("0");
}
else {
Serial.print(" ");
}
lcd.print(timer_min);
if (timer_sec_remainder < 10) {
lcd.print(":0");
}
else {
lcd.print(":");
}
lcd.print(timer_sec_remainder);
if (D_State == 0) {
lcd.setCursor(0, 1);
lcd.print("***");
}
else if (D_State == 1) {
lcd.setCursor(0, 1);
lcd.print("**");
}
else if (D_State == 2) {
lcd.setCursor(0, 1);
lcd.print("*");
}
if (timer_sec <= 0) {
main_state = 4;
}
else if (timer_sec < timer_faster) {
digitalWrite(signal_pin, 1);
delay(50);
timer_sec = timer_sec - 1;
digitalWrite(signal_pin, 0);
delay(200);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(200);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(200);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(200);
}
else if (timer_sec < timer_fast) {
digitalWrite(signal_pin, 1);
delay(50);
timer_sec = timer_sec - 1;
digitalWrite(signal_pin, 0);
delay(400);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(400);
}
else if (timer_sec > 1) {
digitalWrite(signal_pin, 1);
delay(50);
timer_sec = timer_sec - 1;
digitalWrite(signal_pin, 0);
delay(950);
}
//- check D_current
check_D_current();
if (D_State == 0) {
if (
D_current[0] == D0[0] and
D_current[1] == D0[1] and
D_current[2] == D0[2] and
D_current[3] == D0[3]
) {
Serial.println(" ");
}
else {
if (
D_current[0] == D1[0] and
D_current[1] == D1[1] and
D_current[2] == D1[2] and
D_current[3] == D1[3]
) {
digitalWrite(signal_pin, 1);
delay(1000);
D_State = 1;
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
}
//----- if D_current != D1 -> BOOM
else {
digitalWrite(signal_pin, 1);
main_state = 4;
delay(1000);
digitalWrite(signal_pin, 1);
}
}
} // end D_State == 0
if (D_State == 1) {
if (
D_current[0] == D1[0] and
D_current[1] == D1[1] and
D_current[2] == D1[2] and
D_current[3] == D1[3]
) {
Serial.println(" ");
}
else {
Serial.println(D2[0]);
Serial.println(D2[1]);
Serial.println(D2[2]);
Serial.println(D2[3]);
Serial.println(" ");
if (
D_current[0] == D2[0] and
D_current[1] == D2[1] and
D_current[2] == D2[2] and
D_current[3] == D2[3]
) {
digitalWrite(signal_pin, 1);
delay(1000);
D_State = 2;
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
}
else {
digitalWrite(signal_pin, 1);
main_state = 4;
delay(1000);
digitalWrite(signal_pin, 1);
}
}
} // end D_State == 1
if (D_State == 2) {
//--- if D_current == D0 : pass
if (
D_current[0] == D2[0] and
D_current[1] == D2[1] and
D_current[2] == D2[2] and
D_current[3] == D2[3]
) {
Serial.println(" ");
}
//--- else if D_current != D0:
else {
//----- else if D_current == D1 -> D_state = 1
if (
D_current[0] == D3[0] and
D_current[1] == D3[1] and
D_current[2] == D3[2] and
D_current[3] == D3[3]
) {
digitalWrite(signal_pin, 1);
delay(1000);
D_State = 3;
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
}
//----- if D_current != D1 -> BOOM
else {
digitalWrite(signal_pin, 1);
main_state = 4;
delay(1000);
digitalWrite(signal_pin, 1);
}
}
} // end D_State == 2
if (D_State == 3) {
lcd.clear();
lcd.setCursor(0, 0);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
digitalWrite(signal_pin, 1);
delay(50);
digitalWrite(signal_pin, 0);
delay(50);
lcd.print(" BOMB DEFUSED");
delay(1000000);
} // end D_State == 3
} // END STATE 3
// STATE 4 - BOOM, TERRORISTS WIN:
else if (main_state == 4) {
lcd.clear();
lcd.setCursor(0, 0);
digitalWrite(signal_pin, 10);
lcd.print(" BOMB EXPLODED");
for (int i = 200; i > 0; i--) // this is the ultra hi definition explosion sound xD
{
tone(buzzerPin, i);
delay(20);
}
noTone(buzzerPin);
delay(100000);
} // END STATE 4
} // END LOOP
// Check current bomb wires config:
void check_D_current() {
R = digitalRead(Red_wire);
B = digitalRead(Black_wire);
G = digitalRead(Green_wire);
Y = digitalRead(Yellow_wire);
// Print for debug:
Serial.println("D_current:");
D_current[0] = R;
D_current[1] = B;
D_current[2] = G;
D_current[3] = Y;
Serial.println(D_current[0]);
Serial.println(D_current[1]);
Serial.println(D_current[2]);
Serial.println(D_current[3]);
Serial.println(" ");
}
/* DISARM SEQUENCE REF:
R,B,G 1
R,B,Y 2
R,G,B 3
R,G,Y 4
R,Y,B 5
R,Y,G 6
B,R,G 7
B,R,Y 8
B,G,R 9
B,G,Y 10
B,Y,R 11
B,Y,G 12
G,R,B 13
G,R,Y 14
G,B,R 15
G,B,Y 16
G,Y,R 17
G,Y,B 18
Y,R,B 19
Y,R,G 20
Y,B,R 21
Y,B,G 22
Y,G,R 23
Y,G,B 24
*/