First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5

Committer:
skyscraper
Date:
Thu Mar 26 21:59:18 2020 +0000
Revision:
10:75c8ce89aeb7
Parent:
9:87a7169b4d5c
Child:
11:de7c9ae7ef65
clean up a little

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skyscraper 0:37dbfb036586 1
skyscraper 0:37dbfb036586 2 #include "mbed.h"
skyscraper 8:c5dc1ce10722 3 #include "magnetometer.h"
skyscraper 9:87a7169b4d5c 4
skyscraper 10:75c8ce89aeb7 5 namespace {
skyscraper 0:37dbfb036586 6
skyscraper 10:75c8ce89aeb7 7 // do something with magnetometer output
skyscraper 8:c5dc1ce10722 8 void callback(quan::three_d::vect<quan::magnetic_flux_density::uT> const & v)
skyscraper 8:c5dc1ce10722 9 {
skyscraper 10:75c8ce89aeb7 10 std::cout << "val = " << v << '\n';
skyscraper 8:c5dc1ce10722 11 }
skyscraper 8:c5dc1ce10722 12
skyscraper 0:37dbfb036586 13 }// namespace
skyscraper 0:37dbfb036586 14
skyscraper 10:75c8ce89aeb7 15 void loop_forever(std::string const & str);
skyscraper 10:75c8ce89aeb7 16
skyscraper 0:37dbfb036586 17 int main()
skyscraper 0:37dbfb036586 18 {
skyscraper 8:c5dc1ce10722 19 DigitalOut led2(LED2,1);
skyscraper 8:c5dc1ce10722 20 std::cout << "magnetometer test\n";
skyscraper 0:37dbfb036586 21
skyscraper 8:c5dc1ce10722 22 if ( !mag_init()){
skyscraper 8:c5dc1ce10722 23 loop_forever("failed to init magnetometer\n");
skyscraper 0:37dbfb036586 24 }
skyscraper 2:9ffb2f18756b 25
skyscraper 8:c5dc1ce10722 26 uint64_t constexpr update_rate_ms = 20U;
skyscraper 8:c5dc1ce10722 27
skyscraper 8:c5dc1ce10722 28 auto prev_led = Kernel::get_ms_count();
skyscraper 8:c5dc1ce10722 29 auto now = Kernel::get_ms_count();
skyscraper 9:87a7169b4d5c 30
skyscraper 8:c5dc1ce10722 31 for (;;){
skyscraper 9:87a7169b4d5c 32
skyscraper 8:c5dc1ce10722 33 mag_start_measurement();
skyscraper 10:75c8ce89aeb7 34
skyscraper 8:c5dc1ce10722 35 do{
skyscraper 8:c5dc1ce10722 36 ThisThread::sleep_for(10U);
skyscraper 8:c5dc1ce10722 37 } while ( ! mag_data_ready() );
skyscraper 8:c5dc1ce10722 38
skyscraper 8:c5dc1ce10722 39 quan::three_d::vect<quan::magnetic_flux_density::uT> v;
skyscraper 8:c5dc1ce10722 40 if (mag_read(v)){
skyscraper 9:87a7169b4d5c 41 callback(v);
skyscraper 8:c5dc1ce10722 42 }
skyscraper 10:75c8ce89aeb7 43
skyscraper 8:c5dc1ce10722 44 if ( (now - prev_led) >= 500U){
skyscraper 8:c5dc1ce10722 45 prev_led = now;
skyscraper 8:c5dc1ce10722 46 led2 = (led2 == 0) ? 1: 0;
skyscraper 8:c5dc1ce10722 47 }
skyscraper 10:75c8ce89aeb7 48
skyscraper 10:75c8ce89aeb7 49 auto const next_wake = now + update_rate_ms;
skyscraper 8:c5dc1ce10722 50 ThisThread::sleep_until(next_wake);
skyscraper 8:c5dc1ce10722 51 now = next_wake;
skyscraper 8:c5dc1ce10722 52 }
skyscraper 0:37dbfb036586 53 }