Cristi Stoican / Mbed 2 deprecated Migration

Dependencies:   BLE_API mbed nRF51822

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ControllerFactory.cpp Source File

ControllerFactory.cpp

00001 
00002 #include "ControllerFactory.hpp"
00003 
00004 
00005 void ControllerFactory::createController (Controller *c, SysObjTypes &ctrlType) {
00006     
00007     switch (ctrlType) {
00008         case P:         //fall-through
00009         case PI:
00010         case PID: {
00011             c = new PIDController();
00012             break; 
00013         }
00014         case RST: {
00015             //c = new RST::RST();
00016             break;
00017         }
00018         default: c = 0;
00019     }
00020 }
00021 
00022 void ControllerFactory::createControllerParams (ControllerParams &cp, SysObjTypes &ctrlType, float *paramsList, int paramsListLen) {
00023     /*
00024         paramsList form: {
00025             P: [kp] 
00026             PI: [kp, ti]
00027             PID: [kp, ti, td]
00028             RST: [nR,r0,r1,...,r_nR,nS,s0,s1,...,s_nS,nT,t0,t1,...,t_nT]
00029         }
00030         cond: paramsListLen = nR + nS + nT + 6
00031     */
00032     switch (ctrlType) {
00033         case P: {
00034             cp.kp = *paramsList;
00035             cp.ti = 0;
00036             cp.td = 0;
00037             break;
00038         }
00039         case PI: {
00040             cp.kp = *paramsList;
00041             cp.ti = paramsList[1];
00042             cp.td = 0;
00043             break;
00044         }
00045         case PID: {
00046             cp.kp = *paramsList;
00047             cp.ti = paramsList[1];
00048             cp.td = paramsList[2];
00049             break;
00050         }
00051         case RST: {
00052             int i;
00053             cp.ordR = *paramsList;
00054             cp.R = new float[cp.ordR+1];
00055             for (i=1; i<cp.ordR+2;i++) {
00056                 cp.R[i] = paramsList[i];
00057             }
00058             cp.ordS = paramsList[i];
00059             cp.S = new float[cp.ordS+1];
00060             for (i=cp.ordR+2; i<cp.ordR+cp.ordS+3; i++) {
00061                 cp.S[i] = paramsList[i];        
00062             }
00063             cp.ordT = paramsList[i];
00064             cp.T = new float[cp.ordT+1];
00065             for(i=cp.ordR+cp.ordS+3; i<paramsListLen; i++) {
00066                 cp.T[i] = paramsList[i];
00067             }
00068             break;
00069         }
00070     }       
00071 }
00072