Ian Hua / Quadcopter-mbedRTOS
Committer:
pHysiX
Date:
Sat May 10 01:39:02 2014 +0000
Revision:
27:18b6580eb0b1
Parent:
26:4a3323ee36d5
Child:
30:d9b988f8d84f
Alternative1: Run Master only when YPR is updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pHysiX 27:18b6580eb0b1 1 /* File: Task2_Slave.cpp
pHysiX 22:ef8aa9728013 2 * Author: Trung Tin Ian HUA
pHysiX 22:ef8aa9728013 3 * Date: May 2014
pHysiX 22:ef8aa9728013 4 * Purpose: Thread2: Gyro sample and PID Control loop
pHysiX 22:ef8aa9728013 5 * Settings: 200Hz
pHysiX 25:a7cfe421cb4a 6 */
pHysiX 2:ab967d7b4346 7
pHysiX 26:4a3323ee36d5 8 #include "Task2_Slave.h"
pHysiX 1:43f8ac7ca6d7 9 #include "setup.h"
pHysiX 3:605fbcb54e75 10 #include "PID.h"
pHysiX 3:605fbcb54e75 11
pHysiX 21:b642c18eccd1 12 /* YPR Adjust */
pHysiX 21:b642c18eccd1 13 volatile float adjust[3] = {0.0, 0.0, 0.0};
pHysiX 21:b642c18eccd1 14
pHysiX 3:605fbcb54e75 15 int16_t gx, gy, gz;
pHysiX 10:ef5fe86f67fe 16 volatile int gyro[3] = {0, 0, 0};
pHysiX 10:ef5fe86f67fe 17
pHysiX 10:ef5fe86f67fe 18 bool counterESC = false;
pHysiX 1:43f8ac7ca6d7 19
pHysiX 27:18b6580eb0b1 20 void Task2_Slave(void const *argument)
pHysiX 1:43f8ac7ca6d7 21 {
pHysiX 21:b642c18eccd1 22 imu.getRotation(&gx, &gy, &gz);
pHysiX 21:b642c18eccd1 23 gyro[0] = gx + 60;
pHysiX 21:b642c18eccd1 24 gyro[1] = gy - 15;
pHysiX 21:b642c18eccd1 25 gyro[2] = gz + 25;
pHysiX 17:18c3bd016e49 26
pHysiX 21:b642c18eccd1 27 for (int i = 0; i < 3; i++)
pHysiX 21:b642c18eccd1 28 gyro[i] /= (float) 32.8;
pHysiX 17:18c3bd016e49 29
pHysiX 27:18b6580eb0b1 30 yawPIDrate.setSetPoint(inputYPR[0]);
pHysiX 25:a7cfe421cb4a 31
pHysiX 25:a7cfe421cb4a 32 switch (mode) {
pHysiX 25:a7cfe421cb4a 33 case RATE:
pHysiX 25:a7cfe421cb4a 34 pitchPIDrate.setSetPoint(inputYPR[1]);
pHysiX 25:a7cfe421cb4a 35 rollPIDrate.setSetPoint(inputYPR[2]);
pHysiX 25:a7cfe421cb4a 36
pHysiX 25:a7cfe421cb4a 37 yawPIDrate.setProcessValue(gyro[2]);
pHysiX 25:a7cfe421cb4a 38 pitchPIDrate.setProcessValue(gyro[1]);
pHysiX 25:a7cfe421cb4a 39 rollPIDrate.setProcessValue(gyro[0]);
pHysiX 17:18c3bd016e49 40
pHysiX 25:a7cfe421cb4a 41 adjust[0] = yawPIDrate.compute();
pHysiX 25:a7cfe421cb4a 42 adjust[1] = pitchPIDrate.compute();
pHysiX 25:a7cfe421cb4a 43 adjust[2] = rollPIDrate.compute();
pHysiX 25:a7cfe421cb4a 44
pHysiX 25:a7cfe421cb4a 45 counterESC = true;
pHysiX 25:a7cfe421cb4a 46 break;
pHysiX 25:a7cfe421cb4a 47
pHysiX 27:18b6580eb0b1 48 case ATTITUDE:
pHysiX 25:a7cfe421cb4a 49 default:
pHysiX 27:18b6580eb0b1 50 pitchPIDrate.setSetPoint(adjust_attitude[1]);
pHysiX 27:18b6580eb0b1 51 rollPIDrate.setSetPoint(adjust_attitude[2]);
pHysiX 5:4879ef0e6d41 52
pHysiX 25:a7cfe421cb4a 53 yawPIDrate.setProcessValue(gyro[2]);
pHysiX 25:a7cfe421cb4a 54 pitchPIDrate.setProcessValue(gyro[1]);
pHysiX 25:a7cfe421cb4a 55 rollPIDrate.setProcessValue(gyro[0]);
pHysiX 5:4879ef0e6d41 56
pHysiX 25:a7cfe421cb4a 57 adjust[0] = yawPIDrate.compute();
pHysiX 25:a7cfe421cb4a 58 adjust[1] = pitchPIDrate.compute();
pHysiX 25:a7cfe421cb4a 59 adjust[2] = rollPIDrate.compute();
pHysiX 21:b642c18eccd1 60
pHysiX 25:a7cfe421cb4a 61 counterESC = true;
pHysiX 25:a7cfe421cb4a 62 break;
pHysiX 25:a7cfe421cb4a 63 }
pHysiX 11:f9fd410c48c2 64
pHysiX 21:b642c18eccd1 65 if (adjust_check)
pHysiX 21:b642c18eccd1 66 BT.printf("%3.4f %3.4f %3.4f\n", adjust[0], adjust[1], adjust[2]);
pHysiX 21:b642c18eccd1 67
pHysiX 10:ef5fe86f67fe 68 if (gyro_out)
pHysiX 21:b642c18eccd1 69 BT.printf("%3d %3d %3d\n", (int) gyro[0], (int) gyro[1], (int) gyro[2]);
pHysiX 21:b642c18eccd1 70 }