Maze Navigation Sketch
In order to complete the maze challenge the robot had to autonomously navigate through a maze made out of hollow cardboard boxes without touching the sides. The robot received input from the two ultrasonic range detectors and manipulated each DC motor as needed in order to turn the robot left or right.
		   Arduino Sketch
//*****************************************LIBRARIES*************************************************
#include <Adafruit_MotorShield.h>
#include <encoder.h>
#include <motor.h>
#include <rangefinder.h>
#include <speedcontrol.h>
#include <Wire.h>
//*******************CREATE THE MOTOR SHIELD OBJECT WITH THE DEFAULT I2C ADDRESS*********************
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
//*****************************GLOBAL VARIABLES ARE DECLARED HERE************************************
volatile float frontSensorDistance = 0.0;
volatile float leftSensorDistance = 0.0;
//**********************************POINTERS ARE DECLARED HERE***************************************
motor *RFMotor;
motor *LFMotor;
motor *LRMotor;
motor *RRMotor;
Range_Echo *frontRange;
Range_Echo *leftRange;
//===================================================================================================
//=========================================SETUP STARTS HERE=========================================
//===================================================================================================
void setup() {
  //******************************************REGISTERS USED*******************************************
  AFMS.begin();
  frontSensorDistance = (frontRange -> Timing()) * UNIT_CONVERSION;
  leftSensorDistance = (leftRange -> Timing()) * UNIT_CONVERSION;
  RFMotor = new motor(&AFMS, 1, 0); //right front
  LFMotor = new motor(&AFMS, 2, 1); //left front
  LRMotor = new motor(&AFMS, 3, 1); //left rear
  RRMotor = new motor(&AFMS, 4, 0); //right rear
  frontRange = new Range_Echo(10, 11);
  leftRange = new Range_Echo(8, 9);
}
//===================================================================================================
//==========================================LOOP STARTS HERE=========================================
//===================================================================================================
void loop() {
  frontSensorDistance = (frontRange -> Timing()) * UNIT_CONVERSION;
  leftSensorDistance = (leftRange -> Timing()) * UNIT_CONVERSION;
  
if ((frontSensorDistance > 8.0) && (leftSensorDistance > 17.0)) {
  LFMotor->setDrive(90.0, FORWARD);
  LRMotor->setDrive(90.0, FORWARD);
  RFMotor->setDrive(94.0, FORWARD);
  RRMotor->setDrive(94.0, FORWARD);
}
else if ((frontSensorDistance <= 7.0) && (frontSensorDistance > 1.0) && (leftSensorDistance <= 10.0)) { // RIGHT turn
  for (int x = 0; x < 48; x++) {
    LFMotor->setDrive(200.0, FORWARD);
    LRMotor->setDrive(200.0, FORWARD);
    RFMotor->setDrive(198.0, BACKWARD);
    RRMotor->setDrive(198.0, BACKWARD);
  }
}
else if ((frontSensorDistance <= 7.0) && (frontSensorDistance > 1.0) && (leftSensorDistance > 10.0)) { // LEFT turn
  for (int x = 0; x < 48; x++) {
    LFMotor->setDrive(200.0, BACKWARD);
    LRMotor->setDrive(200.0, BACKWARD);
    RFMotor->setDrive(200.0, FORWARD);
    RRMotor->setDrive(200.0, FORWARD);
  }
}
else {
  LFMotor->setDrive(90.0, FORWARD);
  LRMotor->setDrive(90.0, FORWARD);
  RFMotor->setDrive(94.0, FORWARD);
  RRMotor->setDrive(94.0, FORWARD);
}