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.
main.cpp
- Committer:
- Angath
- Date:
- 2018-11-21
- Revision:
- 0:61c51438425a
File content as of revision 0:61c51438425a:
#include "mbed.h"
int addr = 0x0C <<1; // 8bit I2C address
I2C i2c(PB_9 , PB_8); //sda, scl
Serial pc(PA_2, PA_3); //Tx/Rx
int main()
{
char config [4];
char data[7] = {0};
config[0] = 0x60;
config[1] = 0x00;
config[2] = 0x5C;
config[3] = 0x00;
i2c.write(addr, config, 4, false);
i2c.read(addr, data, 1);
config[0] = 0x60;
config[1] = 0x02;
config[2] = 0xB4;
config[3] = 0x02;
i2c.write(addr, config, 4, false);
i2c.read(addr, data, 1);
wait(0.25);
while (1) {
config[0] = 0x3E; // Single measurement mode, ZYX enabled
i2c.write(addr, config, 1, false);
i2c.read(addr, data, 1);
wait(0.1);
config[0] = 0x4E;
i2c.write(addr, config, 1, false); // Read command, followed by ZYX bits set
i2c.read(addr, data, 7);
int xMag = ((data[1] * 256) + data[2]);
int yMag = ((data[3] * 256) + data[4]);
int zMag = ((data[5] * 256) + data[6]);
printf("X Axis = %d \n", xMag);
printf("Y Axis = %d \n", yMag);
printf("Z Axis = %d \n", zMag);
wait(5);
}
}