First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5
main.cpp
- Committer:
- skyscraper
- Date:
- 2020-03-24
- Revision:
- 5:47026facc081
- Parent:
- 4:53e468c49c17
- Child:
- 6:cc08f2d64773
File content as of revision 5:47026facc081:
#include "mbed.h" #include "hmc5883.h" #include <quan/max.hpp> #include <quan/min.hpp> #include <quan/time.hpp> void mag_adjusted_values( quan::time::ms const & update_rate, quan::three_d::vect<quan::magnetic_flux_density::uT> const & offset ); void mag_raw_values(quan::time::ms const & update_rate); void mag_offset_calibrate(); namespace { QUAN_QUANTITY_LITERAL(magnetic_flux_density,gauss); QUAN_QUANTITY_LITERAL(magnetic_flux_density,milli_gauss); QUAN_QUANTITY_LITERAL(magnetic_flux_density,uT); QUAN_QUANTITY_LITERAL(time,ms); // terminal loop, printing message periodically void loop_forever(std::string const & str) { DigitalOut led2(LED2); // stop but print error dynamically int count = 0; for (;;) { led2 = 1; std::cout << str << " " << count++ << '\n'; ThisThread::sleep_for(200U); led2 = 0; ThisThread::sleep_for(800U); } } }// namespace int main() { std::cout << "HMC5883 test\n"; //wait for mag to init ThisThread::sleep_for(500U); if ( mag_detected() ) { std::cout << "Detected a HMC5883\n"; } else { loop_forever("Failed to detect HMC5883"); } // N.b after offsets removed mag was reading around 34.49 uT, so not bad! constexpr auto earth_magnetic_field_flux_density = 31.869_uT; bool const success = mag_set_samples_average(8) && mag_set_range( earth_magnetic_field_flux_density * 2U); if ( !success) { loop_forever("HMC5883 setup failed"); } std::cout << " mag range set to " << mag_get_range() << '\n'; // offsets from calib engine quan::three_d::vect< quan::magnetic_flux_density::uT > offsets{7.96466_uT,-8.10162_uT,1.50555_uT}; mag_adjusted_values(20_ms,offsets); // mag_raw_values(20_ms); // mag_offset_calibrate(); }