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

main.cpp

Committer:
skyscraper
Date:
2018-08-30
Revision:
1:8cd11758eff3
Parent:
0:10e9548cdb3d

File content as of revision 1:8cd11758eff3:


#include "mbed.h"
#include <cstring>
#include <I2C.h>
#include <Serial.h>

namespace {
    DigitalOut led1(LED1);
    
    Serial pc(USBTX, USBRX); // tx, rx
    
    I2C i2c(PA_10,PA_9); // I2C1
    
    const uint8_t i2c_addr = 0x3D;
    // idreg
    const char id_regA = 10U;
    const char id_regB = 11U;
    const char id_regC = 12U;
}

int main()
{
    //wait for mag to init
    Thread::wait(500);
    
    // move pointer to loc
    if ( i2c.write(i2c_addr,&id_regA,1) == 0){
        char id_input[4];
        i2c.read(i2c_addr,id_input,3);
        id_input[3] = '\0';
        if (strcmp(id_input,"H43") == 0){
          pc.printf("Detected a HMC5883",id_input);
        }else{
         pc.printf("config Not got a HMC5883",id_input);
        }
    }else{
        pc.printf("HMC5883 write failed\n");
    }
    //check we are still running
    for (;;){
       led1 = !led1;
       Thread::wait(250);
    }
}