#define dbg(myFixedText, variableName) \
  Serial.print( F(#myFixedText " "  #variableName"=") ); \
  Serial.println(variableName);
// usage: dbg("1:my fixed text",myVariable);
// myVariable can be any variable or expression that is defined in scope

#define dbgi(myFixedText, variableName,timeInterval) \
  do { \
    static unsigned long intervalStartTime; \
    if ( millis() - intervalStartTime >= timeInterval ){ \
      intervalStartTime = millis(); \
      Serial.print( F(#myFixedText " "  #variableName"=") ); \
      Serial.println(variableName); \
    } \
  } while (false);
// usage: dbgi("2:my fixed text",myVar,myInterval);
// myVar can be any variable or expression that is defined in scope
// myInterval is the time-interval which must pass by before the next
// print is executed


#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

#define button 2 //attaches button to pin 2
#define button2 3 //attaches button to pin 3
#define button3 4 //attaches button to pin 3

int buttonState = 0; //buttonState stores state of input

const byte positions[] = {0, 90,};
unsigned long period = 500;
unsigned long startTime = 0;
int greenLED = 11;

void setup() {
  Serial.begin(115200);
  Serial.println("Setup Start");
  
  pinMode (greenLED, OUTPUT);
  pinMode(button, INPUT_PULLUP); //sets button as input
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);

  servo1.attach(5);
  servo2.attach(6);
  servo3.attach(9);
  servo4.attach(10);
}


void loop() {  
  digitalWrite (greenLED, HIGH);
  delay (100);
  digitalWrite (greenLED, LOW);
  delay (100);
  
  buttonState = digitalRead(button); //reads state of buttonunsigned long currentTime = millis();
  unsigned long currentTime = millis();
  dbgi("top of loop",currentTime,1000);

  dbg("result of currentTime - startTime is:",currentTime - startTime);
  if ((currentTime - startTime >= period) && (buttonState == LOW))
  {
    dbg("if ((currentTime - startTime >= period) && (buttonState == LOW)) is true",1);
    dbg("Level One - Has started",0);
    servo1.write(90);
    servo2.write(0);
    servo3.write(90);
    servo4.write(90);
    dbg("Begin Fire",0)
    delay(1000);
    servo2.write(90);
    delay(500);

    servo1.write(0);  //run this servo sequence
    delay(1200);
    servo1.write(90);
    servo2.write(0);
    delay(1200);
    servo2.write(90);
    servo3.write(0);
    delay(1200);
    servo3.write(90);
    servo4.write(0);
    delay(1200);
    servo4.write(90);
    delay(1200);
    servo1.write(0);  //run this servo sequence
    delay(1200);
    servo1.write(90);
    servo2.write(0);
    delay(1200);
    servo2.write(90);
    servo3.write(0);
    delay(1200);
    servo3.write(90);
    servo4.write(0);
    delay(1200);
    servo4.write(90);
    delay(1200);
    servo1.write(0);
    servo2.write(0);
    servo3.write(0);
    servo4.write(0);
    delay(300);
    servo1.write(90);
    servo2.write(90);
    servo3.write(90);
    servo4.write(90);
    delay(200);
    dbg("Level One - Has ended",0);
  }

  if (buttonState == HIGH) { //button is not pressed 
  }

  buttonState = digitalRead(button2); //reads state of buttonunsigned long currentTime = millis();
  if ((currentTime - startTime >= period) && (buttonState == LOW))
  {
    dbg("You have now entered setup mode ",0);
    servo1.write(0);
    servo2.write(90);
    servo3.write(90);
    servo4.write(90);
    delay(1000);
    servo1.write(90);
    delay(200);
    dbg("Begin Setup",0)
    servo1.write(0);
    servo2.write(0);
    servo3.write(0);
    servo4.write(0);
    delay(8000);
    servo1.write(90);
    servo2.write(90);
    servo3.write(90);
    servo4.write(90);
    delay(200);
    dbg("Setup mode has ended",0);
  }

  if (buttonState == HIGH) { //button is not pressed 
  }

  buttonState = digitalRead(button3); //reads state of buttonunsigned long currentTime = millis();
  if ((currentTime - startTime >= period) && (buttonState == LOW))
  {
    dbg("Level Two - Has started",0);
    servo1.write(90);
    servo2.write(90);
    servo3.write(0);
    servo4.write(90);
    delay(1000);
    servo3.write(90);
    dbg("Begin Fire",0)
    delay(500);

    servo2.write(0);  //run this servo sequence
    delay(800);
    servo2.write(90);
    servo4.write(0);
    delay(800);
    servo4.write(90);
    servo1.write(0);
    delay(800);
    servo1.write(90);
    servo3.write(0);
    delay(800);
    servo3.write(90);
    delay(800);
    servo2.write(0);  
    delay(800);
    servo2.write(90);
    servo4.write(0);
    delay(800);
    servo4.write(90);
    servo1.write(0);
    delay(800);
    servo1.write(90);
    servo3.write(0);
    delay(800);
    servo3.write(90);
    delay(300);
    servo1.write(0);
    servo2.write(0);
    servo3.write(0);
    servo4.write(0);
    delay(300);
    servo1.write(90);
    servo2.write(90);
    servo3.write(90);
    servo4.write(90);
    delay(200);
    dbg("Level Two - Has ended",0);
  }
  if (buttonState == HIGH) { //button is not pressed 
  }
}