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 22:58:21 2020 +0000
Revision:
11:de7c9ae7ef65
Parent:
10:75c8ce89aeb7
Changed to use threads

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 void loop_forever(std::string const & str);
skyscraper 10:75c8ce89aeb7 6
skyscraper 11:de7c9ae7ef65 7 void mag_service()
skyscraper 0:37dbfb036586 8 {
skyscraper 11:de7c9ae7ef65 9 std::cout << "magnetometer service\n";
skyscraper 0:37dbfb036586 10
skyscraper 8:c5dc1ce10722 11 if ( !mag_init()){
skyscraper 8:c5dc1ce10722 12 loop_forever("failed to init magnetometer\n");
skyscraper 0:37dbfb036586 13 }
skyscraper 2:9ffb2f18756b 14
skyscraper 8:c5dc1ce10722 15 uint64_t constexpr update_rate_ms = 20U;
skyscraper 11:de7c9ae7ef65 16
skyscraper 11:de7c9ae7ef65 17 auto wake = Kernel::get_ms_count();
skyscraper 9:87a7169b4d5c 18
skyscraper 8:c5dc1ce10722 19 for (;;){
skyscraper 9:87a7169b4d5c 20
skyscraper 8:c5dc1ce10722 21 mag_start_measurement();
skyscraper 10:75c8ce89aeb7 22
skyscraper 8:c5dc1ce10722 23 do{
skyscraper 8:c5dc1ce10722 24 ThisThread::sleep_for(10U);
skyscraper 8:c5dc1ce10722 25 } while ( ! mag_data_ready() );
skyscraper 8:c5dc1ce10722 26
skyscraper 8:c5dc1ce10722 27 quan::three_d::vect<quan::magnetic_flux_density::uT> v;
skyscraper 8:c5dc1ce10722 28 if (mag_read(v)){
skyscraper 11:de7c9ae7ef65 29 std::cout << "val = " << v << '\n';
skyscraper 8:c5dc1ce10722 30 }
skyscraper 11:de7c9ae7ef65 31
skyscraper 11:de7c9ae7ef65 32 wake += update_rate_ms;
skyscraper 11:de7c9ae7ef65 33 ThisThread::sleep_until(wake);
skyscraper 8:c5dc1ce10722 34 }
skyscraper 11:de7c9ae7ef65 35 }
skyscraper 11:de7c9ae7ef65 36
skyscraper 11:de7c9ae7ef65 37 void led_blink_service()
skyscraper 11:de7c9ae7ef65 38 {
skyscraper 11:de7c9ae7ef65 39 DigitalOut led(LED2,1);
skyscraper 11:de7c9ae7ef65 40
skyscraper 11:de7c9ae7ef65 41 std::cout << "Blink service\n";
skyscraper 11:de7c9ae7ef65 42
skyscraper 11:de7c9ae7ef65 43 uint64_t constexpr update_rate_ms = 500U;
skyscraper 11:de7c9ae7ef65 44 auto wake = Kernel::get_ms_count();
skyscraper 11:de7c9ae7ef65 45 for (;;){
skyscraper 11:de7c9ae7ef65 46 wake += update_rate_ms;
skyscraper 11:de7c9ae7ef65 47 ThisThread::sleep_until(wake);
skyscraper 11:de7c9ae7ef65 48 led = ( led == 0) ? 1: 0;
skyscraper 11:de7c9ae7ef65 49 }
skyscraper 11:de7c9ae7ef65 50 }
skyscraper 11:de7c9ae7ef65 51
skyscraper 11:de7c9ae7ef65 52 int main()
skyscraper 11:de7c9ae7ef65 53 {
skyscraper 11:de7c9ae7ef65 54 Thread magThread;
skyscraper 11:de7c9ae7ef65 55 magThread.start(mag_service);
skyscraper 11:de7c9ae7ef65 56
skyscraper 11:de7c9ae7ef65 57 Thread blinkThread;
skyscraper 11:de7c9ae7ef65 58 blinkThread.start(led_blink_service);
skyscraper 11:de7c9ae7ef65 59
skyscraper 11:de7c9ae7ef65 60 for (;;){;}
skyscraper 11:de7c9ae7ef65 61
skyscraper 0:37dbfb036586 62 }