    HardwareBegin();        //initialize Ringo's brain to work with his circuitry
    SwitchButtonToPixels(); //set shared line to control NeoPixel lights
    PlayStartChirp();       //Play startup chirp and blink eyes
-   SwitchMotorsToSerial(); //Call before using Serial.print functions as motors & serial share a line
    RestartTimer();
+   delay(1000);
+   NavigationBegin();
 
    GetInitialLightValue();
 
-  Serial.println("Setup Done");
+   printString("Setup Done");
 } //setup
 
 void loop()
 { 
-   delay(LIGHT_SENSE_DELAY);
-
-   //PlayLeftTune();
-   //PlayRightTune();
-
-   LightsOn();
+   LoopCounter++;
+  // delay(LIGHT_SENSE_DELAY);
+
+   LightsOnLoop();
 
    digitalWrite(Source_Select, HIGH); //This selects the top light sensors
-   GetLightSensors();
-
-   printValue("Light Sensor = ", LightSensorValue);
+   GetRearLightSensors();
+
+   printValue("Rear Light Sensor = ", LightSensorValue);
 
    HeadLightsOn(LightSensorValue);
+   FollowLight();
    
-   Serial.println("Loop Done");
+   printString("Loop Done");
 } // loop

   InitialAverageLight = InitialAverageLight / 4;
   TooDarkValue = InitialAverageLight * .20;
   printValue("Base Light Level = ", InitialAverageLight);
   printValue("too Dark Light Level = ", TooDarkValue);
} // GetInitialLightValue

void LightsOn()
{
  for (int pixel = 0 ; pixel < NUM_PIXELS; ++pixel) {
      if((AreHeadLightsOn && ((pixel == EYE_LEFT) || (pixel == EYE_RIGHT))))

int TooDarkValue = 0; 
int AreHeadLightsOn = FALSE; 

int LoopCounter = 0;   // used in log printing

void GetRearLightSensors()
{
   LightSensorValue = analogRead(LightSense_Rear); // read Rear light sensor
} // GetRearLightSensors

void GetInitialLightValue() 
{
   printString("Getting Light Average");
   digitalWrite(Source_Select, HIGH); //This selects the top light sensors
   for (int i = 0 ; i < NUM_LIGHT_READINGS; ++i) {
      InitialAverageLight += analogRead(LightSense_Rear);
