Testé pour projet BTS SN

Dependencies:   mbed HMC6352

Fork of HMC6352_HelloWorld by Christian Dupaty

Mise en oeuvre du capteur de cap HMC6352 sur Nucleo F411RE Attention , utiliser l'alimentation 3.3v sur connecteur Arduino, liaison I2C sur PB_9, PB_8

/media/uploads/cdupaty/p1010492.jpg

Committer:
cdupaty
Date:
Thu Mar 25 13:08:23 2021 +0000
Revision:
4:577548612451
Parent:
3:caca5cdad681
New i2c_ functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cdupaty 3:caca5cdad681 1 /*
cdupaty 3:caca5cdad681 2 Christian Dupaty 03/2021
cdupaty 3:caca5cdad681 3 Library and demo for BMM150 see datasheet here : https://www.bosch-sensortec.com/products/motion-sensors/magnetometers-bmm150/
cdupaty 3:caca5cdad681 4 Adaptation of BOSCH driver https://github.com/BoschSensortec/BMM150-Sensor-API
cdupaty 3:caca5cdad681 5 for ARM MBED and tested on NUCLEO-L073RZ and GEOMAGNETIC CLICK
cdupaty 3:caca5cdad681 6 https://www.mikroe.com/geomagnetic-click
cdupaty 3:caca5cdad681 7 */
cdupaty 3:caca5cdad681 8
cdupaty 3:caca5cdad681 9 #include "mbed.h"
cdupaty 3:caca5cdad681 10 // libraries
cdupaty 3:caca5cdad681 11 #include "bmm150.h"
cdupaty 3:caca5cdad681 12 #include "bmm150_defs.h"
cdupaty 3:caca5cdad681 13 #include <math.h>
cdupaty 3:caca5cdad681 14 #define PI 3.141592653589793238462643383279L
cdupaty 4:577548612451 15 #define DPI 6.283185307179586476925286766559L
cdupaty 3:caca5cdad681 16
cdupaty 3:caca5cdad681 17
cdupaty 3:caca5cdad681 18 Serial pc(SERIAL_TX, SERIAL_RX);
cdupaty 3:caca5cdad681 19 BMM150 bmm(PB_9,PB_8); // sda,scl
cdupaty 3:caca5cdad681 20
cdupaty 3:caca5cdad681 21 void setup() {
cdupaty 3:caca5cdad681 22 pc.baud(9600);
cdupaty 3:caca5cdad681 23
cdupaty 3:caca5cdad681 24 if (bmm.initialize() == BMM150_E_ID_NOT_CONFORM)
cdupaty 3:caca5cdad681 25 {
cdupaty 4:577548612451 26 pc.printf("Chip ID can not be read, BMM150 not found!\n");
cdupaty 3:caca5cdad681 27 while (1); // All is lost
cdupaty 3:caca5cdad681 28 } else {
cdupaty 4:577548612451 29 pc.printf("Initialize done, BMM150 has been founded!\n");
cdupaty 3:caca5cdad681 30 }
cdupaty 3:caca5cdad681 31
cdupaty 3:caca5cdad681 32 }
cdupaty 3:caca5cdad681 33
cdupaty 3:caca5cdad681 34 int main()
cdupaty 3:caca5cdad681 35 {
cdupaty 3:caca5cdad681 36 bmm150_mag_data value;
cdupaty 3:caca5cdad681 37 setup(); // Arduino style
cdupaty 3:caca5cdad681 38 while(1)
cdupaty 3:caca5cdad681 39 {
cdupaty 3:caca5cdad681 40 bmm.read_mag_data();
cdupaty 3:caca5cdad681 41
cdupaty 3:caca5cdad681 42 value.x = bmm.raw_mag_data.raw_datax;
cdupaty 3:caca5cdad681 43 value.y = bmm.raw_mag_data.raw_datay;
cdupaty 3:caca5cdad681 44 value.z = bmm.raw_mag_data.raw_dataz;
cdupaty 3:caca5cdad681 45
cdupaty 3:caca5cdad681 46 double xyHeading = atan2((double)value.x, (double)value.y);
cdupaty 3:caca5cdad681 47 double zxHeading = atan2((double)value.z, (double)value.x);
cdupaty 3:caca5cdad681 48 double heading = xyHeading;
cdupaty 3:caca5cdad681 49
cdupaty 3:caca5cdad681 50 if (heading < 0.0)
cdupaty 3:caca5cdad681 51 {
cdupaty 4:577548612451 52 heading += DPI;
cdupaty 3:caca5cdad681 53 }
cdupaty 4:577548612451 54 if (heading > DPI)
cdupaty 3:caca5cdad681 55 {
cdupaty 4:577548612451 56 heading -= DPI;
cdupaty 3:caca5cdad681 57 }
cdupaty 3:caca5cdad681 58 double headingDegrees = heading * 180.0 / PI;
cdupaty 3:caca5cdad681 59 double xyHeadingDegrees = xyHeading * 180.0 / PI;
cdupaty 3:caca5cdad681 60 double zxHeadingDegrees = zxHeading * 180.0 / PI;
cdupaty 3:caca5cdad681 61
cdupaty 4:577548612451 62 pc.printf("Heading: %3.2f deg\n ",headingDegrees);
cdupaty 3:caca5cdad681 63
cdupaty 4:577548612451 64 wait_ms(1000);
cdupaty 3:caca5cdad681 65 }
cdupaty 3:caca5cdad681 66 }