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-26
- Revision:
- 9:87a7169b4d5c
- Parent:
- 8:c5dc1ce10722
- Child:
- 10:75c8ce89aeb7
File content as of revision 9:87a7169b4d5c:
#include "mbed.h" #include "magnetometer.h" void mag_adjusted_values( quan::time::ms const & update_rate, quan::three_d::vect<double> const & gains, quan::three_d::vect<quan::magnetic_flux_density::uT> const & offsets ); void mag_raw_values(quan::time::ms const & update_rate); void mag_offset_calibrate(); namespace { // terminal loop, printing message periodically void loop_forever(std::string const & str) { DigitalOut led1(LED1,1); // stop but print error dynamically int count = 0; for (;;) { led1 = 1; std::cout << str << " " << count++ << '\n'; ThisThread::sleep_for(200U); led1 = 0; ThisThread::sleep_for(800U); } } // do something with mag output void callback(quan::three_d::vect<quan::magnetic_flux_density::uT> const & v) { std::cout << "val = " << v << '\n'; } }// namespace int main() { DigitalOut led2(LED2,1); std::cout << "magnetometer test\n"; if ( !mag_init()){ loop_forever("failed to init magnetometer\n"); } uint64_t constexpr update_rate_ms = 20U; auto prev_led = Kernel::get_ms_count(); auto now = Kernel::get_ms_count(); for (;;){ mag_start_measurement(); do{ ThisThread::sleep_for(10U); } while ( ! mag_data_ready() ); quan::three_d::vect<quan::magnetic_flux_density::uT> v; if (mag_read(v)){ callback(v); } if ( (now - prev_led) >= 500U){ prev_led = now; led2 = (led2 == 0) ? 1: 0; } auto const next_wake = now + static_cast<uint64_t>(update_rate_ms); ThisThread::sleep_until(next_wake); now = next_wake; } }