This code will read the data from the X,Y and Z axis of the MLX90393 Magnetometer and display it on a serial monitor. Remember to check the solder links on the I2C lines on your Nucleo as this can interfere on certain boards.

Dependencies:   mbed

Committer:
Angath
Date:
Wed Nov 21 22:27:05 2018 +0000
Revision:
0:61c51438425a
Working code to read the data from the X,Y and Z axis of the MLX90393

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Angath 0:61c51438425a 1 #include "mbed.h"
Angath 0:61c51438425a 2
Angath 0:61c51438425a 3 int addr = 0x0C <<1; // 8bit I2C address
Angath 0:61c51438425a 4
Angath 0:61c51438425a 5 I2C i2c(PB_9 , PB_8); //sda, scl
Angath 0:61c51438425a 6
Angath 0:61c51438425a 7 Serial pc(PA_2, PA_3); //Tx/Rx
Angath 0:61c51438425a 8
Angath 0:61c51438425a 9 int main()
Angath 0:61c51438425a 10 {
Angath 0:61c51438425a 11 char config [4];
Angath 0:61c51438425a 12 char data[7] = {0};
Angath 0:61c51438425a 13
Angath 0:61c51438425a 14 config[0] = 0x60;
Angath 0:61c51438425a 15 config[1] = 0x00;
Angath 0:61c51438425a 16 config[2] = 0x5C;
Angath 0:61c51438425a 17 config[3] = 0x00;
Angath 0:61c51438425a 18
Angath 0:61c51438425a 19 i2c.write(addr, config, 4, false);
Angath 0:61c51438425a 20
Angath 0:61c51438425a 21 i2c.read(addr, data, 1);
Angath 0:61c51438425a 22
Angath 0:61c51438425a 23 config[0] = 0x60;
Angath 0:61c51438425a 24 config[1] = 0x02;
Angath 0:61c51438425a 25 config[2] = 0xB4;
Angath 0:61c51438425a 26 config[3] = 0x02;
Angath 0:61c51438425a 27
Angath 0:61c51438425a 28 i2c.write(addr, config, 4, false);
Angath 0:61c51438425a 29
Angath 0:61c51438425a 30 i2c.read(addr, data, 1);
Angath 0:61c51438425a 31
Angath 0:61c51438425a 32 wait(0.25);
Angath 0:61c51438425a 33
Angath 0:61c51438425a 34 while (1) {
Angath 0:61c51438425a 35
Angath 0:61c51438425a 36 config[0] = 0x3E; // Single measurement mode, ZYX enabled
Angath 0:61c51438425a 37
Angath 0:61c51438425a 38 i2c.write(addr, config, 1, false);
Angath 0:61c51438425a 39 i2c.read(addr, data, 1);
Angath 0:61c51438425a 40
Angath 0:61c51438425a 41 wait(0.1);
Angath 0:61c51438425a 42
Angath 0:61c51438425a 43 config[0] = 0x4E;
Angath 0:61c51438425a 44
Angath 0:61c51438425a 45 i2c.write(addr, config, 1, false); // Read command, followed by ZYX bits set
Angath 0:61c51438425a 46 i2c.read(addr, data, 7);
Angath 0:61c51438425a 47
Angath 0:61c51438425a 48 int xMag = ((data[1] * 256) + data[2]);
Angath 0:61c51438425a 49 int yMag = ((data[3] * 256) + data[4]);
Angath 0:61c51438425a 50 int zMag = ((data[5] * 256) + data[6]);
Angath 0:61c51438425a 51
Angath 0:61c51438425a 52 printf("X Axis = %d \n", xMag);
Angath 0:61c51438425a 53 printf("Y Axis = %d \n", yMag);
Angath 0:61c51438425a 54 printf("Z Axis = %d \n", zMag);
Angath 0:61c51438425a 55
Angath 0:61c51438425a 56 wait(5);
Angath 0:61c51438425a 57 }
Angath 0:61c51438425a 58 }