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:
10:75c8ce89aeb7
Parent:
9:87a7169b4d5c
Child:
11:de7c9ae7ef65

File content as of revision 10:75c8ce89aeb7:


#include "mbed.h"
#include "magnetometer.h"

namespace {   

    // do something with magnetometer output
    void callback(quan::three_d::vect<quan::magnetic_flux_density::uT> const & v)
    {
        std::cout << "val = " << v << '\n';
    }
    
}// namespace

void loop_forever(std::string const & str);

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 + update_rate_ms;
        ThisThread::sleep_until(next_wake);
        now = next_wake;
    }
}