Zoltan Hudak
/
HSCDTD008A_Hello
Example of using the HSCDTD008A Geomagnetic Sensor.
main.cpp@0:5090d2766d5e, 2021-06-20 (annotated)
- Committer:
- hudakz
- Date:
- Sun Jun 20 13:56:50 2021 +0000
- Revision:
- 0:5090d2766d5e
- Child:
- 1:2d4aa9e794a5
Example of using the HSCDTD008A Geomagnetic Sensor.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 0:5090d2766d5e | 1 | #include "mbed.h" |
hudakz | 0:5090d2766d5e | 2 | #include "HSCDTD008A.h" |
hudakz | 0:5090d2766d5e | 3 | |
hudakz | 0:5090d2766d5e | 4 | #define M_PI 3.14159265358979323846 |
hudakz | 0:5090d2766d5e | 5 | |
hudakz | 0:5090d2766d5e | 6 | HSCDTD008A compass(PB_7, PB_6, PA_8); |
hudakz | 0:5090d2766d5e | 7 | Watchdog& watchdog = Watchdog::get_instance(); |
hudakz | 0:5090d2766d5e | 8 | |
hudakz | 0:5090d2766d5e | 9 | int main() |
hudakz | 0:5090d2766d5e | 10 | { |
hudakz | 0:5090d2766d5e | 11 | float x_sum; |
hudakz | 0:5090d2766d5e | 12 | float y_sum; |
hudakz | 0:5090d2766d5e | 13 | float z_sum; |
hudakz | 0:5090d2766d5e | 14 | float x_avg; |
hudakz | 0:5090d2766d5e | 15 | float y_avg; |
hudakz | 0:5090d2766d5e | 16 | float z_avg; |
hudakz | 0:5090d2766d5e | 17 | float bearing; |
hudakz | 0:5090d2766d5e | 18 | |
hudakz | 0:5090d2766d5e | 19 | printf("Starting selftest.. "); |
hudakz | 0:5090d2766d5e | 20 | if (compass.selftest() == OK) { |
hudakz | 0:5090d2766d5e | 21 | printf("passed\r\n"); |
hudakz | 0:5090d2766d5e | 22 | } |
hudakz | 0:5090d2766d5e | 23 | else { |
hudakz | 0:5090d2766d5e | 24 | printf("failed\r\n"); |
hudakz | 0:5090d2766d5e | 25 | } |
hudakz | 0:5090d2766d5e | 26 | |
hudakz | 0:5090d2766d5e | 27 | printf("Calibrating offsets.. "); |
hudakz | 0:5090d2766d5e | 28 | compass.calibrateOffsets(); |
hudakz | 0:5090d2766d5e | 29 | |
hudakz | 0:5090d2766d5e | 30 | printf("done\r\n"); |
hudakz | 0:5090d2766d5e | 31 | |
hudakz | 0:5090d2766d5e | 32 | printf("Compensating temperature.. "); |
hudakz | 0:5090d2766d5e | 33 | compass.compensateTemp(); |
hudakz | 0:5090d2766d5e | 34 | printf("done\r\n"); |
hudakz | 0:5090d2766d5e | 35 | |
hudakz | 0:5090d2766d5e | 36 | ThisThread::sleep_for(1000ms); |
hudakz | 0:5090d2766d5e | 37 | |
hudakz | 0:5090d2766d5e | 38 | compass.setResolution(true); // set 15bit resolution |
hudakz | 0:5090d2766d5e | 39 | printf("res = %d\r\n", compass.getResolution()); |
hudakz | 0:5090d2766d5e | 40 | |
hudakz | 0:5090d2766d5e | 41 | compass.enableFifo(); |
hudakz | 0:5090d2766d5e | 42 | compass.normalMode(0b10); |
hudakz | 0:5090d2766d5e | 43 | |
hudakz | 0:5090d2766d5e | 44 | watchdog.start(3000); // clears WDTOF |
hudakz | 0:5090d2766d5e | 45 | |
hudakz | 0:5090d2766d5e | 46 | while (true) { |
hudakz | 0:5090d2766d5e | 47 | printf("-----------------\r\n"); |
hudakz | 0:5090d2766d5e | 48 | printf("Measuring.. \r\n"); |
hudakz | 0:5090d2766d5e | 49 | |
hudakz | 0:5090d2766d5e | 50 | if (compass.isFifoFull()) { |
hudakz | 0:5090d2766d5e | 51 | watchdog.kick(); |
hudakz | 0:5090d2766d5e | 52 | |
hudakz | 0:5090d2766d5e | 53 | //printf("FIFO pointer = %d\r\n", compass.fifoPointer()); |
hudakz | 0:5090d2766d5e | 54 | //printf("FIFO full = %d\r\n", compass.isFifoFull()); |
hudakz | 0:5090d2766d5e | 55 | |
hudakz | 0:5090d2766d5e | 56 | // get data and calculate sums |
hudakz | 0:5090d2766d5e | 57 | x_sum = 0; |
hudakz | 0:5090d2766d5e | 58 | y_sum = 0; |
hudakz | 0:5090d2766d5e | 59 | z_sum = 0; |
hudakz | 0:5090d2766d5e | 60 | |
hudakz | 0:5090d2766d5e | 61 | for (uint8_t i = 0; i < 8; i++) { |
hudakz | 0:5090d2766d5e | 62 | compass.readData(); |
hudakz | 0:5090d2766d5e | 63 | x_sum += compass.x(); |
hudakz | 0:5090d2766d5e | 64 | y_sum += compass.y(); |
hudakz | 0:5090d2766d5e | 65 | z_sum += compass.z(); |
hudakz | 0:5090d2766d5e | 66 | } |
hudakz | 0:5090d2766d5e | 67 | |
hudakz | 0:5090d2766d5e | 68 | // calculate averages |
hudakz | 0:5090d2766d5e | 69 | x_avg = x_sum / 8; |
hudakz | 0:5090d2766d5e | 70 | y_avg = y_sum / 8; |
hudakz | 0:5090d2766d5e | 71 | z_avg = z_sum / 8; |
hudakz | 0:5090d2766d5e | 72 | |
hudakz | 0:5090d2766d5e | 73 | //printf("FIFO pointer = %d\r\n", compass.fifoPointer()); |
hudakz | 0:5090d2766d5e | 74 | //printf("FIFO full = %d\r\n", compass.isFifoFull()); |
hudakz | 0:5090d2766d5e | 75 | //printf("\r\n"); |
hudakz | 0:5090d2766d5e | 76 | |
hudakz | 0:5090d2766d5e | 77 | printf("x_avg = %f\r\n", x_avg); |
hudakz | 0:5090d2766d5e | 78 | printf("y_avg = %f\r\n", y_avg); |
hudakz | 0:5090d2766d5e | 79 | printf("z_avg = %f\r\n", z_avg); |
hudakz | 0:5090d2766d5e | 80 | printf("\r\n"); |
hudakz | 0:5090d2766d5e | 81 | |
hudakz | 0:5090d2766d5e | 82 | bearing = atan2(y_avg, x_avg) * 180 / M_PI; |
hudakz | 0:5090d2766d5e | 83 | if (bearing < 0) { |
hudakz | 0:5090d2766d5e | 84 | bearing = 360 + bearing; |
hudakz | 0:5090d2766d5e | 85 | }; |
hudakz | 0:5090d2766d5e | 86 | |
hudakz | 0:5090d2766d5e | 87 | printf("bearing = %f\r\n", bearing); |
hudakz | 0:5090d2766d5e | 88 | } |
hudakz | 0:5090d2766d5e | 89 | |
hudakz | 0:5090d2766d5e | 90 | ThisThread::sleep_for(1s); |
hudakz | 0:5090d2766d5e | 91 | } |
hudakz | 0:5090d2766d5e | 92 | } |