![](/media/cache/profiles/7c39a5f991bef4a1e34187677a65871d.jpg.50x50_q85.jpg)
Example of using the HSCDTD008A Geomagnetic Sensor.
main.cpp
- Committer:
- hudakz
- Date:
- 2021-06-20
- Revision:
- 0:5090d2766d5e
- Child:
- 1:2d4aa9e794a5
File content as of revision 0:5090d2766d5e:
#include "mbed.h" #include "HSCDTD008A.h" #define M_PI 3.14159265358979323846 HSCDTD008A compass(PB_7, PB_6, PA_8); Watchdog& watchdog = Watchdog::get_instance(); int main() { float x_sum; float y_sum; float z_sum; float x_avg; float y_avg; float z_avg; float bearing; printf("Starting selftest.. "); if (compass.selftest() == OK) { printf("passed\r\n"); } else { printf("failed\r\n"); } printf("Calibrating offsets.. "); compass.calibrateOffsets(); printf("done\r\n"); printf("Compensating temperature.. "); compass.compensateTemp(); printf("done\r\n"); ThisThread::sleep_for(1000ms); compass.setResolution(true); // set 15bit resolution printf("res = %d\r\n", compass.getResolution()); compass.enableFifo(); compass.normalMode(0b10); watchdog.start(3000); // clears WDTOF while (true) { printf("-----------------\r\n"); printf("Measuring.. \r\n"); if (compass.isFifoFull()) { watchdog.kick(); //printf("FIFO pointer = %d\r\n", compass.fifoPointer()); //printf("FIFO full = %d\r\n", compass.isFifoFull()); // get data and calculate sums x_sum = 0; y_sum = 0; z_sum = 0; for (uint8_t i = 0; i < 8; i++) { compass.readData(); x_sum += compass.x(); y_sum += compass.y(); z_sum += compass.z(); } // calculate averages x_avg = x_sum / 8; y_avg = y_sum / 8; z_avg = z_sum / 8; //printf("FIFO pointer = %d\r\n", compass.fifoPointer()); //printf("FIFO full = %d\r\n", compass.isFifoFull()); //printf("\r\n"); printf("x_avg = %f\r\n", x_avg); printf("y_avg = %f\r\n", y_avg); printf("z_avg = %f\r\n", z_avg); printf("\r\n"); bearing = atan2(y_avg, x_avg) * 180 / M_PI; if (bearing < 0) { bearing = 360 + bearing; }; printf("bearing = %f\r\n", bearing); } ThisThread::sleep_for(1s); } }