Detect a HMC5883 magnetometer by reading the id registers for NUCLEO-L432KC

Committer:
skyscraper
Date:
Thu Aug 30 13:36:05 2018 +0000
Revision:
0:10e9548cdb3d
Child:
1:8cd11758eff3
initial commit: read the 3 config bytes on a HMC5883 mag. Tested and working, though automatic drag and drop upload fails fro some reason

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skyscraper 0:10e9548cdb3d 1
skyscraper 0:10e9548cdb3d 2 #include "mbed.h"
skyscraper 0:10e9548cdb3d 3 #include <I2C.h>
skyscraper 0:10e9548cdb3d 4 #include <Serial.h>
skyscraper 0:10e9548cdb3d 5
skyscraper 0:10e9548cdb3d 6 namespace {
skyscraper 0:10e9548cdb3d 7 DigitalOut led1(LED1);
skyscraper 0:10e9548cdb3d 8
skyscraper 0:10e9548cdb3d 9 Serial pc(USBTX, USBRX); // tx, rx
skyscraper 0:10e9548cdb3d 10
skyscraper 0:10e9548cdb3d 11 I2C i2c(PA_10,PA_9); // I2C1
skyscraper 0:10e9548cdb3d 12
skyscraper 0:10e9548cdb3d 13 const uint8_t i2c_addr = 0x3D;
skyscraper 0:10e9548cdb3d 14 // idreg
skyscraper 0:10e9548cdb3d 15 const char id_regA = 10U;
skyscraper 0:10e9548cdb3d 16 const char id_regB = 11U;
skyscraper 0:10e9548cdb3d 17 const char id_regC = 12U;
skyscraper 0:10e9548cdb3d 18 }
skyscraper 0:10e9548cdb3d 19
skyscraper 0:10e9548cdb3d 20 int main()
skyscraper 0:10e9548cdb3d 21 {
skyscraper 0:10e9548cdb3d 22 //wait for mag to init
skyscraper 0:10e9548cdb3d 23 Thread::wait(500);
skyscraper 0:10e9548cdb3d 24 // move pointer to loc
skyscraper 0:10e9548cdb3d 25 i2c.write(i2c_addr,&id_regA,1);
skyscraper 0:10e9548cdb3d 26 char id_input[4];
skyscraper 0:10e9548cdb3d 27 i2c.read(i2c_addr,id_input,3);
skyscraper 0:10e9548cdb3d 28 id_input[3] = '\0';
skyscraper 0:10e9548cdb3d 29 pc.printf("config got %s\n",id_input);
skyscraper 0:10e9548cdb3d 30 //check we are still running
skyscraper 0:10e9548cdb3d 31 for (;;){
skyscraper 0:10e9548cdb3d 32 led1 = !led1;
skyscraper 0:10e9548cdb3d 33 Thread::wait(250);
skyscraper 0:10e9548cdb3d 34 }
skyscraper 0:10e9548cdb3d 35 }