使いやすいように。

Dependencies:   ArduinoSerial I2Cdev

Fork of MPU6050 by Shundo Kishi

Committer:
tsumagari
Date:
Fri Feb 17 07:37:19 2017 +0000
Revision:
9:4221c5b3f49b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tsumagari 9:4221c5b3f49b 1 //#include "MPU6050_DMP6.h"
tsumagari 9:4221c5b3f49b 2
tsumagari 9:4221c5b3f49b 3 // I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
tsumagari 9:4221c5b3f49b 4 // for both classes must be in the include path of your project
tsumagari 9:4221c5b3f49b 5 #include "I2Cdev.h"
tsumagari 9:4221c5b3f49b 6
tsumagari 9:4221c5b3f49b 7 #include "MPU6050_6Axis_MotionApps20.h"
tsumagari 9:4221c5b3f49b 8 //#include "MPU6050.h" // not necessary if using MotionApps include file
tsumagari 9:4221c5b3f49b 9
tsumagari 9:4221c5b3f49b 10 //#include "ArduinoSerial.h"
tsumagari 9:4221c5b3f49b 11
tsumagari 9:4221c5b3f49b 12 /* =========================================================================
tsumagari 9:4221c5b3f49b 13 NOTE: In addition to connection 3.3v, GND, SDA, and SCL, this sketch
tsumagari 9:4221c5b3f49b 14 depends on the MPU-6050's INT pin being connected to the Arduino's
tsumagari 9:4221c5b3f49b 15 external interrupt #0 pin. On the Arduino Uno and Mega 2560, this is
tsumagari 9:4221c5b3f49b 16 digital I/O pin 2.
tsumagari 9:4221c5b3f49b 17 * ========================================================================= */
tsumagari 9:4221c5b3f49b 18
tsumagari 9:4221c5b3f49b 19 // uncomment "OUTPUT_READABLE_QUATERNION" if you want to see the actual
tsumagari 9:4221c5b3f49b 20 // quaternion components in a [w, x, y, z] format (not best for parsing
tsumagari 9:4221c5b3f49b 21 // on a remote host such as Processing or something though)
tsumagari 9:4221c5b3f49b 22 //#define OUTPUT_READABLE_QUATERNION
tsumagari 9:4221c5b3f49b 23
tsumagari 9:4221c5b3f49b 24 // uncomment "OUTPUT_READABLE_EULER" if you want to see Euler angles
tsumagari 9:4221c5b3f49b 25 // (in degrees) calculated from the quaternions coming from the FIFO.
tsumagari 9:4221c5b3f49b 26 // Note that Euler angles suffer from gimbal lock (for more info, see
tsumagari 9:4221c5b3f49b 27 // http://en.wikipedia.org/wiki/Gimbal_lock)
tsumagari 9:4221c5b3f49b 28 //#define OUTPUT_READABLE_EULER
tsumagari 9:4221c5b3f49b 29
tsumagari 9:4221c5b3f49b 30 // uncomment "OUTPUT_READABLE_YAWPITCHROLL" if you want to see the yaw/
tsumagari 9:4221c5b3f49b 31 // pitch/roll angles (in degrees) calculated from the quaternions coming
tsumagari 9:4221c5b3f49b 32 // from the FIFO. Note this also requires gravity vector calculations.
tsumagari 9:4221c5b3f49b 33 // Also note that yaw/pitch/roll angles suffer from gimbal lock (for
tsumagari 9:4221c5b3f49b 34 // more info, see: http://en.wikipedia.org/wiki/Gimbal_lock)
tsumagari 9:4221c5b3f49b 35 #define OUTPUT_READABLE_YAWPITCHROLL
tsumagari 9:4221c5b3f49b 36
tsumagari 9:4221c5b3f49b 37 // uncomment "OUTPUT_READABLE_REALACCEL" if you want to see acceleration
tsumagari 9:4221c5b3f49b 38 // components with gravity removed. This acceleration reference frame is
tsumagari 9:4221c5b3f49b 39 // not compensated for orientation, so +X is always +X according to the
tsumagari 9:4221c5b3f49b 40 // sensor, just without the effects of gravity. If you want acceleration
tsumagari 9:4221c5b3f49b 41 // compensated for orientation, us OUTPUT_READABLE_WORLDACCEL instead.
tsumagari 9:4221c5b3f49b 42 //#define OUTPUT_READABLE_REALACCEL
tsumagari 9:4221c5b3f49b 43
tsumagari 9:4221c5b3f49b 44 // uncomment "OUTPUT_READABLE_WORLDACCEL" if you want to see acceleration
tsumagari 9:4221c5b3f49b 45 // components with gravity removed and adjusted for the world frame of
tsumagari 9:4221c5b3f49b 46 // reference (yaw is relative to initial orientation, since no magnetometer
tsumagari 9:4221c5b3f49b 47 // is present in this case). Could be quite handy in some cases.
tsumagari 9:4221c5b3f49b 48 //#define OUTPUT_READABLE_WORLDACCEL
tsumagari 9:4221c5b3f49b 49
tsumagari 9:4221c5b3f49b 50 // uncomment "OUTPUT_TEAPOT" if you want output that matches the
tsumagari 9:4221c5b3f49b 51 // format used for the InvenSense teapot demo
tsumagari 9:4221c5b3f49b 52 //#define OUTPUT_TEAPOT
tsumagari 9:4221c5b3f49b 53
tsumagari 9:4221c5b3f49b 54 #ifndef M_PI
tsumagari 9:4221c5b3f49b 55 #define M_PI 3.14159265358979
tsumagari 9:4221c5b3f49b 56 #endif
tsumagari 9:4221c5b3f49b 57
tsumagari 9:4221c5b3f49b 58 namespace MPU6050DMP6 {
tsumagari 9:4221c5b3f49b 59
tsumagari 9:4221c5b3f49b 60 // class default I2C address is 0x68
tsumagari 9:4221c5b3f49b 61 // specific I2C addresses may be passed as a parameter here
tsumagari 9:4221c5b3f49b 62 // AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board)
tsumagari 9:4221c5b3f49b 63 // AD0 high = 0x69
tsumagari 9:4221c5b3f49b 64 MPU6050 mpu;
tsumagari 9:4221c5b3f49b 65 //MPU6050 mpu(0x69); // <-- use for AD0 high
tsumagari 9:4221c5b3f49b 66
tsumagari 9:4221c5b3f49b 67
tsumagari 9:4221c5b3f49b 68 // MPU control/status vars
tsumagari 9:4221c5b3f49b 69 bool dmpReady = false; // set true if DMP init was successful
tsumagari 9:4221c5b3f49b 70 uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
tsumagari 9:4221c5b3f49b 71 uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
tsumagari 9:4221c5b3f49b 72 uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
tsumagari 9:4221c5b3f49b 73 uint16_t fifoCount; // count of all bytes currently in FIFO
tsumagari 9:4221c5b3f49b 74 uint8_t fifoBuffer[64]; // FIFO storage buffer
tsumagari 9:4221c5b3f49b 75
tsumagari 9:4221c5b3f49b 76 // orientation/motion vars
tsumagari 9:4221c5b3f49b 77 Quaternion q; // [w, x, y, z] quaternion container
tsumagari 9:4221c5b3f49b 78 VectorInt16 aa; // [x, y, z] accel sensor measurements
tsumagari 9:4221c5b3f49b 79 VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements
tsumagari 9:4221c5b3f49b 80 VectorInt16 aaWorld; // [x, y, z] world-frame accel sensor measurements
tsumagari 9:4221c5b3f49b 81 VectorFloat gravity; // [x, y, z] gravity vector
tsumagari 9:4221c5b3f49b 82 //float euler[3]; // [psi, theta, phi] Euler angle container
tsumagari 9:4221c5b3f49b 83 float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
tsumagari 9:4221c5b3f49b 84
tsumagari 9:4221c5b3f49b 85 // packet structure for InvenSense teapot demo
tsumagari 9:4221c5b3f49b 86 uint8_t teapotPacket[14] = { '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' };
tsumagari 9:4221c5b3f49b 87
tsumagari 9:4221c5b3f49b 88 DigitalOut led1(LED1);
tsumagari 9:4221c5b3f49b 89 InterruptIn checkpin(p29);
tsumagari 9:4221c5b3f49b 90 //ArduinoSerial arduinoSerial;
tsumagari 9:4221c5b3f49b 91
tsumagari 9:4221c5b3f49b 92
tsumagari 9:4221c5b3f49b 93 // ================================================================
tsumagari 9:4221c5b3f49b 94 // === INTERRUPT DETECTION ROUTINE ===
tsumagari 9:4221c5b3f49b 95 // ================================================================
tsumagari 9:4221c5b3f49b 96
tsumagari 9:4221c5b3f49b 97 volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
tsumagari 9:4221c5b3f49b 98 void dmpDataReady()
tsumagari 9:4221c5b3f49b 99 {
tsumagari 9:4221c5b3f49b 100 mpuInterrupt = true;
tsumagari 9:4221c5b3f49b 101 }
tsumagari 9:4221c5b3f49b 102
tsumagari 9:4221c5b3f49b 103
tsumagari 9:4221c5b3f49b 104
tsumagari 9:4221c5b3f49b 105 // ================================================================
tsumagari 9:4221c5b3f49b 106 // === INITIAL SETUP ===
tsumagari 9:4221c5b3f49b 107 // ================================================================
tsumagari 9:4221c5b3f49b 108
tsumagari 9:4221c5b3f49b 109 void setup()
tsumagari 9:4221c5b3f49b 110 {
tsumagari 9:4221c5b3f49b 111 // initialize arduinoSerial communication
tsumagari 9:4221c5b3f49b 112 // (115200 chosen because it is required for Teapot Demo output, but it's
tsumagari 9:4221c5b3f49b 113 // really up to you depending on your project)
tsumagari 9:4221c5b3f49b 114 // arduinoSerial.begin(115200);
tsumagari 9:4221c5b3f49b 115
tsumagari 9:4221c5b3f49b 116 // initialize device
tsumagari 9:4221c5b3f49b 117 // arduinoSerial.println(F("Initializing I2C devices..."));
tsumagari 9:4221c5b3f49b 118 mpu.initialize();
tsumagari 9:4221c5b3f49b 119
tsumagari 9:4221c5b3f49b 120 // verify connection
tsumagari 9:4221c5b3f49b 121 // arduinoSerial.println(F("Testing device connections..."));
tsumagari 9:4221c5b3f49b 122 // arduinoSerial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
tsumagari 9:4221c5b3f49b 123
tsumagari 9:4221c5b3f49b 124 // wait for ready
tsumagari 9:4221c5b3f49b 125 // arduinoSerial.println(F("\nSend any character to begin DMP programming and demo: "));
tsumagari 9:4221c5b3f49b 126 // while (arduinoSerial.available() && arduinoSerial.read()); // empty buffer
tsumagari 9:4221c5b3f49b 127 // while (!arduinoSerial.available()); // wait for data
tsumagari 9:4221c5b3f49b 128 // while (arduinoSerial.available() && arduinoSerial.read()); // empty buffer again
tsumagari 9:4221c5b3f49b 129
tsumagari 9:4221c5b3f49b 130 // load and configure the DMP
tsumagari 9:4221c5b3f49b 131 // arduinoSerial.println(F("Initializing DMP..."));
tsumagari 9:4221c5b3f49b 132 devStatus = mpu.dmpInitialize();
tsumagari 9:4221c5b3f49b 133
tsumagari 9:4221c5b3f49b 134 // supply your own gyro offsets here, scaled for min sensitivity
tsumagari 9:4221c5b3f49b 135 mpu.setXGyroOffset(220);
tsumagari 9:4221c5b3f49b 136 mpu.setYGyroOffset(76);
tsumagari 9:4221c5b3f49b 137 mpu.setZGyroOffset(-85);
tsumagari 9:4221c5b3f49b 138 mpu.setZAccelOffset(1788); // 1688 factory default for my test chip
tsumagari 9:4221c5b3f49b 139
tsumagari 9:4221c5b3f49b 140 // make sure it worked (returns 0 if so)
tsumagari 9:4221c5b3f49b 141 if (devStatus == 0) {
tsumagari 9:4221c5b3f49b 142 // turn on the DMP, now that it's ready
tsumagari 9:4221c5b3f49b 143 // arduinoSerial.println(F("Enabling DMP..."));
tsumagari 9:4221c5b3f49b 144 mpu.setDMPEnabled(true);
tsumagari 9:4221c5b3f49b 145
tsumagari 9:4221c5b3f49b 146 // enable Arduino interrupt detection
tsumagari 9:4221c5b3f49b 147 // arduinoSerial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
tsumagari 9:4221c5b3f49b 148 checkpin.rise(&dmpDataReady);
tsumagari 9:4221c5b3f49b 149 mpuIntStatus = mpu.getIntStatus();
tsumagari 9:4221c5b3f49b 150
tsumagari 9:4221c5b3f49b 151 // set our DMP Ready flag so the main loop() function knows it's okay to use it
tsumagari 9:4221c5b3f49b 152 // arduinoSerial.println(F("DMP ready! Waiting for first interrupt..."));
tsumagari 9:4221c5b3f49b 153 dmpReady = true;
tsumagari 9:4221c5b3f49b 154
tsumagari 9:4221c5b3f49b 155 // get expected DMP packet size for later comparison
tsumagari 9:4221c5b3f49b 156 packetSize = mpu.dmpGetFIFOPacketSize();
tsumagari 9:4221c5b3f49b 157 } else {
tsumagari 9:4221c5b3f49b 158 // ERROR!
tsumagari 9:4221c5b3f49b 159 // 1 = initial memory load failed
tsumagari 9:4221c5b3f49b 160 // 2 = DMP configuration updates failed
tsumagari 9:4221c5b3f49b 161 // (if it's going to break, usually the code will be 1)
tsumagari 9:4221c5b3f49b 162 // arduinoSerial.print(F("DMP Initialization failed (code "));
tsumagari 9:4221c5b3f49b 163 // arduinoSerial.print(devStatus);
tsumagari 9:4221c5b3f49b 164 // arduinoSerial.println(F(")"));
tsumagari 9:4221c5b3f49b 165 }
tsumagari 9:4221c5b3f49b 166
tsumagari 9:4221c5b3f49b 167 }
tsumagari 9:4221c5b3f49b 168
tsumagari 9:4221c5b3f49b 169
tsumagari 9:4221c5b3f49b 170
tsumagari 9:4221c5b3f49b 171 // ================================================================
tsumagari 9:4221c5b3f49b 172 // === MAIN PROGRAM LOOP ===
tsumagari 9:4221c5b3f49b 173 // ================================================================
tsumagari 9:4221c5b3f49b 174
tsumagari 9:4221c5b3f49b 175 void getYPR()
tsumagari 9:4221c5b3f49b 176 {
tsumagari 9:4221c5b3f49b 177 // if programming failed, don't try to do anything
tsumagari 9:4221c5b3f49b 178 if (!dmpReady) return;
tsumagari 9:4221c5b3f49b 179
tsumagari 9:4221c5b3f49b 180 // wait for MPU interrupt or extra packet(s) available
tsumagari 9:4221c5b3f49b 181 while (!mpuInterrupt && fifoCount < packetSize) {
tsumagari 9:4221c5b3f49b 182 // other program behavior stuff here
tsumagari 9:4221c5b3f49b 183 // .
tsumagari 9:4221c5b3f49b 184 // .
tsumagari 9:4221c5b3f49b 185 // .
tsumagari 9:4221c5b3f49b 186 // if you are really paranoid you can frequently test in between other
tsumagari 9:4221c5b3f49b 187 // stuff to see if mpuInterrupt is true, and if so, "break;" from the
tsumagari 9:4221c5b3f49b 188 // while() loop to immediately process the MPU data
tsumagari 9:4221c5b3f49b 189 // .
tsumagari 9:4221c5b3f49b 190 // .
tsumagari 9:4221c5b3f49b 191 // .
tsumagari 9:4221c5b3f49b 192 }
tsumagari 9:4221c5b3f49b 193
tsumagari 9:4221c5b3f49b 194 // reset interrupt flag and get INT_STATUS byte
tsumagari 9:4221c5b3f49b 195 mpuInterrupt = false;
tsumagari 9:4221c5b3f49b 196 mpuIntStatus = mpu.getIntStatus();
tsumagari 9:4221c5b3f49b 197
tsumagari 9:4221c5b3f49b 198 // get current FIFO count
tsumagari 9:4221c5b3f49b 199 fifoCount = mpu.getFIFOCount();
tsumagari 9:4221c5b3f49b 200
tsumagari 9:4221c5b3f49b 201 // check for overflow (this should never happen unless our code is too inefficient)
tsumagari 9:4221c5b3f49b 202 if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
tsumagari 9:4221c5b3f49b 203 // reset so we can continue cleanly
tsumagari 9:4221c5b3f49b 204 mpu.resetFIFO();
tsumagari 9:4221c5b3f49b 205 // arduinoSerial.println(F("FIFO overflow!"));
tsumagari 9:4221c5b3f49b 206
tsumagari 9:4221c5b3f49b 207 // otherwise, check for DMP data ready interrupt (this should happen frequently)
tsumagari 9:4221c5b3f49b 208 } else if (mpuIntStatus & 0x02) {
tsumagari 9:4221c5b3f49b 209 // wait for correct available data length, should be a VERY short wait
tsumagari 9:4221c5b3f49b 210 while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
tsumagari 9:4221c5b3f49b 211
tsumagari 9:4221c5b3f49b 212 // read a packet from FIFO
tsumagari 9:4221c5b3f49b 213 mpu.getFIFOBytes(fifoBuffer, packetSize);
tsumagari 9:4221c5b3f49b 214
tsumagari 9:4221c5b3f49b 215 // track FIFO count here in case there is > 1 packet available
tsumagari 9:4221c5b3f49b 216 // (this lets us immediately read more without waiting for an interrupt)
tsumagari 9:4221c5b3f49b 217 fifoCount -= packetSize;
tsumagari 9:4221c5b3f49b 218
tsumagari 9:4221c5b3f49b 219 #ifdef OUTPUT_READABLE_QUATERNION
tsumagari 9:4221c5b3f49b 220 // display quaternion values in easy matrix form: w x y z
tsumagari 9:4221c5b3f49b 221 mpu.dmpGetQuaternion(&q, fifoBuffer);
tsumagari 9:4221c5b3f49b 222 // arduinoSerial.print("quat\t");
tsumagari 9:4221c5b3f49b 223 // arduinoSerial.print(q.w);
tsumagari 9:4221c5b3f49b 224 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 225 // arduinoSerial.print(q.x);
tsumagari 9:4221c5b3f49b 226 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 227 // arduinoSerial.print(q.y);
tsumagari 9:4221c5b3f49b 228 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 229 // arduinoSerial.println(q.z);
tsumagari 9:4221c5b3f49b 230 #endif
tsumagari 9:4221c5b3f49b 231
tsumagari 9:4221c5b3f49b 232 #ifdef OUTPUT_READABLE_EULER
tsumagari 9:4221c5b3f49b 233 // display Euler angles in degrees
tsumagari 9:4221c5b3f49b 234 mpu.dmpGetQuaternion(&q, fifoBuffer);
tsumagari 9:4221c5b3f49b 235 mpu.dmpGetEuler(euler, &q);
tsumagari 9:4221c5b3f49b 236 // arduinoSerial.print("euler\t");
tsumagari 9:4221c5b3f49b 237 // arduinoSerial.print(euler[0] * 180/M_PI);
tsumagari 9:4221c5b3f49b 238 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 239 // arduinoSerial.print(euler[1] * 180/M_PI);
tsumagari 9:4221c5b3f49b 240 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 241 // arduinoSerial.println(euler[2] * 180/M_PI);
tsumagari 9:4221c5b3f49b 242 #endif
tsumagari 9:4221c5b3f49b 243
tsumagari 9:4221c5b3f49b 244 #ifdef OUTPUT_READABLE_YAWPITCHROLL
tsumagari 9:4221c5b3f49b 245 // display Euler angles in degrees
tsumagari 9:4221c5b3f49b 246 mpu.dmpGetQuaternion(&q, fifoBuffer);
tsumagari 9:4221c5b3f49b 247 mpu.dmpGetGravity(&gravity, &q);
tsumagari 9:4221c5b3f49b 248 mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
tsumagari 9:4221c5b3f49b 249 // arduinoSerial.print("ypr\t");
tsumagari 9:4221c5b3f49b 250 // arduinoSerial.print(ypr[0] * 180/M_PI);
tsumagari 9:4221c5b3f49b 251 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 252 // arduinoSerial.print(ypr[1] * 180/M_PI);
tsumagari 9:4221c5b3f49b 253 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 254 // arduinoSerial.println(ypr[2] * 180/M_PI);
tsumagari 9:4221c5b3f49b 255 #endif
tsumagari 9:4221c5b3f49b 256
tsumagari 9:4221c5b3f49b 257 #ifdef OUTPUT_READABLE_REALACCEL
tsumagari 9:4221c5b3f49b 258 // display real acceleration, adjusted to remove gravity
tsumagari 9:4221c5b3f49b 259 mpu.dmpGetQuaternion(&q, fifoBuffer);
tsumagari 9:4221c5b3f49b 260 mpu.dmpGetAccel(&aa, fifoBuffer);
tsumagari 9:4221c5b3f49b 261 mpu.dmpGetGravity(&gravity, &q);
tsumagari 9:4221c5b3f49b 262 mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
tsumagari 9:4221c5b3f49b 263 // arduinoSerial.print("areal\t");
tsumagari 9:4221c5b3f49b 264 // arduinoSerial.print(aaReal.x);
tsumagari 9:4221c5b3f49b 265 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 266 // arduinoSerial.print(aaReal.y);
tsumagari 9:4221c5b3f49b 267 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 268 // arduinoSerial.println(aaReal.z);
tsumagari 9:4221c5b3f49b 269 #endif
tsumagari 9:4221c5b3f49b 270
tsumagari 9:4221c5b3f49b 271 #ifdef OUTPUT_READABLE_WORLDACCEL
tsumagari 9:4221c5b3f49b 272 // display initial world-frame acceleration, adjusted to remove gravity
tsumagari 9:4221c5b3f49b 273 // and rotated based on known orientation from quaternion
tsumagari 9:4221c5b3f49b 274 mpu.dmpGetQuaternion(&q, fifoBuffer);
tsumagari 9:4221c5b3f49b 275 mpu.dmpGetAccel(&aa, fifoBuffer);
tsumagari 9:4221c5b3f49b 276 mpu.dmpGetGravity(&gravity, &q);
tsumagari 9:4221c5b3f49b 277 mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
tsumagari 9:4221c5b3f49b 278 mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);
tsumagari 9:4221c5b3f49b 279 // arduinoSerial.print("aworld\t");
tsumagari 9:4221c5b3f49b 280 // arduinoSerial.print(aaWorld.x);
tsumagari 9:4221c5b3f49b 281 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 282 // arduinoSerial.print(aaWorld.y);
tsumagari 9:4221c5b3f49b 283 // arduinoSerial.print("\t");
tsumagari 9:4221c5b3f49b 284 // arduinoSerial.println(aaWorld.z);
tsumagari 9:4221c5b3f49b 285 #endif
tsumagari 9:4221c5b3f49b 286
tsumagari 9:4221c5b3f49b 287 #ifdef OUTPUT_TEAPOT
tsumagari 9:4221c5b3f49b 288 // display quaternion values in InvenSense Teapot demo format:
tsumagari 9:4221c5b3f49b 289 teapotPacket[2] = fifoBuffer[0];
tsumagari 9:4221c5b3f49b 290 teapotPacket[3] = fifoBuffer[1];
tsumagari 9:4221c5b3f49b 291 teapotPacket[4] = fifoBuffer[4];
tsumagari 9:4221c5b3f49b 292 teapotPacket[5] = fifoBuffer[5];
tsumagari 9:4221c5b3f49b 293 teapotPacket[6] = fifoBuffer[8];
tsumagari 9:4221c5b3f49b 294 teapotPacket[7] = fifoBuffer[9];
tsumagari 9:4221c5b3f49b 295 teapotPacket[8] = fifoBuffer[12];
tsumagari 9:4221c5b3f49b 296 teapotPacket[9] = fifoBuffer[13];
tsumagari 9:4221c5b3f49b 297 // arduinoSerial.write(teapotPacket, 14);
tsumagari 9:4221c5b3f49b 298 teapotPacket[11]++; // packetCount, loops at 0xFF on purpose
tsumagari 9:4221c5b3f49b 299 #endif
tsumagari 9:4221c5b3f49b 300
tsumagari 9:4221c5b3f49b 301 // blink LED to indicate activity
tsumagari 9:4221c5b3f49b 302 if( led1 == 0 ) led1 = 0;
tsumagari 9:4221c5b3f49b 303 else led1 = 1;
tsumagari 9:4221c5b3f49b 304 }
tsumagari 9:4221c5b3f49b 305 }
tsumagari 9:4221c5b3f49b 306
tsumagari 9:4221c5b3f49b 307 };