Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@51:6a158dcc7457, 2022-06-02 (annotated)
- Committer:
- pmic
- Date:
- Thu Jun 02 13:56:39 2022 +0200
- Revision:
- 51:6a158dcc7457
- Parent:
- 50:84723ac07ea5
- Child:
- 52:4c282feb57eb
Checked Nicolas libary, ok compared to actual ublox libary from mbed
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| pmic | 51:6a158dcc7457 | 1 | #include <mbed.h> |
| pmic | 51:6a158dcc7457 | 2 | //#include "greentea-client/test_env.h" |
| pmic | 51:6a158dcc7457 | 3 | //#include "unity.h" |
| pmic | 51:6a158dcc7457 | 4 | //#include "utest.h" |
| pmic | 51:6a158dcc7457 | 5 | #include <gnss.h> |
| pmic | 50:84723ac07ea5 | 6 | |
| pmic | 51:6a158dcc7457 | 7 | //using namespace utest::v1; |
| pmic | 50:84723ac07ea5 | 8 | |
| pmic | 50:84723ac07ea5 | 9 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 10 | // COMPILE-TIME MACROS |
| pmic | 50:84723ac07ea5 | 11 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 12 | |
| pmic | 50:84723ac07ea5 | 13 | // How long to wait for a GNSS result |
| pmic | 50:84723ac07ea5 | 14 | #define GNSS_WAIT_SECONDS 120 |
| pmic | 50:84723ac07ea5 | 15 | |
| pmic | 50:84723ac07ea5 | 16 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 17 | // PRIVATE VARIABLES |
| pmic | 50:84723ac07ea5 | 18 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 19 | |
| pmic | 50:84723ac07ea5 | 20 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 21 | // PRIVATE FUNCTIONS |
| pmic | 50:84723ac07ea5 | 22 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 23 | |
| pmic | 50:84723ac07ea5 | 24 | static void printHex (char * pData, uint32_t lenData) |
| pmic | 50:84723ac07ea5 | 25 | { |
| pmic | 50:84723ac07ea5 | 26 | char * pEnd = pData + lenData; |
| pmic | 50:84723ac07ea5 | 27 | uint8_t x; |
| pmic | 50:84723ac07ea5 | 28 | |
| pmic | 50:84723ac07ea5 | 29 | printf (" 0 1 2 3 4 5 6 7 8 9 A B C D E F\n"); |
| pmic | 50:84723ac07ea5 | 30 | while (pData < pEnd) { |
| pmic | 50:84723ac07ea5 | 31 | for (x = 1; (x <= 32) && (pData < pEnd); x++) { |
| pmic | 50:84723ac07ea5 | 32 | if (x % 16 == 8) { |
| pmic | 50:84723ac07ea5 | 33 | printf ("%02x ", *pData); |
| pmic | 50:84723ac07ea5 | 34 | } else if (x % 16 == 0) { |
| pmic | 50:84723ac07ea5 | 35 | printf ("%02x\n", *pData); |
| pmic | 50:84723ac07ea5 | 36 | } else { |
| pmic | 50:84723ac07ea5 | 37 | printf ("%02x-", *pData); |
| pmic | 50:84723ac07ea5 | 38 | } |
| pmic | 50:84723ac07ea5 | 39 | pData++; |
| pmic | 50:84723ac07ea5 | 40 | } |
| pmic | 50:84723ac07ea5 | 41 | |
| pmic | 50:84723ac07ea5 | 42 | |
| pmic | 50:84723ac07ea5 | 43 | if (x % 16 != 1) { |
| pmic | 50:84723ac07ea5 | 44 | printf("\n"); |
| pmic | 50:84723ac07ea5 | 45 | } |
| pmic | 50:84723ac07ea5 | 46 | } |
| pmic | 50:84723ac07ea5 | 47 | } |
| pmic | 50:84723ac07ea5 | 48 | |
| pmic | 50:84723ac07ea5 | 49 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 50 | // TESTS |
| pmic | 50:84723ac07ea5 | 51 | // ---------------------------------------------------------------- |
| pmic | 50:84723ac07ea5 | 52 | |
| pmic | 50:84723ac07ea5 | 53 | // Test sending a u-blox command over serial |
| pmic | 50:84723ac07ea5 | 54 | void test_serial_ubx() { |
| pmic | 50:84723ac07ea5 | 55 | char buffer[64]; |
| pmic | 50:84723ac07ea5 | 56 | int responseLength = 0; |
| pmic | 50:84723ac07ea5 | 57 | int returnCode; |
| pmic | 50:84723ac07ea5 | 58 | bool gotAck = false; |
| pmic | 50:84723ac07ea5 | 59 | Timer timer; |
| pmic | 50:84723ac07ea5 | 60 | |
| pmic | 51:6a158dcc7457 | 61 | GnssSerial *pGnss = new GnssSerial(PA_9, PA_10, 38400); |
| pmic | 50:84723ac07ea5 | 62 | |
| pmic | 50:84723ac07ea5 | 63 | // Initialise the GNSS chip |
| pmic | 50:84723ac07ea5 | 64 | pGnss->init(NC); |
| pmic | 50:84723ac07ea5 | 65 | |
| pmic | 50:84723ac07ea5 | 66 | // Try this a few times as we might get no response |
| pmic | 50:84723ac07ea5 | 67 | // if the GNSS chip is busy |
| pmic | 50:84723ac07ea5 | 68 | for (int x = 0; (x < 3) && !gotAck; x++) { |
| pmic | 50:84723ac07ea5 | 69 | // See ublox7-V14_ReceiverDescrProtSpec section 30.11.15 (CFG-NAV5) |
| pmic | 50:84723ac07ea5 | 70 | // Set automotive mode, which should be acknowledged |
| pmic | 50:84723ac07ea5 | 71 | memset (buffer, 0, sizeof (buffer)); |
| pmic | 50:84723ac07ea5 | 72 | buffer[0] = 0x00; |
| pmic | 50:84723ac07ea5 | 73 | buffer[1] = 0x01; // Mask: set dynamic config only |
| pmic | 50:84723ac07ea5 | 74 | buffer[2] = 0x04; // Dynamic platform model: automotive |
| pmic | 50:84723ac07ea5 | 75 | // Send length is 32 bytes of payload + 6 bytes header + 2 bytes CRC |
| pmic | 51:6a158dcc7457 | 76 | //TEST_ASSERT_EQUAL_INT (40, pGnss->sendUbx(0x06, 0x24, buffer, 32)); |
| pmic | 50:84723ac07ea5 | 77 | printf ("CFG_NAV5 command sent, try %d.\n", x); |
| pmic | 50:84723ac07ea5 | 78 | timer.start(); |
| pmic | 51:6a158dcc7457 | 79 | while ((!gotAck) && (std::chrono::duration_cast<std::chrono::milliseconds>(timer.elapsed_time()).count() < 1000)) { |
| pmic | 50:84723ac07ea5 | 80 | // Wait for the required Ack |
| pmic | 50:84723ac07ea5 | 81 | returnCode = pGnss->getMessage(buffer, sizeof(buffer)); |
| pmic | 50:84723ac07ea5 | 82 | if ((returnCode != GnssSerial::WAIT) && (returnCode != GnssSerial::NOT_FOUND)) { |
| pmic | 50:84723ac07ea5 | 83 | responseLength = LENGTH(returnCode); |
| pmic | 50:84723ac07ea5 | 84 | if ((PROTOCOL(returnCode) == GnssSerial::UBX)) { |
| pmic | 50:84723ac07ea5 | 85 | printHex(buffer, responseLength); |
| pmic | 50:84723ac07ea5 | 86 | // Ack is 0xb5-62-05-00-02-00-msgclass-msgid-crcA-crcB |
| pmic | 50:84723ac07ea5 | 87 | // Nack is 0xb5-62-05-01-02-00-msgclass-msgid-crcA-crcB |
| pmic | 51:6a158dcc7457 | 88 | //TEST_ASSERT_EQUAL_UINT8(0xb5, buffer[0]); |
| pmic | 51:6a158dcc7457 | 89 | //TEST_ASSERT_EQUAL_UINT8(0x62, buffer[1]); |
| pmic | 51:6a158dcc7457 | 90 | //TEST_ASSERT_EQUAL_UINT8(0x05, buffer[2]); |
| pmic | 51:6a158dcc7457 | 91 | //TEST_ASSERT_EQUAL_UINT8(0x00, buffer[3]); |
| pmic | 51:6a158dcc7457 | 92 | //TEST_ASSERT_EQUAL_UINT8(0x02, buffer[4]); |
| pmic | 51:6a158dcc7457 | 93 | //TEST_ASSERT_EQUAL_UINT8(0x00, buffer[5]); |
| pmic | 51:6a158dcc7457 | 94 | //TEST_ASSERT_EQUAL_UINT8(0x06, buffer[6]); |
| pmic | 51:6a158dcc7457 | 95 | //TEST_ASSERT_EQUAL_UINT8(0x24, buffer[7]); |
| pmic | 50:84723ac07ea5 | 96 | gotAck = true; |
| pmic | 50:84723ac07ea5 | 97 | } else if ((PROTOCOL(returnCode) == GnssSerial::NMEA)) { |
| pmic | 50:84723ac07ea5 | 98 | printf ("%.*s", responseLength, buffer); |
| pmic | 50:84723ac07ea5 | 99 | } else { |
| pmic | 50:84723ac07ea5 | 100 | printHex(buffer, responseLength); |
| pmic | 50:84723ac07ea5 | 101 | } |
| pmic | 50:84723ac07ea5 | 102 | } |
| pmic | 51:6a158dcc7457 | 103 | thread_sleep_for(100); //wait_ms (100); |
| pmic | 50:84723ac07ea5 | 104 | } |
| pmic | 50:84723ac07ea5 | 105 | timer.stop(); |
| pmic | 50:84723ac07ea5 | 106 | timer.reset(); |
| pmic | 50:84723ac07ea5 | 107 | } |
| pmic | 50:84723ac07ea5 | 108 | } |
| pmic | 50:84723ac07ea5 | 109 | |
| pmic | 50:84723ac07ea5 | 110 | // Test getting a response from GNSS using the serial interface |
| pmic | 50:84723ac07ea5 | 111 | void test_serial_time() { |
| pmic | 51:6a158dcc7457 | 112 | GnssSerial *pGnss = new GnssSerial(PA_9, PA_10, 38400); |
| pmic | 50:84723ac07ea5 | 113 | |
| pmic | 50:84723ac07ea5 | 114 | bool gotLatLong = false; |
| pmic | 50:84723ac07ea5 | 115 | bool gotElevation = false; |
| pmic | 50:84723ac07ea5 | 116 | bool gotSpeed = false; |
| pmic | 50:84723ac07ea5 | 117 | bool gotTime = false; |
| pmic | 50:84723ac07ea5 | 118 | char buffer[256]; |
| pmic | 50:84723ac07ea5 | 119 | int returnCode; |
| pmic | 50:84723ac07ea5 | 120 | double latitude; |
| pmic | 50:84723ac07ea5 | 121 | double longitude; |
| pmic | 50:84723ac07ea5 | 122 | double elevation; |
| pmic | 50:84723ac07ea5 | 123 | double speed; |
| pmic | 50:84723ac07ea5 | 124 | |
| pmic | 50:84723ac07ea5 | 125 | printf("GNSS: powering up and waiting up to %d second(s) for something to happen.\n", GNSS_WAIT_SECONDS); |
| pmic | 50:84723ac07ea5 | 126 | pGnss->init(); |
| pmic | 50:84723ac07ea5 | 127 | |
| pmic | 50:84723ac07ea5 | 128 | memset(buffer, 0, sizeof(buffer)); |
| pmic | 50:84723ac07ea5 | 129 | for (uint32_t x = 0; (x < GNSS_WAIT_SECONDS) && !gotTime; x++) |
| pmic | 50:84723ac07ea5 | 130 | { |
| pmic | 50:84723ac07ea5 | 131 | while (((returnCode = pGnss->getMessage(buffer, sizeof(buffer))) > 0) && |
| pmic | 50:84723ac07ea5 | 132 | !(gotLatLong && gotElevation && gotSpeed && gotTime)) |
| pmic | 50:84723ac07ea5 | 133 | { |
| pmic | 50:84723ac07ea5 | 134 | int32_t length = LENGTH(returnCode); |
| pmic | 50:84723ac07ea5 | 135 | |
| pmic | 50:84723ac07ea5 | 136 | if ((PROTOCOL(returnCode) == GnssParser::NMEA) && (length > 6)) |
| pmic | 50:84723ac07ea5 | 137 | { |
| pmic | 50:84723ac07ea5 | 138 | printf("."); |
| pmic | 50:84723ac07ea5 | 139 | |
| pmic | 50:84723ac07ea5 | 140 | // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GNSS |
| pmic | 50:84723ac07ea5 | 141 | if ((buffer[0] == '$') || buffer[1] == 'G') |
| pmic | 50:84723ac07ea5 | 142 | { |
| pmic | 50:84723ac07ea5 | 143 | #define _CHECK_TALKER(s) ((buffer[3] == s[0]) && (buffer[4] == s[1]) && (buffer[5] == s[2])) |
| pmic | 50:84723ac07ea5 | 144 | if (_CHECK_TALKER("GLL")) |
| pmic | 50:84723ac07ea5 | 145 | { |
| pmic | 50:84723ac07ea5 | 146 | char ch; |
| pmic | 50:84723ac07ea5 | 147 | |
| pmic | 50:84723ac07ea5 | 148 | if (pGnss->getNmeaAngle(1, buffer, length, latitude) && |
| pmic | 50:84723ac07ea5 | 149 | pGnss->getNmeaAngle(3, buffer, length, longitude) && |
| pmic | 50:84723ac07ea5 | 150 | pGnss->getNmeaItem(6, buffer, length, ch) && |
| pmic | 50:84723ac07ea5 | 151 | ch == 'A') |
| pmic | 50:84723ac07ea5 | 152 | { |
| pmic | 50:84723ac07ea5 | 153 | gotLatLong = true; |
| pmic | 50:84723ac07ea5 | 154 | latitude *= 60000; |
| pmic | 50:84723ac07ea5 | 155 | longitude *= 60000; |
| pmic | 50:84723ac07ea5 | 156 | printf("\nGNSS: location %.5f %.5f %c.\n", latitude, longitude, ch); |
| pmic | 50:84723ac07ea5 | 157 | } |
| pmic | 50:84723ac07ea5 | 158 | } |
| pmic | 50:84723ac07ea5 | 159 | else if (_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS")) |
| pmic | 50:84723ac07ea5 | 160 | { |
| pmic | 50:84723ac07ea5 | 161 | const char *pTimeString = NULL; |
| pmic | 50:84723ac07ea5 | 162 | |
| pmic | 50:84723ac07ea5 | 163 | // Retrieve the time |
| pmic | 50:84723ac07ea5 | 164 | pTimeString = pGnss->findNmeaItemPos(1, buffer, buffer + length); |
| pmic | 50:84723ac07ea5 | 165 | if (pTimeString != NULL) |
| pmic | 50:84723ac07ea5 | 166 | { |
| pmic | 50:84723ac07ea5 | 167 | gotTime = true; |
| pmic | 50:84723ac07ea5 | 168 | printf("\nGNSS: time is %.6s.", pTimeString); |
| pmic | 50:84723ac07ea5 | 169 | } |
| pmic | 50:84723ac07ea5 | 170 | |
| pmic | 50:84723ac07ea5 | 171 | if (pGnss->getNmeaItem(9, buffer, length, elevation)) // altitude msl [m] |
| pmic | 50:84723ac07ea5 | 172 | { |
| pmic | 50:84723ac07ea5 | 173 | gotElevation = true; |
| pmic | 50:84723ac07ea5 | 174 | printf("\nGNSS: elevation: %.1f.", elevation); |
| pmic | 50:84723ac07ea5 | 175 | } |
| pmic | 50:84723ac07ea5 | 176 | } |
| pmic | 50:84723ac07ea5 | 177 | else if (_CHECK_TALKER("VTG")) |
| pmic | 50:84723ac07ea5 | 178 | { |
| pmic | 50:84723ac07ea5 | 179 | if (pGnss->getNmeaItem(7, buffer, length, speed)) // speed [km/h] |
| pmic | 50:84723ac07ea5 | 180 | { |
| pmic | 50:84723ac07ea5 | 181 | gotSpeed = true; |
| pmic | 50:84723ac07ea5 | 182 | printf("\nGNSS: speed: %.1f.", speed); |
| pmic | 50:84723ac07ea5 | 183 | } |
| pmic | 50:84723ac07ea5 | 184 | } |
| pmic | 50:84723ac07ea5 | 185 | } |
| pmic | 50:84723ac07ea5 | 186 | } |
| pmic | 50:84723ac07ea5 | 187 | } |
| pmic | 50:84723ac07ea5 | 188 | |
| pmic | 51:6a158dcc7457 | 189 | thread_sleep_for(1000); //wait_ms(1000); |
| pmic | 50:84723ac07ea5 | 190 | } |
| pmic | 50:84723ac07ea5 | 191 | |
| pmic | 50:84723ac07ea5 | 192 | printf("\n"); |
| pmic | 50:84723ac07ea5 | 193 | |
| pmic | 50:84723ac07ea5 | 194 | // Depending on antenna positioning we may not be able to get a GNSS fix but we |
| pmic | 50:84723ac07ea5 | 195 | // should at least be able to receive the time from a satellite |
| pmic | 51:6a158dcc7457 | 196 | //TEST_ASSERT(gotTime); |
| pmic | 50:84723ac07ea5 | 197 | } |
| pmic | 50:84723ac07ea5 | 198 | |
| pmic | 50:84723ac07ea5 | 199 | int main() { |
| pmic | 50:84723ac07ea5 | 200 | |
| pmic | 51:6a158dcc7457 | 201 | DigitalOut user_led(LED1); // create DigitalOut object to command user led |
| pmic | 51:6a158dcc7457 | 202 | |
| pmic | 51:6a158dcc7457 | 203 | test_serial_time(); |
| pmic | 51:6a158dcc7457 | 204 | |
| pmic | 51:6a158dcc7457 | 205 | while (true) { |
| pmic | 51:6a158dcc7457 | 206 | printf(" main ended\r\n"); |
| pmic | 51:6a158dcc7457 | 207 | user_led = !user_led; |
| pmic | 51:6a158dcc7457 | 208 | thread_sleep_for(1000); |
| pmic | 51:6a158dcc7457 | 209 | } |
| pmic | 50:84723ac07ea5 | 210 | } |
| pmic | 50:84723ac07ea5 | 211 | |
| pmic | 50:84723ac07ea5 | 212 | // End Of File |
| pmic | 50:84723ac07ea5 | 213 | |
| pmic | 50:84723ac07ea5 | 214 | |
| pmic | 50:84723ac07ea5 | 215 | /* |
| pmic | 36:8c75783c1eca | 216 | #include <mbed.h> |
| pmic | 36:8c75783c1eca | 217 | |
| pmic | 41:1627f3e4640d | 218 | // GNSS and Compass test programm for Mateksys GNSS&Compass M9N-5883 |
| pmic | 40:1581715116a8 | 219 | |
| pmic | 43:f459f6efaf5c | 220 | // #include "Eigen/Dense.h" |
| pmic | 43:f459f6efaf5c | 221 | #include "QMC5883L.h" |
| pmic | 43:f459f6efaf5c | 222 | #include "LinearCharacteristics.h" |
| pmic | 49:76fcaffb92ef | 223 | #include "NEOM9N.h" |
| pmic | 6:e1fa1a2d7483 | 224 | |
| pmic | 24:86f1a63e35a0 | 225 | // logical variable main task |
| pmic | 45:5d65b27c9293 | 226 | bool do_execute_main_task = true; // this variable will be toggled via the user button (blue button) to or not to execute the main task |
| pmic | 17:c19b471f05cb | 227 | |
| pmic | 24:86f1a63e35a0 | 228 | // user button on nucleo board |
| pmic | 24:86f1a63e35a0 | 229 | Timer user_button_timer; // create Timer object which we use to check if user button was pressed for a certain time (robust against signal bouncing) |
| pmic | 24:86f1a63e35a0 | 230 | InterruptIn user_button(PC_13); // create InterruptIn interface object to evaluate user button falling and rising edge (no blocking code in ISR) |
| pmic | 24:86f1a63e35a0 | 231 | void user_button_pressed_fcn(); // custom functions which gets executed when user button gets pressed and released, definition below |
| pmic | 24:86f1a63e35a0 | 232 | void user_button_released_fcn(); |
| pmic | 6:e1fa1a2d7483 | 233 | |
| pmic | 1:93d997d6b232 | 234 | int main() |
| pmic | 23:26b3a25fc637 | 235 | { |
| pmic | 36:8c75783c1eca | 236 | // while loop gets executed every main_task_period_ms milliseconds |
| pmic | 47:c74d09a252d4 | 237 | const int main_task_period_ms = 100; // define main task period time in ms e.g. 50 ms -> main task runns 20 times per second |
| pmic | 36:8c75783c1eca | 238 | Timer main_task_timer; // create Timer object which we use to run the main task every main task period time in ms |
| pmic | 36:8c75783c1eca | 239 | |
| pmic | 36:8c75783c1eca | 240 | // led on nucleo board |
| pmic | 36:8c75783c1eca | 241 | DigitalOut user_led(LED1); // create DigitalOut object to command user led |
| pmic | 36:8c75783c1eca | 242 | |
| pmic | 43:f459f6efaf5c | 243 | // create QMC5883L compass object |
| pmic | 47:c74d09a252d4 | 244 | I2C i2c(PB_9, PB_8); // I2C1 |
| pmic | 43:f459f6efaf5c | 245 | QMC5883L mag(i2c); |
| pmic | 43:f459f6efaf5c | 246 | LinearCharacteristics raw_mx2mx, raw_my2my, raw_mz2mz; |
| pmic | 43:f459f6efaf5c | 247 | raw_mx2mx.setup(0.9991f, 0.0088f); |
| pmic | 43:f459f6efaf5c | 248 | raw_my2my.setup(0.9982f, 0.2092f); |
| pmic | 43:f459f6efaf5c | 249 | raw_mz2mz.setup(1.0027f, -0.0903f); |
| pmic | 43:f459f6efaf5c | 250 | float mag_val[3] = {0.0f, 0.0f, 0.0f}; |
| pmic | 47:c74d09a252d4 | 251 | |
| pmic | 47:c74d09a252d4 | 252 | // create object for GNSS Sensor NEO-M9N |
| pmic | 49:76fcaffb92ef | 253 | NEOM9N neom9n(PA_9, PA_10); // UART1 |
| pmic | 48:77009dca23a8 | 254 | //NEOM9N neom9n(PA_2, PA_3); // UART2 |
| pmic | 36:8c75783c1eca | 255 | |
| pmic | 24:86f1a63e35a0 | 256 | // attach button fall and rise functions to user button object |
| pmic | 24:86f1a63e35a0 | 257 | user_button.fall(&user_button_pressed_fcn); |
| pmic | 24:86f1a63e35a0 | 258 | user_button.rise(&user_button_released_fcn); |
| pmic | 17:c19b471f05cb | 259 | |
| pmic | 29:d6f1ccf42a31 | 260 | // start timer |
| pmic | 24:86f1a63e35a0 | 261 | main_task_timer.start(); |
| pmic | 6:e1fa1a2d7483 | 262 | |
| pmic | 24:86f1a63e35a0 | 263 | while (true) { // this loop will run forever |
| pmic | 6:e1fa1a2d7483 | 264 | |
| pmic | 24:86f1a63e35a0 | 265 | main_task_timer.reset(); |
| pmic | 6:e1fa1a2d7483 | 266 | |
| pmic | 43:f459f6efaf5c | 267 | mag.readMag(); |
| pmic | 43:f459f6efaf5c | 268 | |
| pmic | 24:86f1a63e35a0 | 269 | if (do_execute_main_task) { |
| pmic | 17:c19b471f05cb | 270 | |
| pmic | 43:f459f6efaf5c | 271 | mag_val[0] = raw_mx2mx.evaluate(mag.magX()); |
| pmic | 43:f459f6efaf5c | 272 | mag_val[1] = raw_my2my.evaluate(mag.magY()); |
| pmic | 43:f459f6efaf5c | 273 | mag_val[2] = raw_mz2mz.evaluate(mag.magZ()); |
| pmic | 9:f10b974d01e0 | 274 | |
| pmic | 1:93d997d6b232 | 275 | } else { |
| pmic | 6:e1fa1a2d7483 | 276 | |
| pmic | 43:f459f6efaf5c | 277 | for (uint8_t i = 0; i <= 3; i++) { |
| pmic | 43:f459f6efaf5c | 278 | mag_val[i] = 0; |
| pmic | 43:f459f6efaf5c | 279 | } |
| pmic | 6:e1fa1a2d7483 | 280 | |
| pmic | 1:93d997d6b232 | 281 | } |
| pmic | 6:e1fa1a2d7483 | 282 | |
| pmic | 24:86f1a63e35a0 | 283 | user_led = !user_led; |
| pmic | 24:86f1a63e35a0 | 284 | |
| pmic | 24:86f1a63e35a0 | 285 | // do only output via serial what's really necessary (this makes your code slow) |
| pmic | 48:77009dca23a8 | 286 | printf("%f, %f, %f\r\n", mag_val[0], mag_val[1], mag_val[2]); |
| pmic | 49:76fcaffb92ef | 287 | printf("GPS time: %d, num sat: %d, lat: %d, lon: %d, speed: %d, heading: %d\r\n", neom9n.actualPVT.itow, neom9n.actualPVT.numSV, neom9n.actualPVT.lat, neom9n.actualPVT.lon, neom9n.actualPVT.speed, neom9n.actualPVT.headMot); |
| pmic | 17:c19b471f05cb | 288 | |
| pmic | 24:86f1a63e35a0 | 289 | // read timer and make the main thread sleep for the remaining time span (non blocking) |
| pmic | 24:86f1a63e35a0 | 290 | int main_task_elapsed_time_ms = std::chrono::duration_cast<std::chrono::milliseconds>(main_task_timer.elapsed_time()).count(); |
| pmic | 24:86f1a63e35a0 | 291 | thread_sleep_for(main_task_period_ms - main_task_elapsed_time_ms); |
| pmic | 1:93d997d6b232 | 292 | } |
| pmic | 1:93d997d6b232 | 293 | } |
| pmic | 6:e1fa1a2d7483 | 294 | |
| pmic | 24:86f1a63e35a0 | 295 | void user_button_pressed_fcn() |
| pmic | 25:ea1d6e27c895 | 296 | { |
| pmic | 26:28693b369945 | 297 | user_button_timer.start(); |
| pmic | 6:e1fa1a2d7483 | 298 | user_button_timer.reset(); |
| pmic | 6:e1fa1a2d7483 | 299 | } |
| pmic | 6:e1fa1a2d7483 | 300 | |
| pmic | 24:86f1a63e35a0 | 301 | void user_button_released_fcn() |
| pmic | 6:e1fa1a2d7483 | 302 | { |
| pmic | 24:86f1a63e35a0 | 303 | // read timer and toggle do_execute_main_task if the button was pressed longer than the below specified time |
| pmic | 24:86f1a63e35a0 | 304 | int user_button_elapsed_time_ms = std::chrono::duration_cast<std::chrono::milliseconds>(user_button_timer.elapsed_time()).count(); |
| pmic | 6:e1fa1a2d7483 | 305 | user_button_timer.stop(); |
| pmic | 24:86f1a63e35a0 | 306 | if (user_button_elapsed_time_ms > 200) { |
| pmic | 24:86f1a63e35a0 | 307 | do_execute_main_task = !do_execute_main_task; |
| pmic | 8:9bb806a7f585 | 308 | } |
| pmic | 50:84723ac07ea5 | 309 | } |
| pmic | 50:84723ac07ea5 | 310 | */ |