// Mahdy Abood 300346884
#include <Servo.h>
Servo servo_1; // declaring variable
const long intervalTime0 = 1000; // a set interval of time to tally at
const long intervalTime1 = 1000; // a set interval of time to tally at
const long intervalTime2 = 1000; // a set interval of time to tally at
const long intervalTime3 = 1000; // a set interval of time to tally at
const long intervalTime4 = 1000; // a set interval of time to tally at
const long intervalTime5 = 1000; // a set interval of time to tally at
const long intervalTime6 = 1000; // a set interval of time to tally at
const long intervalTime7 = 1000; // a set interval of time to tally at
const long intervalTime8 = 1000; // a set interval of time to tally at
const long intervalTime9 = 1000; // a set interval of time to tally at
const long intervalTime10 =1000; // a set interval of time to tally at
const long intervalTime11= 1000; // a set interval of time to tally at
const long intervalTime12= 1000; // a set interval of time to tally at
const long intervalTime13= 1000; // a set interval of time to tally at
const long intervalTime14= 1000; // a set interval of time to tally at
const long intervalTime15= 1000; // a set interval of time to tally at
const long intervalTime16= 1000; // a set interval of time to tally at
const long intervalTime17= 2000; // a set interval of time to tally at
const long intervalTime18= 3000; // a set interval of time to tally at
const long intervalTime19= 4000; // a set interval of time to tally at
const long intervalTime20= 5000; // a set interval of time to tally at
unsigned long previousTime0 = 0; // to store the amount of time to use in if statements
unsigned long previousTime1 = 0; // to store the amount of time to use in if statements
unsigned long previousTime2 = 0; // to store the amount of time to use in if statements
unsigned long previousTime3 = 0; // to store the amount of time to use in if statements
unsigned long previousTime4 = 0; // to store the amount of time to use in if statements
unsigned long previousTime5 = 0; // to store the amount of time to use in if statements
unsigned long previousTime6 = 0; // to store the amount of time to use in if statements
unsigned long previousTime7 = 0; // to store the amount of time to use in if statements
unsigned long previousTime8 = 0; // to store the amount of time to use in if statements
unsigned long previousTime9 = 0; // to store the amount of time to use in if statements
unsigned long previousTime10 = 0; // to store the amount of time to use in if statements
unsigned long previousTime11 = 0; // to store the amount of time to use in if statements
unsigned long previousTime12 = 0; // to store the amount of time to use in if statements
unsigned long previousTime13= 0; // to store the amount of time to use in if statements
unsigned long previousTime14= 0; // to store the amount of time to use in if statements
unsigned long previousTime15= 0; // to store the amount of time to use in if statements
unsigned long previousTime16 = 0; // to store the amount of time to use in if statements
unsigned long previousTime17 = 0; // to store the amount of time to use in if statements
unsigned long previousTime18 = 0; // to store the amount of time to use in if statements
unsigned long previousTime19= 0; // to store the amount of time to use in if statements
unsigned long previousTime20= 0; // to store the amount of time to use in if statements
void interruptHandler(){ // defining function interruptHandler
digitalWrite(5, HIGH); // turn off yellow LED
digitalWrite(6, HIGH); // turn off blue LED
digitalWrite(9, HIGH); // turn off red LED
digitalWrite(10, HIGH); // turn off Green LED
servo_1.write(145); // set to 145 degrees
}
void interrupt(){ // defining function interrupt
digitalWrite(5, HIGH); // turn off yellow LED
digitalWrite(6, HIGH); // turn off blue LED
digitalWrite(9, HIGH); // turn off red LED
digitalWrite(10, HIGH); // turn off Green LED
}
int pos = 0; //initializing position
void setup() {
servo_1.attach (11); // where is the servo connected to
pinMode(2, INPUT); // Button A Red
pinMode(12, INPUT); // button B green
pinMode(8, INPUT); // button C blue
pinMode(7, INPUT); //button D yellow
pinMode(5,OUTPUT); // yellow color led
pinMode(6, OUTPUT); // blue color led
pinMode(9,OUTPUT); // red color led
pinMode(10, OUTPUT); //green color led
attachInterrupt(digitalPinToInterrupt(2), interruptHandler, RISING); // genrating a rising interrupt service routine
}
void loop() {
while(digitalRead(2) == true){ // if Button A is activated iterupt continous action
interruptHandler(); // call and initiate function
}
unsigned long currentTime = millis(); // assign current time to millis
digitalWrite(10, HIGH); // turn off green led // This block keeps looping continously, unless otherwise stopped
if (millis() >= previousTime0 + intervalTime0) { // if the time passing is greater than the stored and the set interval
previousTime0 += intervalTime0; //then store the interval and execute code below
digitalWrite(10, LOW); // turn on green led //and turn on led
}
digitalWrite(5, HIGH); // turn off yellow led
if (millis() >= previousTime1 + intervalTime1) {
previousTime1 += intervalTime1;
digitalWrite(5, LOW); // turn on yellow led
}
digitalWrite(6, HIGH); // turn on blue led
if (millis() >= previousTime2 + intervalTime2) {
previousTime2 += intervalTime2;
digitalWrite(6, LOW); // turn on blue led
}
digitalWrite(9, HIGH); // turn on red led
if (millis() >= previousTime3 + intervalTime3) {
previousTime3 += intervalTime3;
digitalWrite(9, LOW); // turn on red led
}
while(digitalRead(12) == true){
for(pos = 10; pos <= 120; pos += 1){
servo_1.write(pos);
}
}
while(digitalRead(8) == true){
while(digitalRead(7) == true){
digitalWrite(5, HIGH); // turn off yellow LED
digitalWrite(6, HIGH); // turn off blue LED
digitalWrite(9, HIGH); // turn off red LED
digitalWrite(10, HIGH); // turn off Green LED
int randNumber = random(3);
if (randNumber == 0 ){ // if the case is case zero
digitalWrite(5, HIGH); // turn off yellow LED
digitalWrite(6, HIGH); // turn off blue LED
digitalWrite(9, HIGH); // turn off red LED
digitalWrite(10, HIGH); // turn off Green LED
servo_1.write(30); // set to 30 degrees
if (millis() >= previousTime4 + intervalTime4) {
previousTime4 += intervalTime4;
digitalWrite(5, LOW); // turn on yellow led
}
if (millis() >= previousTime5 + intervalTime5) {
previousTime5 += intervalTime5;
digitalWrite(5, LOW); // turn on yellow led
}
break;
}
if (randNumber == 1 ){ // if the number is case 1
digitalWrite(5, HIGH); // turn off yellow LED
digitalWrite(6, HIGH); // turn off blue LED
digitalWrite(9, HIGH); // turn off red LED
digitalWrite(10, HIGH); // turn off Green LED
digitalWrite(9, HIGH); // turn on red led
servo_1.write(90); // set to 90 degrees
if (millis() >= previousTime7 + intervalTime7) {
previousTime7 += intervalTime7;
digitalWrite(9, LOW); // turn on red led
}
if (millis() >= previousTime8 + intervalTime8) {
previousTime8 += intervalTime8;
digitalWrite(9, LOW); // turn on red led
}
if (millis() >= previousTime9 + intervalTime9) {
previousTime9 += intervalTime9;
digitalWrite(6, LOW); // turn on blue led
}
if (millis() >= previousTime10 + intervalTime10) {
previousTime10 += intervalTime10;
digitalWrite(6, LOW); // turn on blue led
}
if (millis() >= previousTime11 + intervalTime11) {
previousTime7 += intervalTime7;
digitalWrite(9, LOW); // turn on red led
}
if (millis() >= previousTime12 + intervalTime12) {
previousTime12 += intervalTime12;
digitalWrite(9, LOW); // turn on red led
}
if (millis() >= previousTime13 + intervalTime13) {
previousTime13 += intervalTime13;
digitalWrite(6, LOW); // turn on blue led
}
if (millis() >= previousTime14 + intervalTime14) {
previousTime14 += intervalTime14;
digitalWrite(6, LOW); // turn on blue led
}
if (millis() >= previousTime15 + intervalTime15) {
previousTime15 += intervalTime15;
digitalWrite(9, LOW); // turn on red led
}
if (millis() >= previousTime16 + intervalTime16) {
previousTime16 += intervalTime16;
digitalWrite(9, LOW); // turn on red led
}
if (randNumber == 2 ){ // if the number is case 2
digitalWrite(5, HIGH); // turn off yellow LED
digitalWrite(6, HIGH); // turn off blue LED
digitalWrite(9, HIGH); // turn off red LED
digitalWrite(10, HIGH); // turn off Green LED
servo_1.write(150); // set to 150 degrees // blink the amber led 4 times once every second
if (millis() >= previousTime17 + intervalTime17) {
previousTime17 += intervalTime17;
digitalWrite(6, LOW); // turn on blue led
}
if (millis() >= previousTime18 + intervalTime18) {
previousTime18 += intervalTime18;
digitalWrite(6, LOW); // turn on blue led
}
if (millis() >= previousTime19 + intervalTime19) {
previousTime19 += intervalTime19;
digitalWrite(9, LOW); // turn on red led
}
if (millis() >= previousTime20 + intervalTime20) {
previousTime20 += intervalTime20;
digitalWrite(9, LOW); // turn on red led
}
}
}
}
}