diff --git a/examples/Dead_Reckoning/Example8_getNAVPVAT/Example8_getNAVPVAT.ino b/examples/Dead_Reckoning/Example8_getNAVPVAT/Example8_getNAVPVAT.ino new file mode 100644 index 0000000..cc8e6e4 --- /dev/null +++ b/examples/Dead_Reckoning/Example8_getNAVPVAT/Example8_getNAVPVAT.ino @@ -0,0 +1,111 @@ +/* + By: Paul CLark + SparkFun Electronics + Date: January, 2022 + License: MIT. See license file for more information but you can + basically do whatever you want with this code. + + Feel like supporting open source hardware? + Buy a board from SparkFun! + ZED-F9R: https://www.sparkfun.com/products/16344 + + Hardware Connections: + Plug a Qwiic cable into the GNSS and a Redboard Qwiic + If you don't have a platform with a Qwiic connection use the + SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425) + Open the serial monitor at 115200 baud to see the output + + After calibrating the module and securing it to your vehicle such that it's + stable within 2 degrees, and the board is oriented correctly with regards to + the vehicle's frame, you can now read the vehicle's "attitude". The attitude + includes the vehicle's heading, pitch, and roll. + +*/ + +#include //Needed for I2C to GNSS + +#include //http://librarymanager/All#SparkFun_u-blox_GNSS +SFE_UBLOX_GNSS myGNSS; + +void setup() +{ + Serial.begin(115200); + while (!Serial); //Wait for user to open terminal + Serial.println(F("SparkFun u-blox Example")); + + Wire.begin(); + + if (myGNSS.begin() == false) //Connect to the u-blox module using Wire port + { + Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing.")); + while (1); + } + + myGNSS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise) +} + +void loop() +{ + // PVAT data is produced at the navigation rate, so by default we'll get fresh data once per second + if (myGNSS.getNAVPVAT()) // Poll new PVAT + { + Serial.print(F("Roll: ")); + Serial.print((float)myGNSS.getVehicleRoll() / 100000.0, 5); // Use the helper function to get the roll in degrees * 10^-5 + + Serial.print(F(" Pitch: ")); + Serial.print((float)myGNSS.getVehiclePitch() / 100000.0, 5); // Use the helper function to get the pitch in degrees * 10^-5 + + Serial.print(F(" Heading: ")); + Serial.print((float)myGNSS.getVehicleHeading() / 100000.0, 5); // Use the helper function to get the heading in degrees * 10^-5 + + // We don't have helper functions to extract the roll, pitch and heading valid flags from the PVAT message. But we can do it manually: + + Serial.print(F(" Roll Valid: ")); + Serial.print(myGNSS.packetUBXNAVPVAT->data.flags.bits.vehRollValid); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.vehRollValid = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + Serial.print(F(" Pitch Valid: ")); + Serial.print(myGNSS.packetUBXNAVPVAT->data.flags.bits.vehPitchValid); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.vehPitchValid = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + Serial.print(F(" Heading Valid: ")); + Serial.print(myGNSS.packetUBXNAVPVAT->data.flags.bits.vehHeadingValid); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.vehHeadingValid = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + // We don't have helper functions to extract the roll, pitch and heading accuracy from the PVAT message. But we can do it manually: + + Serial.print(F(" Roll Acc: ")); + Serial.print(((float)myGNSS.packetUBXNAVPVAT->data.accRoll) / 100, 2); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried2.bits.accRoll = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + Serial.print(F(" Pitch Acc: ")); + Serial.print(((float)myGNSS.packetUBXNAVPVAT->data.accPitch) / 100, 2); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried2.bits.accPitch = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + Serial.print(F(" Heading Acc: ")); + Serial.print(((float)myGNSS.packetUBXNAVPVAT->data.accHeading) / 100, 2); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried2.bits.accHeading = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + // We don't have helper functions to extract the lat and lon from the PVAT message. But we can do it manually: + + Serial.print(F(" Lat: ")); + Serial.print(((float)myGNSS.packetUBXNAVPVAT->data.lat) / 10000000.0, 7); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.lat = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + Serial.print(F(" Lon: ")); + Serial.print(((float)myGNSS.packetUBXNAVPVAT->data.lon) / 10000000.0, 7); + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.lon = false; // Mark the data as stale + myGNSS.packetUBXNAVPVAT->moduleQueried.moduleQueried1.bits.all = false; + + Serial.println(); + } + + delay(250); +}