First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5
Diff: hmc5883.cpp
- Revision:
- 7:5d14da0b4c95
- Parent:
- 3:2834be4e10ef
- Child:
- 8:c5dc1ce10722
--- a/hmc5883.cpp Thu Mar 26 01:58:30 2020 +0000 +++ b/hmc5883.cpp Thu Mar 26 12:27:43 2020 +0000 @@ -1,10 +1,12 @@ #include "mbed.h" + #include <iostream> #include <quan/out/magnetic_flux_density.hpp> #include <quan/three_d/out/vect.hpp> +#include "resourceManager.h" /* MySensor sensor; @@ -50,7 +52,10 @@ 12 Identification Register C R */ - I2C i2c(I2C_SDA, I2C_SCL ); + // I2C i2c(I2C_SDA, I2C_SCL ); + + I2C& i2c = resource::i2c1; + constexpr uint8_t i2c_addr = 0x3D; constexpr char cfg_regA = 0; constexpr char cfg_regB = 1; @@ -58,15 +63,13 @@ constexpr char dout_reg = 3; constexpr char status_reg = 9; constexpr char id_regA = 10U; - + // Set reg index to idx_in // return true if successful bool mag_set_reg_idx(uint8_t idx_in) { char const idx = static_cast<char>(idx_in); - i2c.lock(); bool const result = i2c.write(i2c_addr,&idx,1) == 0; - i2c.unlock(); if(result) { return true; } else { @@ -80,9 +83,7 @@ bool mag_write_reg(uint8_t idx, uint8_t val) { char ar[2] = {idx,val}; - i2c.lock(); bool const result = i2c.write(i2c_addr,ar,2) == 0; - i2c.unlock(); if(result) { return true; } else { @@ -97,9 +98,7 @@ { if ( mag_set_reg_idx(idx_in)) { char temp_result = 0; - i2c.lock(); bool const success = i2c.read(i2c_addr,&temp_result,1) == 0; - i2c.unlock(); if (success) { result = temp_result; return true; @@ -134,9 +133,7 @@ { if ( mag_set_reg_idx(id_regA) ) { char id_input[4]; - i2c.lock(); bool success = i2c.read(i2c_addr,id_input,3) == 0; - i2c.unlock(); if(success) { id_input[3] = '\0'; bool const is_hmc = (strcmp(id_input,"H43") == 0);