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.
Dependencies: mbed
P.h@4:208f5279143a, 2019-03-23 (annotated)
- Committer:
- mazdo25
- Date:
- Sat Mar 23 19:46:09 2019 +0000
- Revision:
- 4:208f5279143a
latest working, but line following not;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mazdo25 | 4:208f5279143a | 1 | |
| mazdo25 | 4:208f5279143a | 2 | class P |
| mazdo25 | 4:208f5279143a | 3 | { |
| mazdo25 | 4:208f5279143a | 4 | private: |
| mazdo25 | 4:208f5279143a | 5 | float inMin; |
| mazdo25 | 4:208f5279143a | 6 | float inMax; |
| mazdo25 | 4:208f5279143a | 7 | |
| mazdo25 | 4:208f5279143a | 8 | float control; |
| mazdo25 | 4:208f5279143a | 9 | |
| mazdo25 | 4:208f5279143a | 10 | float outMin; |
| mazdo25 | 4:208f5279143a | 11 | float outMax; |
| mazdo25 | 4:208f5279143a | 12 | |
| mazdo25 | 4:208f5279143a | 13 | float gain; |
| mazdo25 | 4:208f5279143a | 14 | float prevCA; |
| mazdo25 | 4:208f5279143a | 15 | float controlAction; |
| mazdo25 | 4:208f5279143a | 16 | |
| mazdo25 | 4:208f5279143a | 17 | public: |
| mazdo25 | 4:208f5279143a | 18 | P(float G) |
| mazdo25 | 4:208f5279143a | 19 | { |
| mazdo25 | 4:208f5279143a | 20 | gain = G; |
| mazdo25 | 4:208f5279143a | 21 | outMin = 0.0f; |
| mazdo25 | 4:208f5279143a | 22 | outMax = 1.0f; |
| mazdo25 | 4:208f5279143a | 23 | control = 0; |
| mazdo25 | 4:208f5279143a | 24 | } |
| mazdo25 | 4:208f5279143a | 25 | |
| mazdo25 | 4:208f5279143a | 26 | void setInputLimits(int inMin_, int inMax_) |
| mazdo25 | 4:208f5279143a | 27 | { |
| mazdo25 | 4:208f5279143a | 28 | if (inMin_ > inMax_) {return;} //cant be true can it |
| mazdo25 | 4:208f5279143a | 29 | inMin = inMin_; |
| mazdo25 | 4:208f5279143a | 30 | inMax = inMax_; |
| mazdo25 | 4:208f5279143a | 31 | } |
| mazdo25 | 4:208f5279143a | 32 | |
| mazdo25 | 4:208f5279143a | 33 | void setInMax(float inMax_) |
| mazdo25 | 4:208f5279143a | 34 | { |
| mazdo25 | 4:208f5279143a | 35 | inMax = inMax_; |
| mazdo25 | 4:208f5279143a | 36 | } |
| mazdo25 | 4:208f5279143a | 37 | |
| mazdo25 | 4:208f5279143a | 38 | float returnPrevCA() |
| mazdo25 | 4:208f5279143a | 39 | { |
| mazdo25 | 4:208f5279143a | 40 | return prevCA; |
| mazdo25 | 4:208f5279143a | 41 | } |
| mazdo25 | 4:208f5279143a | 42 | |
| mazdo25 | 4:208f5279143a | 43 | void setOutputLimits(float outMin_, float outMax_) |
| mazdo25 | 4:208f5279143a | 44 | { |
| mazdo25 | 4:208f5279143a | 45 | if (outMin_ > outMax_) {return;} |
| mazdo25 | 4:208f5279143a | 46 | outMin = outMin_; |
| mazdo25 | 4:208f5279143a | 47 | outMax = outMax_; |
| mazdo25 | 4:208f5279143a | 48 | } |
| mazdo25 | 4:208f5279143a | 49 | |
| mazdo25 | 4:208f5279143a | 50 | float compute(float curVal_) |
| mazdo25 | 4:208f5279143a | 51 | { |
| mazdo25 | 4:208f5279143a | 52 | //if the measured value is greater than the measured amount, then clearly the limits are offfffffffffffffff |
| mazdo25 | 4:208f5279143a | 53 | if (curVal_ > inMax) {inMax=curVal_;} |
| mazdo25 | 4:208f5279143a | 54 | if (curVal_ < inMin) {inMin=curVal_;} |
| mazdo25 | 4:208f5279143a | 55 | controlAction = ((control-curVal_)*gain); //amplify the error by the gain |
| mazdo25 | 4:208f5279143a | 56 | if (controlAction > inMax ) {controlAction = inMax;} |
| mazdo25 | 4:208f5279143a | 57 | if (controlAction < inMin) {controlAction = inMin;} |
| mazdo25 | 4:208f5279143a | 58 | float prevCATemp = prevCA; |
| mazdo25 | 4:208f5279143a | 59 | prevCA = controlAction; |
| mazdo25 | 4:208f5279143a | 60 | controlAction += prevCATemp; |
| mazdo25 | 4:208f5279143a | 61 | return (((controlAction-inMin)/(inMax - inMin))*(outMax-outMin))+outMin; //scales temp to the correct output Limits |
| mazdo25 | 4:208f5279143a | 62 | } |
| mazdo25 | 4:208f5279143a | 63 | |
| mazdo25 | 4:208f5279143a | 64 | void setControl(float wantedVal_) |
| mazdo25 | 4:208f5279143a | 65 | { |
| mazdo25 | 4:208f5279143a | 66 | if (wantedVal_ > inMax) {control = inMax;} |
| mazdo25 | 4:208f5279143a | 67 | else if (wantedVal_ < inMin) {control = inMin;} |
| mazdo25 | 4:208f5279143a | 68 | else {control = wantedVal_;} |
| mazdo25 | 4:208f5279143a | 69 | } |
| mazdo25 | 4:208f5279143a | 70 | |
| mazdo25 | 4:208f5279143a | 71 | float returnControl(void) |
| mazdo25 | 4:208f5279143a | 72 | { |
| mazdo25 | 4:208f5279143a | 73 | return control; |
| mazdo25 | 4:208f5279143a | 74 | } |
| mazdo25 | 4:208f5279143a | 75 | |
| mazdo25 | 4:208f5279143a | 76 | float returnInMax() |
| mazdo25 | 4:208f5279143a | 77 | { |
| mazdo25 | 4:208f5279143a | 78 | return inMax; |
| mazdo25 | 4:208f5279143a | 79 | } |
| mazdo25 | 4:208f5279143a | 80 | |
| mazdo25 | 4:208f5279143a | 81 | }; |