Daniel Delsuc
/
RM3100BB_Sample_Code
Sample program for interfacing with PNI's RM3100 Breakout Board
main.cpp@0:6ddf88b49483, 2017-10-26 (annotated)
- Committer:
- ddelsuc
- Date:
- Thu Oct 26 18:40:57 2017 +0000
- Revision:
- 0:6ddf88b49483
Sample program for interfacing with PNI's RM3100 Breakout Board
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ddelsuc | 0:6ddf88b49483 | 1 | /** |
ddelsuc | 0:6ddf88b49483 | 2 | * @file main.cpp |
ddelsuc | 0:6ddf88b49483 | 3 | * |
ddelsuc | 0:6ddf88b49483 | 4 | * @brief Sample code for RM3100. |
ddelsuc | 0:6ddf88b49483 | 5 | * @authors Betty Zhang, Daniel Delsuc |
ddelsuc | 0:6ddf88b49483 | 6 | * @date 03/03/2017 |
ddelsuc | 0:6ddf88b49483 | 7 | * @copyright (C) 2017 PNI Corp |
ddelsuc | 0:6ddf88b49483 | 8 | * |
ddelsuc | 0:6ddf88b49483 | 9 | * @copyright This sample code is provided "as is" without express or implied warranty. |
ddelsuc | 0:6ddf88b49483 | 10 | * |
ddelsuc | 0:6ddf88b49483 | 11 | */ |
ddelsuc | 0:6ddf88b49483 | 12 | |
ddelsuc | 0:6ddf88b49483 | 13 | // Note: This program assumes the RM3100 is connected using the I2C Interface |
ddelsuc | 0:6ddf88b49483 | 14 | |
ddelsuc | 0:6ddf88b49483 | 15 | #include "main.h" |
ddelsuc | 0:6ddf88b49483 | 16 | |
ddelsuc | 0:6ddf88b49483 | 17 | // Check if DRDY was triggered |
ddelsuc | 0:6ddf88b49483 | 18 | bool DataReady() |
ddelsuc | 0:6ddf88b49483 | 19 | { |
ddelsuc | 0:6ddf88b49483 | 20 | if (DRDY_PIN == 1) |
ddelsuc | 0:6ddf88b49483 | 21 | return true; |
ddelsuc | 0:6ddf88b49483 | 22 | else |
ddelsuc | 0:6ddf88b49483 | 23 | return false; |
ddelsuc | 0:6ddf88b49483 | 24 | } |
ddelsuc | 0:6ddf88b49483 | 25 | |
ddelsuc | 0:6ddf88b49483 | 26 | int main() |
ddelsuc | 0:6ddf88b49483 | 27 | { |
ddelsuc | 0:6ddf88b49483 | 28 | pc.baud(115200); |
ddelsuc | 0:6ddf88b49483 | 29 | int dataInCount[3]; |
ddelsuc | 0:6ddf88b49483 | 30 | float x, y, z; |
ddelsuc | 0:6ddf88b49483 | 31 | |
ddelsuc | 0:6ddf88b49483 | 32 | mag_initialize_sensor(); |
ddelsuc | 0:6ddf88b49483 | 33 | |
ddelsuc | 0:6ddf88b49483 | 34 | mag_set_sample_rate(100); //100Hz |
ddelsuc | 0:6ddf88b49483 | 35 | |
ddelsuc | 0:6ddf88b49483 | 36 | mag_set_power_mode(SensorPowerModeActive); |
ddelsuc | 0:6ddf88b49483 | 37 | |
ddelsuc | 0:6ddf88b49483 | 38 | //while (!DataReady()); //wait here, if using DRDY Int |
ddelsuc | 0:6ddf88b49483 | 39 | //If not using DRDY, user can check status Reigster 0x34 for dataready. |
ddelsuc | 0:6ddf88b49483 | 40 | |
ddelsuc | 0:6ddf88b49483 | 41 | //From User Manual Table 3-1 : Geomagnetic Sensor Performance |
ddelsuc | 0:6ddf88b49483 | 42 | //50 CycleCount ~ 20 LSB/uT |
ddelsuc | 0:6ddf88b49483 | 43 | //100 CycleCount ~ 38 LSB/uT |
ddelsuc | 0:6ddf88b49483 | 44 | //200 CycleCount ~ 75 LSB/uT |
ddelsuc | 0:6ddf88b49483 | 45 | //Linear equation: gain (LSB/uT) = (0.3671 * CycleCount + 1.5) |
ddelsuc | 0:6ddf88b49483 | 46 | |
ddelsuc | 0:6ddf88b49483 | 47 | int CycleCount = CCP0 | (CCP1 << 8); |
ddelsuc | 0:6ddf88b49483 | 48 | float gain = 0.3671 * CycleCount + 1.5; |
ddelsuc | 0:6ddf88b49483 | 49 | |
ddelsuc | 0:6ddf88b49483 | 50 | while(1) |
ddelsuc | 0:6ddf88b49483 | 51 | { |
ddelsuc | 0:6ddf88b49483 | 52 | //Get sample data in counts |
ddelsuc | 0:6ddf88b49483 | 53 | mag_get_sample_data((int*)&dataInCount); |
ddelsuc | 0:6ddf88b49483 | 54 | |
ddelsuc | 0:6ddf88b49483 | 55 | while (!DataReady()); //wait here, if using DRDY Int |
ddelsuc | 0:6ddf88b49483 | 56 | |
ddelsuc | 0:6ddf88b49483 | 57 | //Convert to uT |
ddelsuc | 0:6ddf88b49483 | 58 | x = (float)dataInCount[0] / gain; |
ddelsuc | 0:6ddf88b49483 | 59 | y = (float)dataInCount[1] / gain; |
ddelsuc | 0:6ddf88b49483 | 60 | z = (float)dataInCount[2] / gain; |
ddelsuc | 0:6ddf88b49483 | 61 | |
ddelsuc | 0:6ddf88b49483 | 62 | pc.printf("X: %f, Y: %f, Z: %f\n", x, y, z); |
ddelsuc | 0:6ddf88b49483 | 63 | //wait(1); |
ddelsuc | 0:6ddf88b49483 | 64 | } |
ddelsuc | 0:6ddf88b49483 | 65 | return 0; |
ddelsuc | 0:6ddf88b49483 | 66 | } |