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.
RTOS-Threads/src/Task1.cpp
- Committer:
- pHysiX
- Date:
- 2014-05-03
- Revision:
- 15:10edc6b12122
- Parent:
- 12:953d25061417
- Child:
- 16:9072cd6fa8d1
File content as of revision 15:10edc6b12122:
/* YPR (100Hz) */ #include "Task1.h" #include "setup.h" /* MPU6050 control/status variables: */ uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer /* Orientation/motion variables: */ Quaternion q; // [w, x, y, z] quaternion container VectorFloat gravity; // [x, y, z] gravity vector float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector volatile float ypr_use[3]; #ifdef ENABLE_COMPASS //int compassX, compassY, compassZ; double heading = 0; #endif float altitude, temperature; int counterTask1 = 0; #ifndef M_PI #define M_PI 3.1415 #endif // ================================================================ // === YPR ROUTINE === // ================================================================ void Task1(void const *argument) { // reset interrupt flag and get INT_STATUS byte mpuIntStatus = imu.getIntStatus(); // get current FIFO count fifoCount = imu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount > 1023) { // reset so we can continue cleanly imu.resetFIFO(); imu.debugSerial.printf("FIFO overflow!"); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = imu.getFIFOCount(); // read a packet from FIFO imu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is > 1 packet available // (this lets us immediately read more without waiting for an interrupt) //fifoCount -= packetSize; // display YPR angles in degrees imu.dmpGetQuaternion(&q, fifoBuffer); imu.dmpGetGravity(&gravity, &q); imu.dmpGetYawPitchRoll(ypr, &q, &gravity); ypr_use[0] = ypr[0] * 180/M_PI; ypr_use[1] = ypr[1] * 180/M_PI; ypr_use[2] = ypr[2] * 180/M_PI; /* if (compass.getDataReady()) { // compass.getValues(&compass_x, &compass_y, &compass_z); heading = compass.getHeadingXY() * 180/M_PI; } ypr[0] *= 0.98; ypr[0] += 0.02*heading; */ if (box_demo) BT.printf("\nY%3.2f\nP%3.2f\nR%3.2f\n", ypr_use[0] - ypr_offset[0], ypr_use[1] - ypr_offset[1], ypr_use[2] - ypr_offset[2]); } //LED[1] = !LED[1]; }