 * - https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
 * - http://www.geekmomprojects.com/mpu-6050-redux-dmp-data-fusion-vs-complementary-filter/
 * - http://42bots.com/tutorials/arduino-uno-and-the-invensense-mpu-6050-6dof-imu/
-* Some useful information about Aprilia RSV/SL 1000 bikes work: (See: http://www.aprilia-v60.com/index.php?topic=262315)
+* - Yaw Pitch Roll explained: http://www.geekmomprojects.com/wii-nunchuck-controlled-servo-motors/
+* - Calibration sketch: http://www.i2cdevlib.com/forums/topic/96-arduino-sketch-to-automatically-calculate-mpu6050-offsets/
+* - Kalman filter example: http://www.instructables.com/id/Gyro-Camera-for-Motorcycle/?ALLSTEPS
+* - Better Kalman example: https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter/tree/master/IMU6DOF/MPU6050
+* About optimization:
+* - https://learn.adafruit.com/memories-of-an-arduino/optimizing-sram
+* Some useful information about Aprilia RSV/SL 1000 bikes sensors: (See: http://www.aprilia-v60.com/index.php?topic=262315)
 * - Speed sensor: purple/green wire=Vcc ~ 9V ? / grey/white: signal ~6.5V, falling to 0V
 * - Engine pulses/revolution: 3 if read from the dashboard wire
 * - Engine pulses/revolution: 6 if crank shaft sensor is used
 * - Wheel pulses/revolution: 5
 */
 
-#include <SPI.h>
 #include <SD.h>
-//#include <WSWire.h>
+//#include <WSWire.h> // TODO: Test this lib instead of Wire
 #include <Wire.h>
-#include <PinChangeInt.h>
+#include <PinChangeInt.h> // "Pin change" interrupt support
 
 #include "I2Cdev.h"
 #include "MPU6050_6Axis_MotionApps20.h"
+
+#define VERBOSE 1
+
+#define I2C_ADDRESS_MASTER 0x10 // Current master I2C address
+#define I2C_ADDRESS_ME 0x11 // Current device I2C address
 
 #define OUTPUT_READABLE_YAWPITCHROLL
 

* - WSWireLib: https://github.com/steamfire/WSWireLib
* - http://stackoverflow.com/questions/21073085/how-to-send-4-pot-values-via-i2c-from-arduino-to-arduino-how-to-differentiate-t
* - http://www.gammon.com.au/i2c
* About SD Cards:
* - https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial/format
* About MPU6050:

  pinMode(10, OUTPUT);

  if (!SD.begin(chipSelect)) {
    serial_println("SD initialization failed! ");
    return;
  }

  File settings_file = SD.open(settings_file_name);
  if (settings_file) {
    char* index_ch = readline(settings_file);
    file_index = atoi(index_ch);
    file_index++;
    settings_file.close();
  }
  SD.remove(const_cast<char*>(settings_file_name));
  settings_file = SD.open(settings_file_name, FILE_WRITE);
  if (settings_file) {
    settings_file.println(file_index);
    settings_file.close();
