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:
- 38:ef65533cca32
- Parent:
- 36:d95e3d6f2fc4
- Child:
- 48:9dbdc4144f00
File content as of revision 38:ef65533cca32:
/* 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 - 8;
for (int i = 0; i < 3; i++)
gyro[i] /= (float) 32.8;
//gyro[2] = deadbandGyroYaw(gyro[2]);
}
float deadbandGyroYaw(float input)
{
if (input > -1.1 && input < 1.1)
return 0.0;
else
return input;
}