State machine
Dependencies: HIDScope QEI biquadFilter mbed
Fork of State_machine by
main.cpp@5:e96d03bd557c, 2018-11-01 (annotated)
- Committer:
- Wabbitdrawing
- Date:
- Thu Nov 01 14:18:00 2018 +0000
- Revision:
- 5:e96d03bd557c
- Parent:
- 4:dfe39188f2b2
- Child:
- 6:344e075c1221
All constants in a seperate H library;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CasperK | 0:1b2c842eca42 | 1 | #include "mbed.h" |
CasperK | 1:afb820c6fc0d | 2 | #include "QEI.h" |
CasperK | 1:afb820c6fc0d | 3 | #include "HIDScope.h" |
CasperK | 4:dfe39188f2b2 | 4 | //#include "MODSERIAL.h" |
CasperK | 2:3f67b4833256 | 5 | #include "BiQuad.h" |
CasperK | 2:3f67b4833256 | 6 | #include "math.h" |
Wabbitdrawing | 5:e96d03bd557c | 7 | #include "Constants.h |
CasperK | 2:3f67b4833256 | 8 | #define IGNORECOUNT 100 |
CasperK | 1:afb820c6fc0d | 9 | |
CasperK | 0:1b2c842eca42 | 10 | |
CasperK | 4:dfe39188f2b2 | 11 | void positionCalibration() { |
CasperK | 4:dfe39188f2b2 | 12 | while(!button1) { |
CasperK | 4:dfe39188f2b2 | 13 | directionpin1 = true; |
CasperK | 4:dfe39188f2b2 | 14 | pwm_value1 = 0.7f; |
CasperK | 4:dfe39188f2b2 | 15 | } |
CasperK | 4:dfe39188f2b2 | 16 | pwm_value1 = 0.0f; |
CasperK | 4:dfe39188f2b2 | 17 | while(!button2) { |
CasperK | 4:dfe39188f2b2 | 18 | directionpin2 = true; |
CasperK | 4:dfe39188f2b2 | 19 | pwm_value2 = 0.6f; |
CasperK | 4:dfe39188f2b2 | 20 | } |
CasperK | 4:dfe39188f2b2 | 21 | pwm_value2 = 0.0f; |
CasperK | 4:dfe39188f2b2 | 22 | |
CasperK | 4:dfe39188f2b2 | 23 | if(!next_switch) { |
CasperK | 4:dfe39188f2b2 | 24 | CurrentState = EmgCalibration; |
CasperK | 4:dfe39188f2b2 | 25 | } |
CasperK | 4:dfe39188f2b2 | 26 | } |
CasperK | 4:dfe39188f2b2 | 27 | |
CasperK | 4:dfe39188f2b2 | 28 | void CalibrateEMG0(){ // calibrates only one muscle activities as testing concluded that it was unnessecary to do this for all muscles. |
CasperK | 4:dfe39188f2b2 | 29 | ledred = !ledred; |
CasperK | 4:dfe39188f2b2 | 30 | int C = 500; // half a second at 1000Hz |
CasperK | 4:dfe39188f2b2 | 31 | double A0=0, A1=0, A2=0, A3=0, A4=0; |
CasperK | 4:dfe39188f2b2 | 32 | double emg0FiAbs; |
CasperK | 4:dfe39188f2b2 | 33 | while (C > 0){ |
CasperK | 4:dfe39188f2b2 | 34 | emg0FiAbs = fabs( emg1bqc.step(emg1.read())); |
CasperK | 4:dfe39188f2b2 | 35 | if (C==500){ //first instance make all values the first in case this is the highest |
CasperK | 4:dfe39188f2b2 | 36 | A0=A1=A2=A3=A4=emg0FiAbs; |
CasperK | 4:dfe39188f2b2 | 37 | } |
CasperK | 4:dfe39188f2b2 | 38 | else if(emg0FiAbs > A0){ // if there is a higher value change the inputs to be the highest 5 |
CasperK | 4:dfe39188f2b2 | 39 | A4=A3; |
CasperK | 4:dfe39188f2b2 | 40 | A3=A2; |
CasperK | 4:dfe39188f2b2 | 41 | A2=A1; |
CasperK | 4:dfe39188f2b2 | 42 | A1=A0; |
CasperK | 4:dfe39188f2b2 | 43 | A0=emg0FiAbs; |
CasperK | 4:dfe39188f2b2 | 44 | } |
CasperK | 4:dfe39188f2b2 | 45 | C--; |
CasperK | 4:dfe39188f2b2 | 46 | wait(0.001f); |
CasperK | 4:dfe39188f2b2 | 47 | } |
CasperK | 4:dfe39188f2b2 | 48 | Calibration0 = (A0+A1+A2+A3+A4)/5*0.4; // average of the 5 highest values x 0,4 to create the threshold |
CasperK | 4:dfe39188f2b2 | 49 | ledred = !ledred; |
CasperK | 4:dfe39188f2b2 | 50 | } |
CasperK | 3:ed4676f76a5c | 51 | |
CasperK | 4:dfe39188f2b2 | 52 | void CalibrateEMG1(){ // calibrates only one muscle activities as testing concluded that it was unnessecary to do this for all muscles. |
CasperK | 4:dfe39188f2b2 | 53 | ledgreen = !ledgreen; |
CasperK | 4:dfe39188f2b2 | 54 | int C = 500; // half a second at 1000Hz |
CasperK | 4:dfe39188f2b2 | 55 | double A0=0, A1=0, A2=0, A3=0, A4=0; |
CasperK | 4:dfe39188f2b2 | 56 | double emg1FiAbs; |
CasperK | 4:dfe39188f2b2 | 57 | while (C > 0){ |
CasperK | 4:dfe39188f2b2 | 58 | emg1FiAbs = fabs( emg1bqc.step(emg1.read())); |
CasperK | 4:dfe39188f2b2 | 59 | if (C==500){ //first instance make all values the first in case this is the highest |
CasperK | 4:dfe39188f2b2 | 60 | A0=A1=A2=A3=A4=emg1FiAbs; |
CasperK | 4:dfe39188f2b2 | 61 | } |
CasperK | 4:dfe39188f2b2 | 62 | else if(emg1FiAbs > A0){ // if there is a higher value change the inputs to be the highest 5 |
CasperK | 4:dfe39188f2b2 | 63 | A4=A3; |
CasperK | 4:dfe39188f2b2 | 64 | A3=A2; |
CasperK | 4:dfe39188f2b2 | 65 | A2=A1; |
CasperK | 4:dfe39188f2b2 | 66 | A1=A0; |
CasperK | 4:dfe39188f2b2 | 67 | A0=emg1FiAbs; |
CasperK | 4:dfe39188f2b2 | 68 | } |
CasperK | 4:dfe39188f2b2 | 69 | C--; |
CasperK | 4:dfe39188f2b2 | 70 | wait(0.001f); |
CasperK | 4:dfe39188f2b2 | 71 | } |
CasperK | 4:dfe39188f2b2 | 72 | Calibration1 = (A0+A1+A2+A3+A4)/5*0.4; // average of the 5 highest values x 0,4 to create the threshold |
CasperK | 4:dfe39188f2b2 | 73 | ledgreen = !ledgreen; |
CasperK | 4:dfe39188f2b2 | 74 | } |
CasperK | 4:dfe39188f2b2 | 75 | |
CasperK | 4:dfe39188f2b2 | 76 | void CalibrateEMG2(){ // calibrates only one muscle activities as testing concluded that it was unnessecary to do this for all muscles. |
CasperK | 4:dfe39188f2b2 | 77 | ledblue = !ledblue; |
CasperK | 4:dfe39188f2b2 | 78 | int C = 500; // half a second at 1000Hz |
CasperK | 4:dfe39188f2b2 | 79 | double A0=0, A1=0, A2=0, A3=0, A4=0; |
CasperK | 4:dfe39188f2b2 | 80 | double emg2FiAbs; |
CasperK | 4:dfe39188f2b2 | 81 | while (C > 0){ |
CasperK | 4:dfe39188f2b2 | 82 | emg2FiAbs = fabs( emg2bqc.step(emg2.read())); |
CasperK | 4:dfe39188f2b2 | 83 | if (C==500){ //first instance make all values the first in case this is the highest |
CasperK | 4:dfe39188f2b2 | 84 | A0=A1=A2=A3=A4=emg2FiAbs; |
CasperK | 4:dfe39188f2b2 | 85 | } |
CasperK | 4:dfe39188f2b2 | 86 | else if(emg2FiAbs > A0){ // if there is a higher value change the inputs to be the highest 5 |
CasperK | 4:dfe39188f2b2 | 87 | A4=A3; |
CasperK | 4:dfe39188f2b2 | 88 | A3=A2; |
CasperK | 4:dfe39188f2b2 | 89 | A2=A1; |
CasperK | 4:dfe39188f2b2 | 90 | A1=A0; |
CasperK | 4:dfe39188f2b2 | 91 | A0=emg2FiAbs; |
CasperK | 4:dfe39188f2b2 | 92 | } |
CasperK | 4:dfe39188f2b2 | 93 | C--; |
CasperK | 4:dfe39188f2b2 | 94 | wait(0.001f); |
CasperK | 4:dfe39188f2b2 | 95 | } |
CasperK | 4:dfe39188f2b2 | 96 | Calibration2 = (A0+A1+A2+A3+A4)/5*0.4; // average of the 5 highest values x 0,4 to create the threshold |
CasperK | 4:dfe39188f2b2 | 97 | ledblue = !ledblue; |
CasperK | 4:dfe39188f2b2 | 98 | } |
CasperK | 4:dfe39188f2b2 | 99 | |
CasperK | 4:dfe39188f2b2 | 100 | bool emg0Filter(void){ |
CasperK | 4:dfe39188f2b2 | 101 | double emg0filteredAbs = fabs( emg0bqc.step(emg0.read())); // Filter and make absolute, |
CasperK | 2:3f67b4833256 | 102 | /* this is the threshhold */ |
CasperK | 4:dfe39188f2b2 | 103 | if (emg0filteredAbs > Calibration0) { // when above threshold set bool to 1, here can the parameters be changed using global variables |
CasperK | 3:ed4676f76a5c | 104 | emg0Bool = 1; |
CasperK | 4:dfe39188f2b2 | 105 | emg0Ignore = IGNORECOUNT; // here is the counter reset to catch sudden jolts |
CasperK | 2:3f67b4833256 | 106 | } |
CasperK | 2:3f67b4833256 | 107 | else if (emg0Ignore < 0){ // if the ignore-counter is down to zero, set the bool back to 0 |
CasperK | 3:ed4676f76a5c | 108 | emg0Bool = 0; |
CasperK | 2:3f67b4833256 | 109 | } |
CasperK | 2:3f67b4833256 | 110 | else { |
CasperK | 2:3f67b4833256 | 111 | emg0Ignore--; // else decrease counter by one each time has passed without threshold being met |
CasperK | 4:dfe39188f2b2 | 112 | } |
CasperK | 2:3f67b4833256 | 113 | return emg0Bool; |
CasperK | 2:3f67b4833256 | 114 | } |
CasperK | 2:3f67b4833256 | 115 | |
CasperK | 2:3f67b4833256 | 116 | bool emg1Filter(void){ |
CasperK | 2:3f67b4833256 | 117 | double emg1filteredAbs = fabs( emg1bqc.step(emg1.read())); // Filter and make absolute |
CasperK | 2:3f67b4833256 | 118 | /* this is the threshhold */ |
CasperK | 4:dfe39188f2b2 | 119 | if (emg1filteredAbs > Calibration1) { // when above threshold set bool to 1 here can the parameters be changed using global variables |
CasperK | 2:3f67b4833256 | 120 | emg1Bool = true; |
CasperK | 2:3f67b4833256 | 121 | emg1Ignore = IGNORECOUNT; // here is the counter increased ( at 1000 Hz, this is 0.1 sec) |
CasperK | 2:3f67b4833256 | 122 | } |
CasperK | 2:3f67b4833256 | 123 | else if (emg1Ignore < 0){ // if the ignore-counter is down to zero, set the bool back to 0 |
CasperK | 2:3f67b4833256 | 124 | emg1Bool = false; |
CasperK | 2:3f67b4833256 | 125 | } |
CasperK | 2:3f67b4833256 | 126 | else { |
CasperK | 2:3f67b4833256 | 127 | emg1Ignore--; // else decrease counter by one each time has passed without threshold being met |
CasperK | 2:3f67b4833256 | 128 | } |
CasperK | 2:3f67b4833256 | 129 | return emg1Bool; |
CasperK | 2:3f67b4833256 | 130 | } |
CasperK | 2:3f67b4833256 | 131 | |
CasperK | 2:3f67b4833256 | 132 | bool emg2Filter(void){ |
CasperK | 2:3f67b4833256 | 133 | double emg2filteredAbs = fabs( emg2bqc.step(emg2.read())); // Filter and make absolute |
CasperK | 2:3f67b4833256 | 134 | /* this is the threshhold */ |
CasperK | 4:dfe39188f2b2 | 135 | if (emg2filteredAbs > Calibration2) { // when above threshold set bool to 1 here can the parameters be changed using global variables |
CasperK | 2:3f67b4833256 | 136 | emg2Bool = true; |
CasperK | 2:3f67b4833256 | 137 | emg2Ignore = IGNORECOUNT; // here is the counter increased ( at 1000 Hz, this is 0.1 sec) |
CasperK | 2:3f67b4833256 | 138 | } |
CasperK | 2:3f67b4833256 | 139 | else if (emg2Ignore < 0){ // if the ignore-counter is down to zero, set the bool back to 0 |
CasperK | 4:dfe39188f2b2 | 140 | emg2Bool = false; |
CasperK | 2:3f67b4833256 | 141 | } |
CasperK | 2:3f67b4833256 | 142 | else { |
CasperK | 2:3f67b4833256 | 143 | emg2Ignore--; // else decrease counter by one each time has passed without threshold being met |
CasperK | 2:3f67b4833256 | 144 | } |
CasperK | 4:dfe39188f2b2 | 145 | |
CasperK | 2:3f67b4833256 | 146 | return emg2Bool; |
CasperK | 2:3f67b4833256 | 147 | } |
CasperK | 2:3f67b4833256 | 148 | |
CasperK | 4:dfe39188f2b2 | 149 | void sample() { |
CasperK | 4:dfe39188f2b2 | 150 | emg0Filter(); |
CasperK | 4:dfe39188f2b2 | 151 | emg1Filter(); |
CasperK | 4:dfe39188f2b2 | 152 | emg2Filter(); |
CasperK | 1:afb820c6fc0d | 153 | |
CasperK | 4:dfe39188f2b2 | 154 | scope.set(0, Calibration0); |
CasperK | 4:dfe39188f2b2 | 155 | scope.set(1, Calibration1); |
CasperK | 4:dfe39188f2b2 | 156 | scope.set(2, Calibration2); |
CasperK | 4:dfe39188f2b2 | 157 | scope.set(3, emg0Bool); |
CasperK | 4:dfe39188f2b2 | 158 | scope.set(4, emg1Bool); |
CasperK | 4:dfe39188f2b2 | 159 | scope.set(5, emg2Bool); |
CasperK | 4:dfe39188f2b2 | 160 | scope.send(); |
CasperK | 1:afb820c6fc0d | 161 | } |
CasperK | 1:afb820c6fc0d | 162 | |
CasperK | 4:dfe39188f2b2 | 163 | void emgCalibration() { |
CasperK | 4:dfe39188f2b2 | 164 | emg0bqc.add( &emg0bq1 ).add( &emg0bq2 ).add ( &emg0bq3 ); // combining biquad chains is done in main, before the ticker, so it happens only once. |
CasperK | 4:dfe39188f2b2 | 165 | emg1bqc.add( &emg1bq1 ).add( &emg1bq2 ).add ( &emg1bq3 ); |
CasperK | 4:dfe39188f2b2 | 166 | emg2bqc.add( &emg2bq1 ).add( &emg2bq2 ).add ( &emg2bq3 ); |
CasperK | 4:dfe39188f2b2 | 167 | |
CasperK | 4:dfe39188f2b2 | 168 | bool u = true; |
CasperK | 4:dfe39188f2b2 | 169 | CalibrationState = EMG0; |
CasperK | 4:dfe39188f2b2 | 170 | while (u){ // !!! this is a place holder for the calibration!!! |
CasperK | 4:dfe39188f2b2 | 171 | switch(CalibrationState) { |
CasperK | 4:dfe39188f2b2 | 172 | case EMG0: |
CasperK | 4:dfe39188f2b2 | 173 | if(!next_switch) { |
CasperK | 4:dfe39188f2b2 | 174 | CalibrateEMG0(); // calibration function |
CasperK | 4:dfe39188f2b2 | 175 | CalibrationState = EMG1; |
CasperK | 4:dfe39188f2b2 | 176 | } |
CasperK | 4:dfe39188f2b2 | 177 | break; |
CasperK | 4:dfe39188f2b2 | 178 | case EMG1: |
CasperK | 4:dfe39188f2b2 | 179 | if(!next_switch) { |
CasperK | 4:dfe39188f2b2 | 180 | CalibrateEMG1(); // calibration function |
CasperK | 4:dfe39188f2b2 | 181 | CalibrationState = EMG2; |
CasperK | 4:dfe39188f2b2 | 182 | } |
CasperK | 4:dfe39188f2b2 | 183 | break; |
CasperK | 4:dfe39188f2b2 | 184 | case EMG2: |
CasperK | 4:dfe39188f2b2 | 185 | if(!next_switch) { |
CasperK | 4:dfe39188f2b2 | 186 | CalibrateEMG2(); // calibration function |
CasperK | 4:dfe39188f2b2 | 187 | CurrentState = Movement; |
CasperK | 4:dfe39188f2b2 | 188 | sample_timer.attach(&sample, 0.001); //ticker at 1000Hz |
CasperK | 4:dfe39188f2b2 | 189 | ledred = false; // to indicate filter is working |
CasperK | 4:dfe39188f2b2 | 190 | ledgreen = false; |
CasperK | 4:dfe39188f2b2 | 191 | ledblue = false; |
CasperK | 4:dfe39188f2b2 | 192 | u = false; |
CasperK | 4:dfe39188f2b2 | 193 | } |
CasperK | 4:dfe39188f2b2 | 194 | break; |
CasperK | 2:3f67b4833256 | 195 | } |
CasperK | 4:dfe39188f2b2 | 196 | } |
CasperK | 1:afb820c6fc0d | 197 | } |
CasperK | 1:afb820c6fc0d | 198 | |
CasperK | 2:3f67b4833256 | 199 | |
CasperK | 2:3f67b4833256 | 200 | |
CasperK | 1:afb820c6fc0d | 201 | void movement() { |
CasperK | 1:afb820c6fc0d | 202 | |
CasperK | 1:afb820c6fc0d | 203 | } |
CasperK | 1:afb820c6fc0d | 204 | |
CasperK | 1:afb820c6fc0d | 205 | void move_motors() { |
CasperK | 1:afb820c6fc0d | 206 | pwmpin1 = pwm_value1; |
CasperK | 1:afb820c6fc0d | 207 | pwmpin2 = pwm_value2; |
CasperK | 1:afb820c6fc0d | 208 | } |
CasperK | 0:1b2c842eca42 | 209 | |
CasperK | 0:1b2c842eca42 | 210 | int main() |
CasperK | 0:1b2c842eca42 | 211 | { |
CasperK | 4:dfe39188f2b2 | 212 | // pc.baud(115200); |
CasperK | 4:dfe39188f2b2 | 213 | // pc.printf(" ** program reset **\n\r"); |
CasperK | 1:afb820c6fc0d | 214 | pwmpin1.period_us(60); |
CasperK | 1:afb820c6fc0d | 215 | pwmpin2.period_us(60); |
CasperK | 1:afb820c6fc0d | 216 | directionpin1 = true; |
CasperK | 1:afb820c6fc0d | 217 | directionpin2 = true; |
CasperK | 1:afb820c6fc0d | 218 | |
CasperK | 3:ed4676f76a5c | 219 | ledred = true; |
CasperK | 3:ed4676f76a5c | 220 | ledgreen = true; |
CasperK | 3:ed4676f76a5c | 221 | ledblue = true; |
CasperK | 4:dfe39188f2b2 | 222 | |
CasperK | 2:3f67b4833256 | 223 | MotorsTicker.attach(&move_motors, 0.02f); //ticker at 50Hz |
CasperK | 2:3f67b4833256 | 224 | |
CasperK | 1:afb820c6fc0d | 225 | CurrentState = PositionCalibration; |
CasperK | 4:dfe39188f2b2 | 226 | // pc.printf("current state = PositionCalibration\n\r"); |
CasperK | 0:1b2c842eca42 | 227 | |
CasperK | 0:1b2c842eca42 | 228 | while (true) { |
CasperK | 1:afb820c6fc0d | 229 | switch(CurrentState) { |
CasperK | 0:1b2c842eca42 | 230 | case PositionCalibration: |
CasperK | 4:dfe39188f2b2 | 231 | ledgreen = false; |
CasperK | 4:dfe39188f2b2 | 232 | positionCalibration(); |
CasperK | 4:dfe39188f2b2 | 233 | if (!kill_switch) { |
CasperK | 4:dfe39188f2b2 | 234 | CurrentState = KILL; |
CasperK | 4:dfe39188f2b2 | 235 | // pc.printf("current state = KILL\n\r"); |
CasperK | 4:dfe39188f2b2 | 236 | } |
CasperK | 1:afb820c6fc0d | 237 | break; |
CasperK | 1:afb820c6fc0d | 238 | |
CasperK | 0:1b2c842eca42 | 239 | case EmgCalibration: |
CasperK | 4:dfe39188f2b2 | 240 | ledgreen = true; |
CasperK | 4:dfe39188f2b2 | 241 | ledblue = false; |
CasperK | 4:dfe39188f2b2 | 242 | emgCalibration(); |
CasperK | 4:dfe39188f2b2 | 243 | //emg1Calibration(); |
CasperK | 4:dfe39188f2b2 | 244 | //emg2Calibration(); |
CasperK | 4:dfe39188f2b2 | 245 | |
CasperK | 4:dfe39188f2b2 | 246 | if (!kill_switch) { |
CasperK | 4:dfe39188f2b2 | 247 | CurrentState = KILL; |
CasperK | 4:dfe39188f2b2 | 248 | // pc.printf("current state = KILL\n\r"); |
CasperK | 4:dfe39188f2b2 | 249 | } |
CasperK | 1:afb820c6fc0d | 250 | break; |
CasperK | 0:1b2c842eca42 | 251 | |
CasperK | 0:1b2c842eca42 | 252 | case Movement: |
CasperK | 4:dfe39188f2b2 | 253 | ledred = true; |
CasperK | 4:dfe39188f2b2 | 254 | ledgreen = false; |
CasperK | 4:dfe39188f2b2 | 255 | ledblue = false; |
CasperK | 4:dfe39188f2b2 | 256 | movement(); |
CasperK | 4:dfe39188f2b2 | 257 | |
CasperK | 4:dfe39188f2b2 | 258 | if (!kill_switch) { |
CasperK | 4:dfe39188f2b2 | 259 | CurrentState = KILL; |
CasperK | 4:dfe39188f2b2 | 260 | // pc.printf("current state = KILL\n\r"); |
CasperK | 4:dfe39188f2b2 | 261 | } |
CasperK | 1:afb820c6fc0d | 262 | break; |
CasperK | 0:1b2c842eca42 | 263 | |
CasperK | 0:1b2c842eca42 | 264 | case KILL: |
CasperK | 4:dfe39188f2b2 | 265 | bool u = true; |
CasperK | 4:dfe39188f2b2 | 266 | ledgreen = true; |
CasperK | 4:dfe39188f2b2 | 267 | ledblue = true; |
CasperK | 4:dfe39188f2b2 | 268 | ledred = false; |
CasperK | 4:dfe39188f2b2 | 269 | |
CasperK | 4:dfe39188f2b2 | 270 | pwm_value1 = 0; |
CasperK | 4:dfe39188f2b2 | 271 | pwm_value2 = 0; |
CasperK | 4:dfe39188f2b2 | 272 | |
CasperK | 4:dfe39188f2b2 | 273 | timer.start(); |
CasperK | 4:dfe39188f2b2 | 274 | if (timer.read_ms()> 2000) { |
CasperK | 4:dfe39188f2b2 | 275 | timer.stop(); |
CasperK | 4:dfe39188f2b2 | 276 | timer.reset(); |
CasperK | 4:dfe39188f2b2 | 277 | while(u) { |
CasperK | 4:dfe39188f2b2 | 278 | if (!kill_switch) { |
CasperK | 4:dfe39188f2b2 | 279 | timer.start(); |
CasperK | 4:dfe39188f2b2 | 280 | u = false; |
CasperK | 4:dfe39188f2b2 | 281 | ledred = true; |
CasperK | 4:dfe39188f2b2 | 282 | CurrentState = PositionCalibration; |
CasperK | 4:dfe39188f2b2 | 283 | // pc.printf("current state = PositionCalibration\n\r"); |
CasperK | 4:dfe39188f2b2 | 284 | wait(1.0f); |
CasperK | 1:afb820c6fc0d | 285 | } |
CasperK | 0:1b2c842eca42 | 286 | } |
CasperK | 4:dfe39188f2b2 | 287 | } |
CasperK | 1:afb820c6fc0d | 288 | break; |
CasperK | 1:afb820c6fc0d | 289 | } |
CasperK | 1:afb820c6fc0d | 290 | wait(0.2f); |
CasperK | 0:1b2c842eca42 | 291 | } |
CasperK | 0:1b2c842eca42 | 292 | } |