/*ChunHo LAW
#300373802*/
#include <Servo.h>

Servo wiggly;
void setup() {
//output pin 
pinMode(5, OUTPUT);//orange LED
pinMode(6, OUTPUT);//blue LED
pinMode(9, OUTPUT);//red LED
pinMode(10, OUTPUT);//green LED
//input pin
pinMode(2, INPUT);//Button A
pinMode(12, INPUT);//Button B
pinMode(8, INPUT);//Button C
pinMode(7, INPUT);//Button D

//designate pin 11 as the servo PWN pin
wiggly.attach(11);

Serial.begin(9600);
//start from blink all the LEDs
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
delay(100);}
//set a int for task 4 so it can alternate between 3 states
int j = 0;
//set a int for task 4 so it can alternate blink orange and red
int k = 0; 






void loop() {

//Task 1 while button A was pressed all the LED will blink twice in (green>red>blue>orange)
//and it will reverse twice(orange>blue>red>green)
if(digitalRead(2) == HIGH)
{
  //turn on all LED in 150ms
      digitalWrite(10, LOW);
      delay(150);
      digitalWrite(9, LOW);
      delay(150);
      digitalWrite(6, LOW);
      delay(150);
      digitalWrite(5, LOW);
      delay(150);
      //turn off all LED in 150ms
      digitalWrite(10, HIGH);
      delay(150);
      digitalWrite(9, HIGH);
      delay(150);
      digitalWrite(6, HIGH);
      delay(150);
      digitalWrite(5, HIGH);
      delay(150);
      //turn on all LED in 150ms
      digitalWrite(10, LOW);
      delay(150);
      digitalWrite(9, LOW);
      delay(150);
      digitalWrite(6, LOW);
      delay(150);
      digitalWrite(5, LOW);
      delay(150);
      //turn off all LED in 150ms
      digitalWrite(10, HIGH);
      delay(150);
      digitalWrite(9, HIGH);
      delay(150);
      digitalWrite(6, HIGH);
      delay(150);
      digitalWrite(5, HIGH);
      delay(150);
      //turn on all LED in 150ms
      digitalWrite(5, LOW);
      delay(150);
      digitalWrite(6, LOW);
      delay(150);
      digitalWrite(9, LOW);
      delay(150);
      digitalWrite(10, LOW);
      delay(150);
      //turn off all LED in 150ms
      digitalWrite(5, HIGH);
      delay(150);
      digitalWrite(6, HIGH);
      delay(150);
      digitalWrite(9, HIGH);
      delay(150);
      digitalWrite(10, HIGH);
      delay(150);
      //turn on all LED in 150ms
      digitalWrite(5, LOW);
      delay(150);
      digitalWrite(6, LOW);
      delay(150);
      digitalWrite(9, LOW);
      delay(150);
      digitalWrite(10, LOW);
      delay(150);
      //turn off all LED in 150ms
      digitalWrite(5, HIGH);
      delay(150);
      digitalWrite(6, HIGH);
      delay(150);
      digitalWrite(9, HIGH);
      delay(150);
      digitalWrite(10, HIGH);
      delay(150);
}


//Task2 while button B was pressed it will choose a random LED and blink twice
if(digitalRead(12) == HIGH)
{
  int randNumber;
 // print a random number from 4 to 11
  randNumber = random(4, 11);
  //if the number is 4 add 1 to 5 and blink orange
  if(randNumber == 4)
  {
    randNumber++;
  }
  //if the number is 7 minus 1 to 6 and blink blue
  if(randNumber == 7)
  {
    randNumber--;
  }
    //if the number is 8 add 1 to 9 and blink red
   if(randNumber == 8)
  {
    randNumber++;
  }
    //if the number is 11 minus 1 to 10 and blink green
  if(randNumber == 11)
  {
    randNumber--;
  }
//blink the random LED twice
  digitalWrite(randNumber, LOW);
  delay(150);
  digitalWrite(randNumber, HIGH);
  delay(150);
  digitalWrite(randNumber, LOW);
  delay(150);
  digitalWrite(randNumber, HIGH);
  delay(150);



}

//Task 3 while button was pressed the servo will back and dorth between 20 and 120
if(digitalRead(8) == HIGH)
{
  //make the angle between 20 and 120
  for(int i = 20; i < 120; i++)
      {
        //start add the angle
        wiggly.write(i);
        //8 ms delay 
        delay(8);
      }


}

//Task4 while button D was press there will be three states
if(digitalRead(7) == HIGH)
{
  //add 1 to j to determine different states
  ++j;
  //state 1, when it press first time the servo move to 30 and blue LED blink twice
  if(j == 1)
  {
  // the servo move to 30
  wiggly.write(30);
  //blink the blue LED twice
  digitalWrite(6, LOW);
  delay(150);
  digitalWrite(6, HIGH);
  delay(150);
  digitalWrite(6, LOW);
  delay(150);
  digitalWrite(6, HIGH);
  delay(150);
  }
  //state 2, when it press second time the servo move to 90 and green LED blink three time
  if(j == 2)
  {
    // the servo move to 90
  wiggly.write(90);
  //blink the green LED three time
  digitalWrite(10, LOW);
  delay(150);
  digitalWrite(10, HIGH);
  delay(150);
  digitalWrite(10, LOW);
  delay(150);
  digitalWrite(10, HIGH);
  delay(150);
  digitalWrite(10, LOW);
  delay(150);
  digitalWrite(10, HIGH);
  delay(150);
  }
  //state 3, when it press third time the servo move to 120 and the LED will 
  //alternately blink orange and red LED
  if(j == 3)
  {
    // the servo move to 120
    wiggly.write(120);
    //add 1 to k to determine different states
    ++k;
   //state for blinking the orange LED
     if(k%2==1)
  {
  //blink the orange LED twice
  digitalWrite(5, LOW);
  delay(150);
  digitalWrite(5, HIGH);
  delay(150);
  digitalWrite(5, LOW);
  delay(150);
  digitalWrite(5, HIGH);
  delay(150);
     
      
      }
  //state for blinking the red LED
  else if(k%2==0)
  {
   //blink the red LED twice
  digitalWrite(9, LOW);
  delay(150);
  digitalWrite(9, HIGH);
  delay(150);
  digitalWrite(9, LOW);
  delay(150);
  digitalWrite(9, HIGH);
  delay(150);
    
      
      }

//if the int j is not 1,2,3 it will back to 0 and make the states loop again
   if(j != 1 || j != 2 || j != 3 )
  {
    j =0;
  }   

  }

 

  
}


}