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/Task2_Slave.cpp
- Committer:
- pHysiX
- Date:
- 2014-05-13
- Revision:
- 36:d95e3d6f2fc4
- Parent:
- 34:228d87c45151
- Child:
- 38:ef65533cca32
File content as of revision 36:d95e3d6f2fc4:
/* File: Task2_Slave.cpp * Author: Trung Tin Ian HUA * Date: May 2014 * Purpose: Thread2S: Slave PID control loop (rate) * Functions: Gyro sample * Settings: 400Hz * Timing: 290us */ #include "Task2_Slave.h" #include "setup.h" #include "PID.h" /* YPR Adjust */ volatile float adjust[3] = {0.0, 0.0, 0.0}; int16_t gx, gy, gz; volatile int gyro[3] = {0, 0, 0}; bool counterESC = false; // =============================== // === GYRO SAMPLE & SLAVE PID === // =============================== //Timer void Task2_Slave(void const *argument) { //Timer gyroSample(); //Timer if (armed) { yawPIDrate.setSetPoint(inputYPR[0]); switch (mode) { case RATE: pitchPIDrate.setSetPoint(inputYPR[1]); rollPIDrate.setSetPoint(inputYPR[2]); yawPIDrate.setProcessValue(gyro[2]); pitchPIDrate.setProcessValue(gyro[1]); rollPIDrate.setProcessValue(gyro[0]); adjust[0] = yawPIDrate.compute(); adjust[1] = pitchPIDrate.compute(); adjust[2] = rollPIDrate.compute(); counterESC = true; break; case ATTITUDE: default: pitchPIDrate.setSetPoint(adjust_attitude[1]); rollPIDrate.setSetPoint(adjust_attitude[2]); yawPIDrate.setProcessValue(gyro[2]); pitchPIDrate.setProcessValue(gyro[1]); rollPIDrate.setProcessValue(gyro[0]); adjust[0] = yawPIDrate.compute(); adjust[1] = pitchPIDrate.compute(); adjust[2] = rollPIDrate.compute(); counterESC = true; break; } //Timer } //Timer } // ************************ // *** Helper functions *** // ************************ void gyroSample(void) { imu.getRotation(&gx, &gy, &gz); gyro[0] = gx + 60; gyro[1] = gy - 15; gyro[2] = gz + 25; for (int i = 0; i < 3; i++) gyro[i] /= (float) 32.8; }