Example of using the HSCDTD008A Geomagnetic Sensor.

Dependencies:   HSCDTD008A

Committer:
hudakz
Date:
Sun Jun 20 14:20:26 2021 +0000
Revision:
1:2d4aa9e794a5
Parent:
0:5090d2766d5e
Example of using the HSCDTD008A Geomagnetic Sensor.

Who changed what in which revision?

UserRevisionLine numberNew 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 1:2d4aa9e794a5 6 HSCDTD008A compass(PB_7, PB_6);
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 1:2d4aa9e794a5 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 1:2d4aa9e794a5 44 watchdog.start(3000);
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 }