-
Notifications
You must be signed in to change notification settings - Fork 152
/
Copy pathMPU9250_DMP_Orientation.ino
86 lines (74 loc) · 1.95 KB
/
MPU9250_DMP_Orientation.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/************************************************************
MPU9250_DMP_Orientation
Orientation example for MPU-9250 DMP Arduino Library
Jim Lindblom @ SparkFun Electronics
original creation date: November 23, 2016
https://github.com/sparkfun/SparkFun_MPU9250_DMP_Arduino_Library
Uses the MPU-9250's digital motion processing engine to
determine orientation of the board.
Development environment specifics:
Arduino IDE 1.6.12
SparkFun 9DoF Razor IMU M0
Supported Platforms:
- ATSAMD21 (Arduino Zero, SparkFun SAMD21 Breakouts)
*************************************************************/
#include <SparkFunMPU9250-DMP.h>
#ifdef defined(SAMD)
#define SerialPort SerialUSB
#else
#define SerialPort Serial
#endif
MPU9250_DMP imu;
unsigned long stepCount = 0;
unsigned long stepTime = 0;
unsigned long lastStepCount = 0;
const signed char orientationMatrix[9] = {
1, 0, 0,
0, 1, 0,
0, 0, 1
};
unsigned char lastOrient = 0;
void setup()
{
SerialPort.begin(115200);
// Call imu.begin() to verify communication and initialize
if (imu.begin() != INV_SUCCESS)
{
while (1)
{
SerialPort.println("Unable to communicate with MPU-9250");
SerialPort.println("Check connections, and try again.");
SerialPort.println();
delay(5000);
}
}
imu.dmpBegin(DMP_FEATURE_ANDROID_ORIENT);
imu.dmpSetOrientation(orientationMatrix);
}
void loop()
{
if ( imu.fifoAvailable() )
{
imu.dmpUpdateFifo();
unsigned char orient = imu.dmpGetOrientation();
if (orient != lastOrient)
{
switch (orient)
{
case ORIENT_PORTRAIT:
SerialPort.println("Portrait");
break;
case ORIENT_LANDSCAPE:
SerialPort.println("Landscape");
break;
case ORIENT_REVERSE_PORTRAIT:
SerialPort.println("Portrait (Reverse)");
break;
case ORIENT_REVERSE_LANDSCAPE:
SerialPort.println("Landscape (Reverse)");
break;
}
lastOrient = orient;
}
}
}