/*
Kurt Sion
Student # 300383943 
ENGR1190 Midterm 
*/

#include <Servo.h>

Servo myservo;
int state;

void setup() {
  // put your setup code here, to run once:
  pinMode(2, INPUT);          //Botton A (red)
  pinMode(12, INPUT);         //Botton B (green)
  pinMode(8, INPUT);          //Botton C (blue)
  pinMode(7, INPUT);          //Botton D (yellow)
  pinMode(5, OUTPUT);         //LED Orange
  pinMode(6, OUTPUT);         //LED Blue
  pinMode(9, OUTPUT);         //LED Red
  pinMode(10, OUTPUT);        //LED Green
  myservo.attach(11);         //Servo
}

void loop() 
{
  // put your main code here, to run repeatedly:
  //Turn all LED off 
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);

//task 1 - when button A is press will make the led blink twice in a following serquence 
  while(digitalRead(2) == HIGH) // (2 == button A/button RED)
  {
    // Make LED green blink twice (10 == green)
    digitalWrite(10, LOW);
    delay(150);
    digitalWrite(10, HIGH);
    delay(150);
    digitalWrite(10 ,LOW);
    delay(150);
    digitalWrite(10, HIGH);
    delay(150);

    // Make LED red blink twice (9 == red)
    digitalWrite(9, LOW);
    delay(150);
    digitalWrite(9, HIGH);
    delay(150);
    digitalWrite(9, LOW);
    delay(150);
    digitalWrite(9, HIGH);
    delay(150);
    
    // Make LED blue blink twice (6 == blue)
    digitalWrite(6, LOW);
    delay(150);
    digitalWrite(6, HIGH);
    delay(150);
    digitalWrite(6, LOW);
    delay(150);
    digitalWrite(6, HIGH);
    delay(150);
    
    // Make LED oragen blink twice (5 == orange)
    digitalWrite(5, LOW);
    delay(150);
    digitalWrite(5, HIGH);
    delay(150);
    digitalWrite(5, LOW);
    delay(150);
    digitalWrite(5, HIGH);
    delay(150);
    
    // Make LED orange blink twice (5 == orange)
    digitalWrite(5, LOW);
    delay(150);
    digitalWrite(5, HIGH);
    delay(150);
    digitalWrite(5, LOW);
    delay(150);
    digitalWrite(5, HIGH);
    delay(150);

    // Make LED blue blink twice (6 == blue)
    digitalWrite(6, LOW);
    delay(150);
    digitalWrite(6, HIGH);
    delay(150);
    digitalWrite(6, LOW);
    delay(150);
    digitalWrite(6, HIGH);
    delay(150);
    
    // Make LED red blink twice (9 == red)
    digitalWrite(9, LOW);
    delay(150);
    digitalWrite(9, HIGH);
    delay(150);
    digitalWrite(9, LOW);
    delay(150);
    digitalWrite(9, HIGH);
    delay(150);
    
    // Make LED green blink twice (10 == green)
    digitalWrite(10, LOW);
    delay(150);
    digitalWrite(10, HIGH);
    delay(150);
    digitalWrite(10, LOW);
    delay(150);
    digitalWrite(10, HIGH);
    delay(150);
  }
  

  //task 2 -  when button B is selected it will randomly select LED to blink twice 
  while(digitalRead(12) == HIGH) // (12 == button B/ button green)
  {
    int random_light = random(1, 5); // make the random numbers to be selected 
    // if random number pick 1 LED orange will blink twice (5 == orange)
    if (random_light == 1)
    {
      digitalWrite(5, LOW); 
      delay(150);
      digitalWrite(5, HIGH);
      delay(150);
      digitalWrite(5, LOW); 
      delay(150);
      digitalWrite(5, HIGH);
      delay(150);
    }

    // if random number pick 2 LED blue will blink twice (6 ==. blue)
    if (random_light == 2)
    {
      digitalWrite(6, LOW); 
      delay(150);
      digitalWrite(6, HIGH);
      delay(150);
      digitalWrite(6, LOW); 
      delay(150);
      digitalWrite(6, HIGH);
      delay(150);
    }

    // if random number pick 3 LED red will blink twice (9 == red)
    if (random_light == 3)
    {
      digitalWrite(9, LOW); 
      delay(150);
      digitalWrite(9, HIGH);
      delay(150);
      digitalWrite(9, LOW); 
      delay(150);
      digitalWrite(9, HIGH);
      delay(150);
    }

    // if random number pick 4 LED green will blink twice (10 == green)
    if (random_light == 4)
    {
      digitalWrite(10, LOW); 
      delay(150);
      digitalWrite(10, HIGH);
      delay(150);
      digitalWrite(10, LOW); 
      delay(150);
      digitalWrite(10, HIGH);
      delay(150);
    }
  }


  //task 3 - when bottun c is press servo will go back and forth between 20 and 120 stoping ever 8 sec
  while(digitalRead(8) == HIGH) //(8 == button C/button blue)
  {
    // make a for loop to go back and forth between 20 and 120 
    for(int i = 20; i <= 120; i++) 
    {
      myservo.write(i); // (myservo  == servo)
      delay(8); //make it so it stop momentarily at 8 degrees
    }
    for(int i = 120; i >= 20; i--)
      {
        myservo.write(i);
        delay(8);
      }
  }
    

  //task 4 - when button d is press it will alternate between three states
  while(digitalRead(7) == HIGH) //(7 == button D/button yellow)
  {
    // will make the LED blue blink twice and make the servo go to 30 degrees (6 == blue)
    myservo.write(30);
    digitalWrite(6, LOW);
    delay(150);
    digitalWrite(6, HIGH);
    delay(150);
    digitalWrite(6, LOW);
    delay(150);
    digitalWrite(6, HIGH);
    delay(150);

    // will make the LED green blink twice and make the servo go to 90 degrees (10 == green)
    myservo.write(90);
    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);
    
    // will the LED orange and LED red blink twice alternative ly and make the servo go to 120 degrees (5 == oragne, 9 == red)
    myservo.write(120);
    digitalWrite(5, LOW);
    delay(150);
    digitalWrite(5, HIGH);
    delay(150);
    digitalWrite(9, LOW);
    delay(150);
    digitalWrite(9, HIGH);
    delay(150);
    digitalWrite(5, LOW);
    delay(150);
    digitalWrite(5, HIGH);
    delay(150);
    digitalWrite(9, LOW);
    delay(150);
    digitalWrite(9, HIGH);
    delay(150);
  }
}