#include <SoftwareSerial.h>
int upred = 2; // connect UP RED LED to D2 Arduino
int upyellow = 3; // connect UP YELLOW LED to D3 Arduino
int upgreen = 4; // connect UP GREEN LED to D4 Arduino
int rightred = 5; // connect RIGHT RED LED to D5 Arduino
int rightyellow = 6; // connect RIGHT YELLOW LED to D6 Arduino
int rightgreen = 7; // connect RIGHT GREEN LED to D7 Arduino
int downred = 8; // connect DOWN RED LED to D8 Arduino
int downyellow = 9; // connect DOWN YELLOW LED to D9 Arduino
int downgreen = 10; // connect DOWN GREEN LED to D10 Arduino
int leftred = 11; // connect LEFT RED LED to D11 Arduino
int leftyellow = 12; // connect LEFT YELLOW LED to D12 Arduino
int leftgreen = 13; // connect LEFT GREEN LED to D13 Arduino
// set variables for IR Sensor
int up, right, down, left, walk, w;
void setup()
{
Serial.begin(9600); // set baudrate to 9600
pinMode(upred, OUTPUT); // set UP RED LED as OUTPUT
pinMode(upyellow, OUTPUT); // set UP YELLOW LED as OUTPUT
pinMode(upgreen, OUTPUT); // set UP GREEN LED as OUTPUT
pinMode(rightred, OUTPUT); // set RIGHT RED LED as OUTPUT
pinMode(rightyellow, OUTPUT); // set RIGHT YELLOW LED as OUTPUT
pinMode(rightgreen, OUTPUT); // set RIGHT GREEN LED as OUTPUT
pinMode(downred, OUTPUT); // set DOWN RED LED as OUTPUT
pinMode(downyellow, OUTPUT); // set DOWN YELLOW LED as OUTPUT
pinMode(downgreen, OUTPUT); // set DOWN GREEN LED as OUTPUT
pinMode(leftred, OUTPUT); // set LEFT RED LED as OUTPUT
pinMode(leftyellow, OUTPUT); // set LEFT YELLOW LED as OUTPUT
pinMode(leftgreen, OUTPUT); // set LEFT GREEN LED as OUTPUT
w=1; // set w to 1
}
void loop()
{
readsensor(); // read any input from IR Sensors
if(up == 1) // when UP IR Sensor is HIGH
{
if(walk == 1) // does WALK IR Sensor is HIGH ?
{
openWALK(); // do WALK command
}
else // WALK IR Sensor is LOW
{
openUP(); // do UP command
w=2; // change w to 2
}
}
if(right == 1) // when RIGHT IR Sensor is HIGH
{
if(walk == 1) // does WALK IR Sensor is HIGH ?
{
openWALK(); // do WALK command
}
else // WALK IR Sensor is LOW
{
openRIGHT(); // do RIGHT command
w=3; // change w to 3
}
}
if(down == 1) // when DOWN IR Sensor is HIGH
{
if(walk == 1) // does WALK IR Sensor is HIGH ?
{
openWALK(); // do WALK command
}
else // WALK IR Sensor is LOW
{
openDOWN(); // do DOWN command
w=4; // change w to 4
}
}
if(left == 1) // when LEFT IR Sensor is HIGH
{
if(walk == 1) // does WALK IR Sensor is HIGH ?
{
openWALK(); // do WALK command
}
else // WALK IR Sensor is LOW
{
openLEFT(); // do LEFT command
w=1; // change w back to 1
}
}
if(walk == 1) // when WALK IR Sensor is HIGH
{
openWALK(); // do WALK command
}
else // when WALK IR Sensor is LOW
{
if(up == 0 && right == 0 && down == 0 && left == 0 && walk == 0 && w == 1) // when all IR Sensors is LOW and w is 1
{
openUP(); // do UP command
w=2; // change w to 2
}
if(up == 0 && right == 0 && down == 0 && left == 0 && walk == 0 && w == 2) // when all IR Sensors if LOW and w is 2
{
openRIGHT(); // do RIGHT command
w=3; // change w to 3
}
if(up == 0 && right == 0 && down == 0 && left == 0 && walk == 0 && w == 3) // when all IR Sensors is LOW and w is 3
{
openDOWN(); // do DOWN command
w=4; // change w to 4
}
if(up == 0 && right == 0 && down == 0 && left == 0 && walk == 0 && w == 4) // when all IR Sensors is LOW and w is 4
{
openLEFT(); // do LEFT command
w=1; // change w back to 1
}
}
}
// read all IR Sensors input
void readsensor()
{
up = analogRead(A0); // connect A0 UP IR Sensor to A0 Arduino
right = analogRead(A1); // connect A0 RIGHT IR Sensor to A1 Arduino
down = analogRead(A2); // connect A0 DOWN IR Sensor to A2 Arduino
left = analogRead(A3); // connect A0 LEFT IR Sensor to A3 Arduino
walk = analogRead(A4); // connect A0 WALK IR Sensor to A4 Arduino
if(up < 400) // when UP IR Sensor input value is less than 400
{
up = 1; // make UP as HIGH
}
else // when UP IR Sensor input value is more than 400
{
up = 0; // make UP as LOW
}
if(right < 400) // when RIGHT IR Sensor input value is less than 400
{
right = 1; // make RIGHT as HIGH
}
else // when RIGHT IR Sensor input value is more than 400
{
right = 0; // make RIGHT as LOW
}
if(down < 400) // when DOWN IR Sensor input value is less than 400
{
down = 1; // make DOWN as HIGH
}
else // when DOWN IR Sensor input value is more than 400
{
down = 0; // make DOWN as LOW
}
if(left < 400) // when LEFT IR Sensor input value is less than 400
{
left = 1; // make LEFT as HIGH
}
else // when LEFT IR Sensor input value is more than 400
{
left = 0; // make LEFT as LOW
}
if(walk < 400) // when WALK IR Sensor input value is less than 400
{
walk = 1; // make WALK as HIGH
}
else // when WALK IR Sensor input value is more than 400
{
walk = 0; // make WALK as LOW
}
// display all value at Serial Monitor
Serial.print(up);
Serial.print(right);
Serial.print(down);
Serial.print(left);
Serial.println(walk);
}
// UP command
void openUP()
{
// GREEN turn ON for 5 secs then turn to YELLOW
digitalWrite(upred, LOW);
digitalWrite(upgreen, HIGH);
digitalWrite(rightred, HIGH);
digitalWrite(downred, HIGH);
digitalWrite(leftred, HIGH);
delay(5000);
// YELLOW turn ON for 2 secs then turn to RED
digitalWrite(upgreen, LOW);
digitalWrite(upyellow, HIGH);
delay(2000);
// RED turn on and wait for 1 sec to read new input data from IR Sensors
digitalWrite(upyellow, LOW);
digitalWrite(upred, HIGH);
delay(1000);
readsensor();
}
// RIGHT command
void openRIGHT()
{
// GREEN turn ON for 5 secs then turn to YELLOW
digitalWrite(rightred, LOW);
digitalWrite(upred, HIGH);
digitalWrite(rightgreen, HIGH);
digitalWrite(downred, HIGH);
digitalWrite(leftred, HIGH);
delay(5000);
// YELLOW turn ON for 2 secs then turn to RED
digitalWrite(rightgreen, LOW);
digitalWrite(rightyellow, HIGH);
delay(2000);
// RED turn on and wait for 1 sec to read new input data from IR Sensors
digitalWrite(rightyellow, LOW);
digitalWrite(rightred, HIGH);
delay(1000);
readsensor();
}
// DOWN command
void openDOWN()
{
// GREEN turn ON for 5 secs then turn to YELLOW
digitalWrite(downred, LOW);
digitalWrite(upred, HIGH);
digitalWrite(rightred, HIGH);
digitalWrite(downgreen, HIGH);
digitalWrite(leftred, HIGH);
delay(5000);
// YELLOW turn ON for 2 secs then turn to RED
digitalWrite(downgreen, LOW);
digitalWrite(downyellow, HIGH);
delay(2000);
// RED turn on and wait for 1 sec to read new input data from IR Sensors
digitalWrite(downyellow, LOW);
digitalWrite(downred, HIGH);
delay(1000);
readsensor();
}
// LEFT command
void openLEFT()
{
// GREEN turn ON for 5 secs then turn to YELLOW
digitalWrite(leftred, LOW);
digitalWrite(upred, HIGH);
digitalWrite(rightred, HIGH);
digitalWrite(downred, HIGH);
digitalWrite(leftgreen, HIGH);
delay(5000);
// YELLOW turn ON for 2 secs then turn to RED
digitalWrite(leftgreen, LOW);
digitalWrite(leftyellow, HIGH);
delay(2000);
// RED turn on and wait for 1 sec to read new input data from IR Sensors
digitalWrite(leftyellow, LOW);
digitalWrite(leftred, HIGH);
delay(1000);
readsensor();
}
// WALK command
void openWALK()
{
// make all RED LEDs turn ON for 10 secs and then read new input data from IR Sensors
digitalWrite(upred, HIGH);
digitalWrite(rightred, HIGH);
digitalWrite(downred, HIGH);
digitalWrite(leftred, HIGH);
delay(10000);
readsensor();
}