//Sargun Singh, 300340568, ENGR 1190 Midterm
//Library for servo
#include <Servo.h>
//Servo object
Servo myServo;
//Array that contains the pin numbers of all 4 leds
int leds[4] = {5,6,9,10};
//Function to setup arduino and start communications.
void setup() {
//Lines 15 through 18 assign leds to pins
pinMode(5, OUTPUT); //amber led
pinMode(6, OUTPUT); //blue led
pinMode(9, OUTPUT); //red led
pinMode(10, OUTPUT); //green led
//Lines 21 through 24 assigns push buttons to pins.
pinMode(2, INPUT); //push button a (red)
pinMode(12, INPUT); //push button b (green)
pinMode(8, INPUT); //push button c (blue)
pinMode(7, INPUT); //push button d (yellow)
//designates pin 11 to servo motor
myServo.attach(11);//servo motor
//Initialize serial communication at a speed of 9600 bits per second.
Serial.begin(9600);
//Initialize random number generator function
randomSeed(analogRead(0));
}
//Function that continuously loops performing tasks, responding to changes, and control devices.
void loop() {
//Following for loop turns off all leds to start off.
for(int i = 0; i < 4; i++){
digitalWrite(leds[i], HIGH);//turns led off.
}
//********TASK 1 BEGIN*****************************************************************************************************
//Check if button A (red) is being pressed
if(digitalRead(2) == HIGH){
//This first for loop starts from green goes to blue blinking each led twice.
for(int i =3; i >=1; i--){
//This nested for loop blinks leds twice
for(int j =0; j < 2; j++){
if(digitalRead(2) == LOW){break;}//if the button is let go then the leds stop blinking.
digitalWrite(leds[i], LOW);//turn current led on
delay(150);//delay 150 ms
digitalWrite(leds[i], HIGH);//turn current led off
delay(150);//delay 150ms
}
}
//This second for loop starts from orange and goes to red blinking each led twice
for(int i =0; i < 3; i++){
//This nested for loop blinks leds twice
for(int j =0; j < 2; j++){
if(digitalRead(2) == LOW){break;}//if the button is let go then the leds stop blinking.
digitalWrite(leds[i], LOW);//turn current led on
delay(150);//delay 150 ms
digitalWrite(leds[i], HIGH);//turn current led off
delay(150);//delay 150ms
}
}
}
//********TASK 1 END******************************************************************************************************
//********TASK 2 BEGIN**********************************************************************************************************
//Check if button B(green) is being pressed
if(digitalRead(12) == HIGH){
//get a random value from 0 to 3 and store it in integer rLed named after randomLed.
int rLed = random(4);
//For loop blinks light twice with 150 ms delay
for(int i = 0; i < 2;i++){
digitalWrite(leds[rLed], LOW);//turn on random led
delay(150);//delay 150ms
digitalWrite(leds[rLed], HIGH);//turn off random led
delay(150);//delay 150ms
}
}
//*********TASK 2 END*****************************************************************************************************
//********TASK 3 BEGIN****************************************************************************************************
//Check if button C (blue) is being pressed
if(digitalRead(8) == HIGH){
//This for loop rotated servo from 20 degrees to 120 degrees with 8 ms delay per degree
for(int i = myServo.read(); i < 120; i++){
if(digitalRead(8) == LOW){break;}//if button C is let go stop rotating
myServo.write(i);//rotates servo
delay(8);//delay 8ms
}
//This for loop rotates servo from 120 degree back to 20 degrees with 8 ms delay per degree
for(int i =120; i >= 20; i--){
if(digitalRead(8) == LOW){break;} //if button C is let go stop rotating
myServo.write(i);//rotates servo
delay(8);//delay 8ms
}
}
//********TASK 3 END**********************************************************************************************************
//********TASK 4 BEGIN************************************************************************************************************
//Check is button D(orange) is being pressed
if(digitalRead(7) == HIGH){
myServo.write(30);//rotate servo to 30 degrees
//Following for loop blinks blue led twice.
for(int i =0; i < 2; i++){
digitalWrite(6, LOW);//turn on blue led
delay(150);//delay 150ms
digitalWrite(6, HIGH);//turn off blue led
delay(150);//delay 150ms
}
myServo.write(90);//rotate servo to 90 degrees
//Following for loop blinks green led three times.
for(int i =0; i < 3; i++){
digitalWrite(10, LOW);//turn on green led
delay(150);//delay 150ms
digitalWrite(10, HIGH);//turn off green led
delay(150);//delay 150ms
}
myServo.write(120);//rotate servo to 120 degrees
//Following for loop blinks orange and red leds alternatively twice
for(int i =0; i < 2; i++){
digitalWrite(5, LOW);//turn on orange led
delay(150);//delay 150ms
digitalWrite(5, HIGH);//turn off orange led
delay(150);//delay 150ms
digitalWrite(9, LOW);//turn on red led
delay(150);//delay 150ms
digitalWrite(9, HIGH);//turn off red led
delay(150);//delay 150ms
}
}
//*********TASK 4 END********************************************************************************************************
}