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

Committer:
skyscraper
Date:
Thu Aug 30 20:07:17 2018 +0000
Revision:
1:8cd11758eff3
Parent:
0:10e9548cdb3d
change from string to detect hmc5883 message

Who changed what in which revision?

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