Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1993 | - | 1 | // ITG-3200_output |
2 | // Copyright 2010-2011 Filipe Vieira & various contributors. |
||
3 | // http://code.google.com/p/itg-3200driver |
||
4 | // Simple example of library usage with almost every gyro and lib features being used. |
||
5 | |||
6 | #include <Wire.h> |
||
7 | #include <ITG3200.h> |
||
8 | |||
9 | ITG3200 gyro = ITG3200(); |
||
10 | float xyz[3], temperature; |
||
11 | |||
12 | void setup(void) { |
||
13 | Serial.begin(9600); |
||
14 | Wire.begin(); // if experiencing gyro problems/crashes while reading XYZ values |
||
15 | // please read class constructor comments for further info. |
||
16 | delay(1000); |
||
17 | gyro.reset(); |
||
18 | // Use ITG3200_ADDR_AD0_HIGH or ITG3200_ADDR_AD0_LOW as the ITG3200 address |
||
19 | // depending on how AD0 is connected on your breakout board, check its schematics for details |
||
20 | gyro.init(ITG3200_ADDR_AD0_HIGH); |
||
21 | |||
22 | Serial.print("zeroCalibrating..."); |
||
23 | gyro.zeroCalibrate(2500,2); |
||
24 | Serial.println("done."); |
||
25 | |||
26 | showall(); |
||
27 | |||
28 | Serial.println("Registers dump"); |
||
29 | Serial.println("=========================================================="); |
||
30 | dumpRegisters(); |
||
31 | Serial.println("=========================================================="); |
||
32 | |||
33 | delay(5000); |
||
34 | } |
||
35 | |||
36 | void loop(void) { |
||
37 | while (gyro.isRawDataReady()) { |
||
38 | gyro.readGyro(xyz); |
||
39 | Serial.print("X:"); |
||
40 | Serial.print(xyz[0]); |
||
41 | Serial.print(" Y:"); |
||
42 | Serial.print(xyz[1]); |
||
43 | Serial.print(" Z:"); |
||
44 | Serial.println(xyz[2]); |
||
45 | } |
||
46 | } |
||
47 | |||
48 | void showall(void) { |
||
49 | Serial.println("Current ITG3200 settings"); |
||
50 | Serial.println("=========================================================="); |
||
51 | Serial.print("device address = 0x"); |
||
52 | Serial.println(gyro.getDevAddr(), HEX); |
||
53 | |||
54 | Serial.print("Sample rate divider (Hz) = "); |
||
55 | if (gyro.getFilterBW() == BW256_SR8) |
||
56 | Serial.println(8000 / (gyro.getSampleRateDiv()+1), DEC); |
||
57 | else |
||
58 | Serial.println(1000 / (gyro.getSampleRateDiv()+1), DEC); |
||
59 | |||
60 | Serial.print("full scale range = "); |
||
61 | if (gyro.getFSRange() == RANGE2000) |
||
62 | Serial.println("+-2000 deg/sec"); |
||
63 | else |
||
64 | Serial.println("reserved"); |
||
65 | |||
66 | Serial.print("low pass filter BW = "); |
||
67 | switch (gyro.getFilterBW()) { |
||
68 | case BW256_SR8: |
||
69 | Serial.println("256Hz LowPassFilter BW/ 8Khz Sample Rate"); |
||
70 | break; |
||
71 | case BW188_SR1: |
||
72 | Serial.println("188Hz LowPassFilter BW/ 1Khz Sample Rate"); |
||
73 | break; |
||
74 | case BW098_SR1: |
||
75 | Serial.println("98Hz LowPassFilter BW/ 1Khz Sample Rate"); |
||
76 | break; |
||
77 | case BW042_SR1: |
||
78 | Serial.println("42Hz LowPassFilter BW/ 1Khz Sample Rate"); |
||
79 | break; |
||
80 | case BW020_SR1: |
||
81 | Serial.println("20Hz LowPassFilter BW/ 1Khz Sample Rate"); |
||
82 | break; |
||
83 | case BW010_SR1: |
||
84 | Serial.println("10Hz LowPassFilter BW/ 1Khz Sample Rate"); |
||
85 | break; |
||
86 | case BW005_SR1: |
||
87 | Serial.println("5Hz LowPassFilter BW/ 1Khz Sample Rate"); |
||
88 | break; |
||
89 | } |
||
90 | |||
91 | Serial.print("Logic level for INT output pin = "); |
||
92 | if (gyro.isINTActiveOnLow()) |
||
93 | Serial.println("Active on Low"); |
||
94 | else |
||
95 | Serial.println("Active on High"); |
||
96 | |||
97 | Serial.print("INT drive type = "); |
||
98 | if (gyro.isINTOpenDrain()) |
||
99 | Serial.println("Open Drain"); |
||
100 | else |
||
101 | Serial.println("Push-Pull"); |
||
102 | |||
103 | Serial.print("INT latch mode = "); |
||
104 | if (gyro.isLatchUntilCleared()) |
||
105 | Serial.println("Latch until interrupt is cleared"); |
||
106 | else |
||
107 | Serial.println("50us pulse"); |
||
108 | |||
109 | Serial.print("INT latch clear mode = "); |
||
110 | if (gyro.isAnyRegClrMode()) |
||
111 | Serial.println("Any register read"); |
||
112 | else |
||
113 | Serial.println("Status register read only"); |
||
114 | |||
115 | Serial.print("ITGReady trigger status = "); |
||
116 | if (gyro.isITGReadyOn()) |
||
117 | Serial.println("High/Set"); |
||
118 | else |
||
119 | Serial.println("Low/Clear"); |
||
120 | |||
121 | Serial.print("RawDataReady trigger status = "); |
||
122 | if (gyro.isRawDataReady()) |
||
123 | Serial.println("High/Set"); |
||
124 | else |
||
125 | Serial.println("Low/Clear"); |
||
126 | |||
127 | Serial.print("Temperature (Celsius) = "); |
||
128 | gyro.readTemp(&temperature); |
||
129 | Serial.println(temperature); |
||
130 | |||
131 | Serial.print("Power mode = "); |
||
132 | gyro.setPowerMode(NORMAL); |
||
133 | if (gyro.isLowPower() == STANDBY) |
||
134 | Serial.println("Low power (sleep)"); |
||
135 | else |
||
136 | Serial.println("Normal"); |
||
137 | |||
138 | Serial.print("Xgyro status = "); |
||
139 | if (gyro.isXgyroStandby() == NORMAL ) |
||
140 | Serial.println("Normal"); |
||
141 | else |
||
142 | Serial.println("StandBy"); |
||
143 | |||
144 | Serial.print("Ygyro status = "); |
||
145 | if (gyro.isYgyroStandby() == NORMAL ) |
||
146 | Serial.println("Normal"); |
||
147 | else |
||
148 | Serial.println("StandBy"); |
||
149 | |||
150 | Serial.print("Zgyro status = "); |
||
151 | if (gyro.isZgyroStandby() == NORMAL ) |
||
152 | Serial.println("Normal"); |
||
153 | else |
||
154 | Serial.println("StandBy"); |
||
155 | |||
156 | Serial.print("Clock source = "); |
||
157 | switch (gyro.getClockSource()) { |
||
158 | case INTERNALOSC: |
||
159 | Serial.println("Internal oscillator"); |
||
160 | break; |
||
161 | case PLL_XGYRO_REF: |
||
162 | Serial.println("PLL with X Gyro reference"); |
||
163 | break; |
||
164 | case PLL_YGYRO_REF: |
||
165 | Serial.println("PLL with Y Gyro reference"); |
||
166 | break; |
||
167 | case PLL_ZGYRO_REF: |
||
168 | Serial.println("PLL with Z Gyro reference"); |
||
169 | break; |
||
170 | case PLL_EXTERNAL32: |
||
171 | Serial.println("PLL with external 32.768kHz reference"); |
||
172 | break; |
||
173 | case PLL_EXTERNAL19: |
||
174 | Serial.println("PLL with external 19.2MHz reference"); |
||
175 | break; |
||
176 | } |
||
177 | |||
178 | Serial.print("X offset = "); |
||
179 | Serial.println(gyro.offsets[0]); |
||
180 | Serial.print("Y offset = "); |
||
181 | Serial.println(gyro.offsets[1]); |
||
182 | Serial.print("Z offset = "); |
||
183 | Serial.println(gyro.offsets[2]); |
||
184 | } |
||
185 | |||
186 | void dumpRegisters() { |
||
187 | byte ValidRegisterAddr[]={0,21,22,23,26,27,28,29,30,31,32,33,34,57,56,62}; |
||
188 | byte _b, i, totregisters = sizeof(ValidRegisterAddr); |
||
189 | Serial.println("---dump start---"); |
||
190 | Serial.println("Register address|Register data"); |
||
191 | Serial.println("Reg.address(hex,dec) Reg.data(bin,hex,dec)"); |
||
192 | for (i=0;i<totregisters;i++){ |
||
193 | Serial.print("0x"); |
||
194 | Serial.print(ValidRegisterAddr[i], HEX); |
||
195 | Serial.print(","); |
||
196 | Serial.print(ValidRegisterAddr[i], DEC); |
||
197 | Serial.print(","); |
||
198 | gyro.readmem(ValidRegisterAddr[i], 1, &_b); |
||
199 | Serial.print("b"); |
||
200 | print_bits(_b); |
||
201 | Serial.print(",0x"); |
||
202 | Serial.print(_b,HEX); |
||
203 | Serial.print(","); |
||
204 | Serial.println(_b,DEC); |
||
205 | } |
||
206 | Serial.println("---dump end---"); |
||
207 | } |
||
208 | |||
209 | void print_bits(uint8_t val){ |
||
210 | for(int i=7; i>=0; i--) |
||
211 | Serial.print(val >> i & 1, BIN); |
||
212 | } |
||
213 | void print_unit16(uint16_t val){ |
||
214 | for(int i=15; i>=0; i--) |
||
215 | Serial.print(val >> i & 1, BIN); |
||
216 | } |