/* Robot Compass

 The robot has an on-board compass module, with
 which it can tell the direction the robot is 
 facing. This sketch will make sure the robot 
 goes towards a certain direction. 
 
 Beware, magnets will interfere with the compass
 readings.

 Circuit:
 * Arduino Robot
 
 created 1 May 2013
 by X. Yang
 modified 12 May 2013
 by D. Cuartielles
 
 This example is in the public domain
 */

// include the robot library
#include <ArduinoRobot.h>
#include <Wire.h>
#include <SPI.h>

int speedLeft;
int speedRight;
int compassValue;
int direc = 180;  //Direction the robot is heading

void setup() {
  // initialize the modules
  Robot.begin();
  Robot.beginTFT();
  Robot.beginSD();
  Robot.displayLogos();
}

void loop() { 
  // read the compass orientation
  compassValue = Robot.compassRead();
  
  // how many degrees are we off
  int diff = compassValue-direc;
  
  // modify degress 
  if(diff > 180)
    diff = -360+diff;
  else if(diff < -180)
    diff = 360+diff;
    
  // Make the robot turn to its proper orientation
  diff = map(diff, -180, 180, -255, 255);
  
  if(diff > 0) {
    // keep the right wheel spinning, 
    // change the speed of the left wheel 
    speedLeft = 255-diff;
    speedRight = 255;
  } else {
    // keep the right left spinning,
    // change the speed of the left wheel   
    speedLeft = 255;
    speedRight = 255+diff;
  }
  // write out to the motors
  Robot.motorsWrite(speedLeft, speedRight);

  // draw the orientation on the screen
  Robot.drawCompass(compassValue);
}
