2 losse EMG signalen van de biceps en deltoid
Dependencies: HIDScope MODSERIAL mbed-dsp mbed Encoder
Fork of Lampje_EMG_Gr6 by
main.cpp@31:608140bf7b13, 2014-11-03 (annotated)
- Committer:
- jessekaiser
- Date:
- Mon Nov 03 20:30:28 2014 +0000
- Revision:
- 31:608140bf7b13
- Parent:
- 30:7a0a3c272308
- Child:
- 32:e35bedc7cefd
hoi
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jessekaiser | 0:db396b9f4b4c | 1 | #include "mbed.h" |
jessekaiser | 0:db396b9f4b4c | 2 | #include "HIDScope.h" |
jessekaiser | 0:db396b9f4b4c | 3 | #include "arm_math.h" |
jessekaiser | 0:db396b9f4b4c | 4 | #include "MODSERIAL.h" |
irisl | 20:d40b6cba4280 | 5 | #include "encoder.h" |
irisl | 21:674fafb6301d | 6 | #include "PwmOut.h" |
jessekaiser | 0:db396b9f4b4c | 7 | |
jessekaiser | 30:7a0a3c272308 | 8 | // define |
irisl | 21:674fafb6301d | 9 | #define TSAMP 0.005 |
jessekaiser | 29:d0dab8921e9d | 10 | #define K_P1 (3.5) //Kp waarde voor motor1, van het batje // 7.0 |
jessekaiser | 29:d0dab8921e9d | 11 | #define K_I1 (0.01 *TSAMP) //0.1 |
jessekaiser | 29:d0dab8921e9d | 12 | #define K_P2 (0.7) //Kp waarde voor motor2, de arm //10.0 |
jessekaiser | 29:d0dab8921e9d | 13 | #define K_I2 (0.01 *TSAMP) //3.0 |
irisl | 20:d40b6cba4280 | 14 | #define I_LIMIT 1. |
irisl | 21:674fafb6301d | 15 | #define l_arm 0.5 |
irisl | 20:d40b6cba4280 | 16 | |
irisl | 20:d40b6cba4280 | 17 | #define M1_PWM PTC8 |
irisl | 20:d40b6cba4280 | 18 | #define M1_DIR PTC9 |
irisl | 20:d40b6cba4280 | 19 | #define M2_PWM PTA5 |
irisl | 20:d40b6cba4280 | 20 | #define M2_DIR PTA4 |
irisl | 20:d40b6cba4280 | 21 | |
irisl | 20:d40b6cba4280 | 22 | //Groene kabel moet op de GROUND en blauw op de 3.3v aansluiting |
jessekaiser | 31:608140bf7b13 | 23 | //Jesse is mooi |
irisl | 28:c33a0658605e | 24 | // Define objects |
irisl | 20:d40b6cba4280 | 25 | Serial pc(USBTX, USBRX); |
irisl | 20:d40b6cba4280 | 26 | |
irisl | 28:c33a0658605e | 27 | // LED |
irisl | 21:674fafb6301d | 28 | DigitalOut myledred(PTB3); |
irisl | 21:674fafb6301d | 29 | DigitalOut myledgreen(PTB1); |
irisl | 21:674fafb6301d | 30 | DigitalOut myledblue(PTB2); |
jessekaiser | 0:db396b9f4b4c | 31 | |
irisl | 28:c33a0658605e | 32 | //EMG |
irisl | 21:674fafb6301d | 33 | AnalogIn emg0(PTB0); //Analog input |
irisl | 21:674fafb6301d | 34 | AnalogIn emg1(PTC2); //Analog input |
irisl | 25:a12d51345aa4 | 35 | HIDScope scope(4); |
jessekaiser | 0:db396b9f4b4c | 36 | |
jessekaiser | 29:d0dab8921e9d | 37 | //motor1 25D |
irisl | 21:674fafb6301d | 38 | Encoder motor1(PTD3,PTD5); //wit, geel |
irisl | 20:d40b6cba4280 | 39 | PwmOut pwm_motor1(M2_PWM); |
irisl | 20:d40b6cba4280 | 40 | DigitalOut motordir1(M2_DIR); |
irisl | 20:d40b6cba4280 | 41 | |
irisl | 20:d40b6cba4280 | 42 | //motor2 37D |
irisl | 21:674fafb6301d | 43 | Encoder motor2(PTD2, PTD0); //wit, geel |
irisl | 20:d40b6cba4280 | 44 | PwmOut pwm_motor2(M1_PWM); |
irisl | 20:d40b6cba4280 | 45 | DigitalOut motordir2(M1_DIR); |
irisl | 20:d40b6cba4280 | 46 | |
irisl | 28:c33a0658605e | 47 | // Motor variabelen |
jessekaiser | 29:d0dab8921e9d | 48 | float pwm_out1 = 0; |
jessekaiser | 29:d0dab8921e9d | 49 | float pwm_out2 = 0; |
irisl | 21:674fafb6301d | 50 | int cur_pos_motor1; |
irisl | 21:674fafb6301d | 51 | int prev_pos_motor1 = 0; |
irisl | 21:674fafb6301d | 52 | int cur_pos_motor2; |
irisl | 21:674fafb6301d | 53 | int prev_pos_motor2 = 0; |
irisl | 21:674fafb6301d | 54 | float speed1_rad; |
irisl | 21:674fafb6301d | 55 | float speed2_rad; |
irisl | 21:674fafb6301d | 56 | float pos_motor1_rad; |
irisl | 21:674fafb6301d | 57 | float pos_motor2_rad; |
irisl | 21:674fafb6301d | 58 | int staat1 = 0; |
irisl | 21:674fafb6301d | 59 | int staat2 = 0; |
irisl | 22:14f5161d7d7b | 60 | volatile float arm_hoogte = 0; |
irisl | 22:14f5161d7d7b | 61 | volatile float batje_hoek = 0; |
irisl | 21:674fafb6301d | 62 | int wait_iterator1 = 0; |
irisl | 21:674fafb6301d | 63 | int wait_iterator2 = 0; |
irisl | 20:d40b6cba4280 | 64 | |
irisl | 20:d40b6cba4280 | 65 | |
irisl | 28:c33a0658605e | 66 | // EMG Filters (settings en variabelen) |
irisl | 20:d40b6cba4280 | 67 | |
irisl | 28:c33a0658605e | 68 | // Filters |
irisl | 9:f7ec578a17c0 | 69 | arm_biquad_casd_df1_inst_f32 lowpass_biceps; |
irisl | 9:f7ec578a17c0 | 70 | arm_biquad_casd_df1_inst_f32 lowpass_deltoid; |
irisl | 26:9859a71456fd | 71 | //lowpass filter settings: Fc = 2 Hz, Fs = 500 Hz, Gain = -3 dB |
irisl | 26:9859a71456fd | 72 | float lowpass_const[] = {0.00015514839749793376, 0.00031029679499586753, 0.00015514839749793376, 1.9644602512795832, -0.9650808448695751}; |
jessekaiser | 0:db396b9f4b4c | 73 | //state values |
irisl | 9:f7ec578a17c0 | 74 | float lowpass_biceps_states[4]; |
irisl | 9:f7ec578a17c0 | 75 | float lowpass_deltoid_states[4]; |
irisl | 9:f7ec578a17c0 | 76 | arm_biquad_casd_df1_inst_f32 highnotch_biceps; |
irisl | 9:f7ec578a17c0 | 77 | arm_biquad_casd_df1_inst_f32 highnotch_deltoid; |
irisl | 27:691779624530 | 78 | //highpass filter settings: Fc = 10 Hz, Fs = 500 Hz, Gain = -3 dB, notch Fc = 50, Fs =500Hz, Gain = -3 dB |
irisl | 26:9859a71456fd | 79 | float highnotch_const[] = {0.9149684297741606, -1.8299368595483212, 0.9149684297741606, 1.8226935021735358, -0.8371802169231065 ,0.7063988100714527, -1.1429772843080923, 0.7063988100714527, 1.1429772843080923, -0.41279762014290533}; |
jessekaiser | 0:db396b9f4b4c | 80 | //state values |
irisl | 9:f7ec578a17c0 | 81 | float highnotch_biceps_states[8]; |
irisl | 9:f7ec578a17c0 | 82 | float highnotch_deltoid_states[8]; |
jessekaiser | 2:39e1bde54e73 | 83 | |
jessekaiser | 2:39e1bde54e73 | 84 | //De globale variabele voor het gefilterde EMG signaal |
jessekaiser | 2:39e1bde54e73 | 85 | float filtered_biceps; |
jessekaiser | 2:39e1bde54e73 | 86 | float filtered_deltoid; |
irisl | 12:9e6e49af9304 | 87 | float filtered_average_bi; |
irisl | 12:9e6e49af9304 | 88 | float filtered_average_del; |
jessekaiser | 0:db396b9f4b4c | 89 | |
jessekaiser | 29:d0dab8921e9d | 90 | //gemiddelde EMG waarden over 250 sample stappen |
irisl | 12:9e6e49af9304 | 91 | void average_biceps(float filtered_biceps,float *average) |
irisl | 12:9e6e49af9304 | 92 | { |
irisl | 12:9e6e49af9304 | 93 | static float total=0; |
irisl | 12:9e6e49af9304 | 94 | static float number=0; |
irisl | 12:9e6e49af9304 | 95 | total = total + filtered_biceps; |
irisl | 12:9e6e49af9304 | 96 | number = number + 1; |
irisl | 26:9859a71456fd | 97 | if ( number == 250) { |
irisl | 26:9859a71456fd | 98 | *average = total/250; |
irisl | 12:9e6e49af9304 | 99 | total = 0; |
irisl | 12:9e6e49af9304 | 100 | number = 0; |
irisl | 12:9e6e49af9304 | 101 | } |
irisl | 12:9e6e49af9304 | 102 | } |
irisl | 12:9e6e49af9304 | 103 | |
irisl | 12:9e6e49af9304 | 104 | void average_deltoid(float filtered_input,float *average_output) |
irisl | 12:9e6e49af9304 | 105 | { |
irisl | 12:9e6e49af9304 | 106 | static float total=0; |
irisl | 12:9e6e49af9304 | 107 | static float number=0; |
irisl | 12:9e6e49af9304 | 108 | total = total + filtered_input; |
irisl | 12:9e6e49af9304 | 109 | number = number + 1; |
irisl | 26:9859a71456fd | 110 | if ( number == 250) { |
irisl | 26:9859a71456fd | 111 | *average_output = total/250; |
irisl | 12:9e6e49af9304 | 112 | total = 0; |
irisl | 12:9e6e49af9304 | 113 | number = 0; |
irisl | 12:9e6e49af9304 | 114 | } |
irisl | 12:9e6e49af9304 | 115 | } |
irisl | 12:9e6e49af9304 | 116 | |
irisl | 28:c33a0658605e | 117 | // EMG looper |
jessekaiser | 0:db396b9f4b4c | 118 | void looper() |
jessekaiser | 0:db396b9f4b4c | 119 | { |
jessekaiser | 1:099b19376f16 | 120 | /*variable to store value in*/ |
jessekaiser | 2:39e1bde54e73 | 121 | uint16_t emg_value1; |
jessekaiser | 3:0895fa0a6ca4 | 122 | uint16_t emg_value2; |
jessekaiser | 1:099b19376f16 | 123 | |
jessekaiser | 2:39e1bde54e73 | 124 | float emg_value1_f32; |
jessekaiser | 2:39e1bde54e73 | 125 | float emg_value2_f32; |
jessekaiser | 0:db396b9f4b4c | 126 | /*put raw emg value both in red and in emg_value*/ |
jessekaiser | 2:39e1bde54e73 | 127 | emg_value1 = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V) |
jessekaiser | 2:39e1bde54e73 | 128 | emg_value1_f32 = emg0.read(); |
jessekaiser | 3:0895fa0a6ca4 | 129 | |
jessekaiser | 2:39e1bde54e73 | 130 | emg_value2 = emg1.read_u16(); |
jessekaiser | 2:39e1bde54e73 | 131 | emg_value2_f32 = emg1.read(); |
jessekaiser | 0:db396b9f4b4c | 132 | |
jessekaiser | 2:39e1bde54e73 | 133 | //process emg biceps |
irisl | 9:f7ec578a17c0 | 134 | arm_biquad_cascade_df1_f32(&highnotch_biceps, &emg_value1_f32, &filtered_biceps, 1 ); |
jessekaiser | 2:39e1bde54e73 | 135 | filtered_biceps = fabs(filtered_biceps); |
irisl | 9:f7ec578a17c0 | 136 | arm_biquad_cascade_df1_f32(&lowpass_biceps, &filtered_biceps, &filtered_biceps, 1 ); |
irisl | 12:9e6e49af9304 | 137 | average_biceps(filtered_biceps,&filtered_average_bi); |
jessekaiser | 2:39e1bde54e73 | 138 | //process emg deltoid |
irisl | 9:f7ec578a17c0 | 139 | arm_biquad_cascade_df1_f32(&highnotch_deltoid, &emg_value2_f32, &filtered_deltoid, 1 ); |
jessekaiser | 3:0895fa0a6ca4 | 140 | filtered_deltoid = fabs(filtered_deltoid); |
irisl | 9:f7ec578a17c0 | 141 | arm_biquad_cascade_df1_f32(&lowpass_deltoid, &filtered_deltoid, &filtered_deltoid, 1 ); |
irisl | 12:9e6e49af9304 | 142 | average_deltoid(filtered_deltoid, &filtered_average_del); |
jessekaiser | 1:099b19376f16 | 143 | |
jessekaiser | 0:db396b9f4b4c | 144 | /*send value to PC. */ |
irisl | 9:f7ec578a17c0 | 145 | //scope.set(0,emg_value1); //Raw EMG signal biceps |
irisl | 9:f7ec578a17c0 | 146 | //scope.set(1,emg_value2); //Raw EMG signal Deltoid |
irisl | 25:a12d51345aa4 | 147 | scope.set(0,filtered_biceps); //processed float biceps |
irisl | 25:a12d51345aa4 | 148 | scope.set(1,filtered_average_bi); //processed float deltoid |
irisl | 25:a12d51345aa4 | 149 | scope.set(2,filtered_deltoid); //processed float biceps |
irisl | 25:a12d51345aa4 | 150 | scope.set(3,filtered_average_del); //processed float deltoid |
jessekaiser | 0:db396b9f4b4c | 151 | scope.send(); |
jessekaiser | 0:db396b9f4b4c | 152 | |
jessekaiser | 0:db396b9f4b4c | 153 | } |
jessekaiser | 0:db396b9f4b4c | 154 | |
irisl | 16:d65458b85734 | 155 | // LED AANSTURING |
irisl | 16:d65458b85734 | 156 | |
jessekaiser | 0:db396b9f4b4c | 157 | void BlinkRed(int n) |
jessekaiser | 0:db396b9f4b4c | 158 | { |
jessekaiser | 0:db396b9f4b4c | 159 | for (int i=0; i<n; i++) { |
irisl | 21:674fafb6301d | 160 | myledred = 0; |
irisl | 21:674fafb6301d | 161 | myledgreen = 0; |
irisl | 21:674fafb6301d | 162 | myledblue = 0; |
jessekaiser | 3:0895fa0a6ca4 | 163 | wait(0.1); |
irisl | 21:674fafb6301d | 164 | myledred = 1; |
irisl | 21:674fafb6301d | 165 | myledgreen = 0; |
irisl | 21:674fafb6301d | 166 | myledblue = 0; |
jessekaiser | 3:0895fa0a6ca4 | 167 | wait(0.1); |
jessekaiser | 0:db396b9f4b4c | 168 | } |
jessekaiser | 0:db396b9f4b4c | 169 | } |
jessekaiser | 0:db396b9f4b4c | 170 | |
irisl | 28:c33a0658605e | 171 | // Ticker voor groen knipperen, zodat tijdens dit knipperen presets gekozen kunnen worden |
irisl | 28:c33a0658605e | 172 | Ticker ledticker; |
irisl | 28:c33a0658605e | 173 | |
irisl | 17:dbbe4e126203 | 174 | void greenblink() |
irisl | 16:d65458b85734 | 175 | { |
irisl | 21:674fafb6301d | 176 | if(myledgreen.read()) |
irisl | 21:674fafb6301d | 177 | myledgreen = 0; |
irisl | 16:d65458b85734 | 178 | else |
irisl | 21:674fafb6301d | 179 | myledgreen = 1; |
irisl | 16:d65458b85734 | 180 | } |
irisl | 16:d65458b85734 | 181 | |
irisl | 17:dbbe4e126203 | 182 | void BlinkGreen() |
irisl | 18:ed2afe6953de | 183 | { |
irisl | 21:674fafb6301d | 184 | myledred= 0; |
irisl | 21:674fafb6301d | 185 | myledblue =0; |
irisl | 18:ed2afe6953de | 186 | ledticker.attach(&greenblink,.5); |
irisl | 16:d65458b85734 | 187 | } |
irisl | 16:d65458b85734 | 188 | |
irisl | 18:ed2afe6953de | 189 | void stopblinkgreen() |
irisl | 16:d65458b85734 | 190 | { |
irisl | 16:d65458b85734 | 191 | ledticker.detach(); |
irisl | 16:d65458b85734 | 192 | } |
irisl | 16:d65458b85734 | 193 | |
irisl | 28:c33a0658605e | 194 | // Groen schijnen |
irisl | 13:493a953a2a85 | 195 | void ShineGreen () |
irisl | 13:493a953a2a85 | 196 | { |
irisl | 21:674fafb6301d | 197 | myledred = 0; |
irisl | 21:674fafb6301d | 198 | myledgreen = 1; |
irisl | 21:674fafb6301d | 199 | myledblue = 0; |
irisl | 13:493a953a2a85 | 200 | } |
irisl | 13:493a953a2a85 | 201 | |
irisl | 28:c33a0658605e | 202 | // Blauw schijnen |
irisl | 13:493a953a2a85 | 203 | void ShineBlue () |
irisl | 13:493a953a2a85 | 204 | { |
irisl | 21:674fafb6301d | 205 | myledred = 0; |
irisl | 21:674fafb6301d | 206 | myledgreen = 0; |
irisl | 21:674fafb6301d | 207 | myledblue = 1; |
irisl | 13:493a953a2a85 | 208 | } |
irisl | 13:493a953a2a85 | 209 | |
irisl | 28:c33a0658605e | 210 | // Rood schijnen |
irisl | 13:493a953a2a85 | 211 | void ShineRed () |
irisl | 13:493a953a2a85 | 212 | { |
irisl | 21:674fafb6301d | 213 | myledred = 1; |
irisl | 21:674fafb6301d | 214 | myledgreen = 0; |
irisl | 21:674fafb6301d | 215 | myledblue = 0; |
irisl | 13:493a953a2a85 | 216 | } |
irisl | 13:493a953a2a85 | 217 | |
irisl | 20:d40b6cba4280 | 218 | // MOTORFUNCTIES |
irisl | 20:d40b6cba4280 | 219 | |
irisl | 28:c33a0658605e | 220 | // Motor1 = batje |
irisl | 28:c33a0658605e | 221 | // Motor2 = arm |
irisl | 28:c33a0658605e | 222 | |
jessekaiser | 29:d0dab8921e9d | 223 | void clamp(float* in, float min, float max) //Clamp geeft een maximum en minimum limiet aan een functie |
irisl | 21:674fafb6301d | 224 | { |
jessekaiser | 29:d0dab8921e9d | 225 | *in > min ? /*(*/*in < max? : *in = max : *in = min; |
irisl | 21:674fafb6301d | 226 | } |
irisl | 21:674fafb6301d | 227 | |
irisl | 28:c33a0658605e | 228 | // PI-regelaar motor1: batje |
irisl | 21:674fafb6301d | 229 | float pid1(float setpoint1, float measurement1) |
irisl | 20:d40b6cba4280 | 230 | { |
irisl | 21:674fafb6301d | 231 | float error1; |
irisl | 21:674fafb6301d | 232 | float out_p1 = 0; |
irisl | 21:674fafb6301d | 233 | static float out_i1 = 0; |
irisl | 21:674fafb6301d | 234 | error1 = (setpoint1 - measurement1); |
irisl | 21:674fafb6301d | 235 | out_p1 = error1*K_P1; |
irisl | 21:674fafb6301d | 236 | out_i1 += error1*K_I1; |
irisl | 21:674fafb6301d | 237 | clamp(&out_i1,-I_LIMIT,I_LIMIT); |
irisl | 21:674fafb6301d | 238 | return out_p1 + out_i1; |
irisl | 20:d40b6cba4280 | 239 | } |
irisl | 20:d40b6cba4280 | 240 | |
irisl | 28:c33a0658605e | 241 | // PI-regelaar motor2: arm |
irisl | 21:674fafb6301d | 242 | float pid2(float setpoint2, float measurement2) |
irisl | 20:d40b6cba4280 | 243 | { |
irisl | 21:674fafb6301d | 244 | float error2; |
irisl | 21:674fafb6301d | 245 | float out_p2 = 0; |
irisl | 21:674fafb6301d | 246 | static float out_i2 = 0; |
irisl | 21:674fafb6301d | 247 | error2 = (setpoint2 - measurement2); |
irisl | 21:674fafb6301d | 248 | out_p2 = error2*K_P2; |
irisl | 21:674fafb6301d | 249 | out_i2 += error2*K_I2; |
irisl | 21:674fafb6301d | 250 | clamp(&out_i2,-I_LIMIT,I_LIMIT); |
irisl | 21:674fafb6301d | 251 | return out_p2 + out_i2; |
irisl | 21:674fafb6301d | 252 | } |
irisl | 28:c33a0658605e | 253 | |
irisl | 28:c33a0658605e | 254 | // Variabelen |
irisl | 21:674fafb6301d | 255 | float prev_setpoint1 = 0; |
irisl | 21:674fafb6301d | 256 | float setpoint1 = 0; |
irisl | 21:674fafb6301d | 257 | float prev_setpoint2 = 0; |
irisl | 21:674fafb6301d | 258 | float setpoint2 = 0; |
irisl | 21:674fafb6301d | 259 | |
irisl | 28:c33a0658605e | 260 | // Functies motoren |
irisl | 28:c33a0658605e | 261 | |
irisl | 28:c33a0658605e | 262 | // Motor1 links draaien |
irisl | 21:674fafb6301d | 263 | void batje_links () |
irisl | 21:674fafb6301d | 264 | { |
irisl | 21:674fafb6301d | 265 | speed1_rad = -1.0; //positief is CCW, negatief CW (boven aanzicht) |
jessekaiser | 29:d0dab8921e9d | 266 | setpoint1 = prev_setpoint1 + TSAMP * speed1_rad; //bepalen van de setpoint |
jessekaiser | 29:d0dab8921e9d | 267 | if(setpoint1 > (11.3*2.3*2.0*PI/360)) { //Het eerste getal geeft een aantal graden weer, dus alleen dit hoeft aangepast te worden/ |
jessekaiser | 29:d0dab8921e9d | 268 | setpoint1 = (11.3*2.3*2.0*PI/360); //Hier wordt er een grens bepaald voor de hoek. |
irisl | 21:674fafb6301d | 269 | } |
irisl | 22:14f5161d7d7b | 270 | if(setpoint1 < -(11.3*2.3*2.0*PI/360)) { |
irisl | 22:14f5161d7d7b | 271 | setpoint1 = -(11.3*2.3*2.0*PI/360); |
irisl | 21:674fafb6301d | 272 | } |
jessekaiser | 29:d0dab8921e9d | 273 | if(setpoint1 <= -(11.3*2.3*2.0*PI/360)-0.1) { |
irisl | 21:674fafb6301d | 274 | staat1 = 1; |
jessekaiser | 29:d0dab8921e9d | 275 | prev_setpoint1 = setpoint1; |
irisl | 21:674fafb6301d | 276 | } |
irisl | 21:674fafb6301d | 277 | } |
jessekaiser | 29:d0dab8921e9d | 278 | // Motor1 rechts draaien |
jessekaiser | 29:d0dab8921e9d | 279 | void batje_rechts () { |
jessekaiser | 29:d0dab8921e9d | 280 | speed1_rad = 1.0; |
jessekaiser | 29:d0dab8921e9d | 281 | setpoint1 = prev_setpoint1 + TSAMP * speed1_rad; |
jessekaiser | 29:d0dab8921e9d | 282 | if(setpoint1 > (11.3*2.3*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 283 | setpoint1 = (11.3*2.3*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 284 | } |
jessekaiser | 29:d0dab8921e9d | 285 | if(setpoint1 < -(11.3*2.3*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 286 | setpoint1 = -(11.3*2.3*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 287 | } |
jessekaiser | 29:d0dab8921e9d | 288 | prev_setpoint1 = setpoint1; |
jessekaiser | 29:d0dab8921e9d | 289 | if(setpoint1 >= (11.3*2.3*2.0*PI/360)-0.1) { |
jessekaiser | 29:d0dab8921e9d | 290 | staat1 = 1; |
jessekaiser | 29:d0dab8921e9d | 291 | } |
jessekaiser | 29:d0dab8921e9d | 292 | } |
jessekaiser | 29:d0dab8921e9d | 293 | |
jessekaiser | 29:d0dab8921e9d | 294 | //Motor1 na links draaien weer terug laten draaien naar beginstand |
jessekaiser | 29:d0dab8921e9d | 295 | void batje_begin_links () { |
jessekaiser | 29:d0dab8921e9d | 296 | speed1_rad = 1.0; |
jessekaiser | 29:d0dab8921e9d | 297 | setpoint1 = prev_setpoint1 + TSAMP * speed1_rad; |
jessekaiser | 29:d0dab8921e9d | 298 | if(setpoint1 > (0*2.3*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 299 | setpoint1 = (0*2.3*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 300 | } |
jessekaiser | 29:d0dab8921e9d | 301 | if(setpoint1 < -(0*2.3*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 302 | setpoint1 = -(0*2.3*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 303 | } |
jessekaiser | 29:d0dab8921e9d | 304 | prev_setpoint1 = setpoint1; |
jessekaiser | 29:d0dab8921e9d | 305 | } |
jessekaiser | 29:d0dab8921e9d | 306 | |
jessekaiser | 29:d0dab8921e9d | 307 | //Motor1 na links draaien weer terug laten draaien naar beginstand |
jessekaiser | 29:d0dab8921e9d | 308 | void batje_begin_rechts () { |
jessekaiser | 29:d0dab8921e9d | 309 | speed1_rad = -1.0; |
jessekaiser | 29:d0dab8921e9d | 310 | setpoint1 = prev_setpoint1 + TSAMP * speed1_rad; |
jessekaiser | 29:d0dab8921e9d | 311 | if(setpoint1 > (0*2.3*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 312 | setpoint1 = (0*2.3*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 313 | } |
jessekaiser | 29:d0dab8921e9d | 314 | if(setpoint1 < -(0.0*2.3*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 315 | setpoint1 = -(0.0*2.3*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 316 | } |
jessekaiser | 29:d0dab8921e9d | 317 | prev_setpoint1 = setpoint1; |
jessekaiser | 29:d0dab8921e9d | 318 | } |
jessekaiser | 29:d0dab8921e9d | 319 | |
jessekaiser | 29:d0dab8921e9d | 320 | // Motor2 balletje op zn hoogst slaan |
jessekaiser | 29:d0dab8921e9d | 321 | void arm_hoog () { |
jessekaiser | 29:d0dab8921e9d | 322 | speed2_rad = 6.0; |
jessekaiser | 29:d0dab8921e9d | 323 | setpoint2 = prev_setpoint2 + TSAMP * speed2_rad; |
jessekaiser | 29:d0dab8921e9d | 324 | if(setpoint2 > (155.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 325 | setpoint2 = (155.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 326 | } |
jessekaiser | 29:d0dab8921e9d | 327 | if(setpoint2 < -(155.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 328 | setpoint2 = -(155.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 329 | } |
jessekaiser | 29:d0dab8921e9d | 330 | prev_setpoint2 = setpoint2; |
jessekaiser | 29:d0dab8921e9d | 331 | if(setpoint2 >= (155.0*2.0*PI/360)-0.1) { |
jessekaiser | 29:d0dab8921e9d | 332 | staat2 = 1; |
jessekaiser | 29:d0dab8921e9d | 333 | } |
jessekaiser | 29:d0dab8921e9d | 334 | } |
jessekaiser | 29:d0dab8921e9d | 335 | |
jessekaiser | 29:d0dab8921e9d | 336 | // Motor2 balletje in het midden slaan |
jessekaiser | 29:d0dab8921e9d | 337 | void arm_mid () { |
jessekaiser | 29:d0dab8921e9d | 338 | speed2_rad = 4.0; |
jessekaiser | 29:d0dab8921e9d | 339 | setpoint2 = prev_setpoint2 + TSAMP * speed2_rad; |
jessekaiser | 29:d0dab8921e9d | 340 | if(setpoint2 > (155.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 341 | setpoint2 = (155.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 342 | } |
jessekaiser | 29:d0dab8921e9d | 343 | if(setpoint2 < -(155.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 344 | setpoint2 = -(155.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 345 | } |
jessekaiser | 29:d0dab8921e9d | 346 | prev_setpoint2 = setpoint2; |
jessekaiser | 29:d0dab8921e9d | 347 | if(setpoint2 >= (155.0*2.0*PI/360)-0.1) { |
jessekaiser | 29:d0dab8921e9d | 348 | staat2 = 1; |
jessekaiser | 29:d0dab8921e9d | 349 | } |
jessekaiser | 29:d0dab8921e9d | 350 | } |
irisl | 21:674fafb6301d | 351 | |
irisl | 28:c33a0658605e | 352 | // Motor2 balletje op het laagst slaan |
jessekaiser | 29:d0dab8921e9d | 353 | void arm_laag () { |
jessekaiser | 29:d0dab8921e9d | 354 | speed2_rad = 2.0; |
jessekaiser | 29:d0dab8921e9d | 355 | setpoint2 = prev_setpoint2 + TSAMP * speed2_rad; |
jessekaiser | 29:d0dab8921e9d | 356 | if(setpoint2 > (155*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 357 | setpoint2 = (155*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 358 | } |
jessekaiser | 29:d0dab8921e9d | 359 | if(setpoint2 < -(155.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 360 | setpoint2 = -(155.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 361 | } |
jessekaiser | 29:d0dab8921e9d | 362 | prev_setpoint2 = setpoint2; |
jessekaiser | 29:d0dab8921e9d | 363 | if(setpoint2 >= (155.0*2.0*PI/360)-0.1) { |
jessekaiser | 29:d0dab8921e9d | 364 | staat2 = 1; |
jessekaiser | 29:d0dab8921e9d | 365 | } |
irisl | 21:674fafb6301d | 366 | } |
irisl | 21:674fafb6301d | 367 | |
irisl | 28:c33a0658605e | 368 | // Motor2 arm terug zetten in beginstand |
jessekaiser | 29:d0dab8921e9d | 369 | void arm_begin () { |
jessekaiser | 29:d0dab8921e9d | 370 | speed2_rad = 1.0; |
jessekaiser | 29:d0dab8921e9d | 371 | setpoint2 = prev_setpoint2 + TSAMP * speed2_rad; |
jessekaiser | 29:d0dab8921e9d | 372 | if(setpoint2 > (0.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 373 | setpoint2 = (0.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 374 | } |
jessekaiser | 29:d0dab8921e9d | 375 | if(setpoint2 < -(0.0*2.0*PI/360)) { |
jessekaiser | 29:d0dab8921e9d | 376 | setpoint2 = -(0.0*2.0*PI/360); |
jessekaiser | 29:d0dab8921e9d | 377 | } |
jessekaiser | 29:d0dab8921e9d | 378 | prev_setpoint2 = setpoint2; |
irisl | 21:674fafb6301d | 379 | } |
irisl | 21:674fafb6301d | 380 | |
irisl | 28:c33a0658605e | 381 | // MOTOR aansturing |
jessekaiser | 29:d0dab8921e9d | 382 | void looper_motor() { |
jessekaiser | 29:d0dab8921e9d | 383 | pc.printf("%d, %f \r\n", motor1.getPosition(), motor2.getPosition()); //Geeft de posities weer van beide motoren met een sample frequentie van 0.005 |
jessekaiser | 29:d0dab8921e9d | 384 | |
jessekaiser | 29:d0dab8921e9d | 385 | //MOTOR1 |
jessekaiser | 29:d0dab8921e9d | 386 | \ |
jessekaiser | 29:d0dab8921e9d | 387 | cur_pos_motor1 = motor1.getPosition(); |
jessekaiser | 29:d0dab8921e9d | 388 | pos_motor1_rad = (float)cur_pos_motor1/(4128.0/(2.0*PI)); //voor 1 rotatie van de motoras geldt 24(aantal cpr vd encoder)*172(gearbox ratio)=4128 counts. |
jessekaiser | 29:d0dab8921e9d | 389 | pwm_out1 = pid1(setpoint1, pos_motor1_rad); |
jessekaiser | 29:d0dab8921e9d | 390 | if (pwm_out1 < -1.0) { //Hier wordt de grens voor de pwm waarde ingesteld. |
jessekaiser | 29:d0dab8921e9d | 391 | pwm_out1 = -1.0; |
jessekaiser | 29:d0dab8921e9d | 392 | } |
jessekaiser | 29:d0dab8921e9d | 393 | if (pwm_out1 > 1.0) { |
jessekaiser | 29:d0dab8921e9d | 394 | pwm_out1 = 1.0; |
jessekaiser | 29:d0dab8921e9d | 395 | } |
jessekaiser | 29:d0dab8921e9d | 396 | pwm_motor1.write(abs(pwm_out1)); |
jessekaiser | 29:d0dab8921e9d | 397 | if(pwm_out1 > 0) { |
jessekaiser | 29:d0dab8921e9d | 398 | motordir1 = 0; |
jessekaiser | 29:d0dab8921e9d | 399 | } else { |
jessekaiser | 29:d0dab8921e9d | 400 | motordir1 = 1; |
jessekaiser | 29:d0dab8921e9d | 401 | } |
jessekaiser | 29:d0dab8921e9d | 402 | |
jessekaiser | 29:d0dab8921e9d | 403 | //MOTOR2 |
jessekaiser | 29:d0dab8921e9d | 404 | cur_pos_motor2 = motor2.getPosition(); |
jessekaiser | 29:d0dab8921e9d | 405 | pos_motor2_rad = (float)cur_pos_motor2/(3200.0/(2.0*PI)); |
jessekaiser | 29:d0dab8921e9d | 406 | pwm_out2 = pid2(setpoint2, pos_motor2_rad); // |
jessekaiser | 29:d0dab8921e9d | 407 | if (pwm_out2 < -1.0) { |
jessekaiser | 29:d0dab8921e9d | 408 | pwm_out2 = -1.0; |
jessekaiser | 29:d0dab8921e9d | 409 | } |
jessekaiser | 29:d0dab8921e9d | 410 | if (pwm_out2 > 1.0) { |
jessekaiser | 29:d0dab8921e9d | 411 | pwm_out2 = 1.0; |
jessekaiser | 29:d0dab8921e9d | 412 | } |
jessekaiser | 29:d0dab8921e9d | 413 | pwm_motor2.write(abs(pwm_out2)); |
jessekaiser | 29:d0dab8921e9d | 414 | if(pwm_out2 > 0) { |
jessekaiser | 29:d0dab8921e9d | 415 | motordir2 = 0; |
jessekaiser | 29:d0dab8921e9d | 416 | } else { |
jessekaiser | 29:d0dab8921e9d | 417 | motordir2 = 1; |
jessekaiser | 29:d0dab8921e9d | 418 | } |
jessekaiser | 29:d0dab8921e9d | 419 | |
jessekaiser | 29:d0dab8921e9d | 420 | |
jessekaiser | 29:d0dab8921e9d | 421 | //STATES |
jessekaiser | 29:d0dab8921e9d | 422 | |
jessekaiser | 29:d0dab8921e9d | 423 | //Het batje draait naar opgegeven positie, doet dan een bepaalde tijd niks (wait_iterator), en draait daarna weer terug |
jessekaiser | 29:d0dab8921e9d | 424 | if (batje_hoek == 1) { |
jessekaiser | 29:d0dab8921e9d | 425 | if(staat1 == 0) { |
jessekaiser | 29:d0dab8921e9d | 426 | batje_rechts(); |
jessekaiser | 29:d0dab8921e9d | 427 | wait_iterator1 = 0; |
jessekaiser | 29:d0dab8921e9d | 428 | } else if(staat1 ==1) { |
jessekaiser | 29:d0dab8921e9d | 429 | wait_iterator1++; |
jessekaiser | 29:d0dab8921e9d | 430 | if(wait_iterator1 > 1200) { |
jessekaiser | 29:d0dab8921e9d | 431 | staat1 = 2; |
irisl | 21:674fafb6301d | 432 | |
jessekaiser | 29:d0dab8921e9d | 433 | batje_begin_rechts(); |
jessekaiser | 29:d0dab8921e9d | 434 | } |
jessekaiser | 29:d0dab8921e9d | 435 | } |
jessekaiser | 29:d0dab8921e9d | 436 | } |
jessekaiser | 29:d0dab8921e9d | 437 | if (batje_hoek == 2) { |
jessekaiser | 29:d0dab8921e9d | 438 | if(staat1 == 0) { |
jessekaiser | 29:d0dab8921e9d | 439 | batje_links(); |
jessekaiser | 29:d0dab8921e9d | 440 | wait_iterator1 = 0; |
jessekaiser | 29:d0dab8921e9d | 441 | } else if(staat1 ==1) { |
jessekaiser | 29:d0dab8921e9d | 442 | wait_iterator1++; |
jessekaiser | 29:d0dab8921e9d | 443 | if(wait_iterator1 > 1200) { |
jessekaiser | 29:d0dab8921e9d | 444 | staat1 = 2; |
jessekaiser | 29:d0dab8921e9d | 445 | |
jessekaiser | 29:d0dab8921e9d | 446 | batje_begin_links (); |
jessekaiser | 29:d0dab8921e9d | 447 | } |
jessekaiser | 29:d0dab8921e9d | 448 | } |
jessekaiser | 29:d0dab8921e9d | 449 | } |
jessekaiser | 29:d0dab8921e9d | 450 | |
jessekaiser | 29:d0dab8921e9d | 451 | if(arm_hoogte == 1) { |
jessekaiser | 29:d0dab8921e9d | 452 | if(staat2 == 0) { |
jessekaiser | 29:d0dab8921e9d | 453 | arm_laag(); |
jessekaiser | 29:d0dab8921e9d | 454 | wait_iterator2 = 0; |
jessekaiser | 29:d0dab8921e9d | 455 | } else if(staat2 == 1) { |
jessekaiser | 29:d0dab8921e9d | 456 | wait_iterator2++; |
jessekaiser | 29:d0dab8921e9d | 457 | if(wait_iterator2 > 400) { |
jessekaiser | 29:d0dab8921e9d | 458 | staat2 = 2; |
jessekaiser | 29:d0dab8921e9d | 459 | |
jessekaiser | 29:d0dab8921e9d | 460 | arm_begin(); |
jessekaiser | 29:d0dab8921e9d | 461 | } |
jessekaiser | 29:d0dab8921e9d | 462 | } |
jessekaiser | 29:d0dab8921e9d | 463 | } |
jessekaiser | 29:d0dab8921e9d | 464 | if(arm_hoogte == 2) { |
jessekaiser | 29:d0dab8921e9d | 465 | if(staat2 == 0) { |
jessekaiser | 29:d0dab8921e9d | 466 | arm_mid(); |
jessekaiser | 29:d0dab8921e9d | 467 | wait_iterator2 = 0; |
jessekaiser | 29:d0dab8921e9d | 468 | } else if(staat2 == 1) { |
jessekaiser | 29:d0dab8921e9d | 469 | wait_iterator2++; |
jessekaiser | 29:d0dab8921e9d | 470 | if(wait_iterator2 > 400) { |
jessekaiser | 29:d0dab8921e9d | 471 | staat2 = 2; |
jessekaiser | 29:d0dab8921e9d | 472 | |
jessekaiser | 29:d0dab8921e9d | 473 | arm_begin(); |
jessekaiser | 29:d0dab8921e9d | 474 | } |
jessekaiser | 29:d0dab8921e9d | 475 | } |
jessekaiser | 29:d0dab8921e9d | 476 | } |
jessekaiser | 29:d0dab8921e9d | 477 | if(arm_hoogte == 3) { |
jessekaiser | 29:d0dab8921e9d | 478 | if(staat2 == 0) { |
jessekaiser | 29:d0dab8921e9d | 479 | arm_hoog(); |
jessekaiser | 29:d0dab8921e9d | 480 | wait_iterator2 = 0; |
jessekaiser | 29:d0dab8921e9d | 481 | } else if(staat2 == 1) { |
jessekaiser | 29:d0dab8921e9d | 482 | wait_iterator2++; |
jessekaiser | 29:d0dab8921e9d | 483 | if(wait_iterator2 > 400) { |
jessekaiser | 29:d0dab8921e9d | 484 | staat2 = 2; |
jessekaiser | 29:d0dab8921e9d | 485 | |
jessekaiser | 29:d0dab8921e9d | 486 | arm_begin(); |
jessekaiser | 29:d0dab8921e9d | 487 | } |
jessekaiser | 29:d0dab8921e9d | 488 | } |
jessekaiser | 29:d0dab8921e9d | 489 | } |
jessekaiser | 29:d0dab8921e9d | 490 | |
irisl | 21:674fafb6301d | 491 | } |
irisl | 21:674fafb6301d | 492 | |
irisl | 21:674fafb6301d | 493 | |
jessekaiser | 29:d0dab8921e9d | 494 | // Hoofdprogramma, hierin staat de aansturing vd LED |
jessekaiser | 29:d0dab8921e9d | 495 | int main() { |
irisl | 28:c33a0658605e | 496 | |
jessekaiser | 29:d0dab8921e9d | 497 | pwm_motor1.period_us(100); |
jessekaiser | 29:d0dab8921e9d | 498 | motor1.setPosition(0); |
jessekaiser | 29:d0dab8921e9d | 499 | pwm_motor2.period_us(100); |
jessekaiser | 29:d0dab8921e9d | 500 | motor2.setPosition(0); |
jessekaiser | 29:d0dab8921e9d | 501 | pc.baud(115200); |
jessekaiser | 29:d0dab8921e9d | 502 | // Ticker EMG signaal meten |
jessekaiser | 29:d0dab8921e9d | 503 | Ticker log_timer; |
jessekaiser | 29:d0dab8921e9d | 504 | //set up filters. Use external array for constants |
jessekaiser | 29:d0dab8921e9d | 505 | arm_biquad_cascade_df1_init_f32(&lowpass_biceps,1 , lowpass_const, lowpass_biceps_states); |
jessekaiser | 29:d0dab8921e9d | 506 | arm_biquad_cascade_df1_init_f32(&lowpass_deltoid,1 , lowpass_const, lowpass_deltoid_states); |
jessekaiser | 29:d0dab8921e9d | 507 | arm_biquad_cascade_df1_init_f32(&highnotch_biceps,2 ,highnotch_const,highnotch_biceps_states); |
jessekaiser | 29:d0dab8921e9d | 508 | arm_biquad_cascade_df1_init_f32(&highnotch_deltoid,2 ,highnotch_const,highnotch_deltoid_states); |
jessekaiser | 29:d0dab8921e9d | 509 | // Uitvoeren van ticker EMG, sample frequentie 500Hz |
jessekaiser | 29:d0dab8921e9d | 510 | log_timer.attach(looper, 0.002); |
irisl | 28:c33a0658605e | 511 | |
jessekaiser | 29:d0dab8921e9d | 512 | // Aanroepen van motoraansturing in motor ticker |
jessekaiser | 29:d0dab8921e9d | 513 | Ticker looptimer; |
jessekaiser | 29:d0dab8921e9d | 514 | looptimer.attach(looper_motor,TSAMP); |
jessekaiser | 6:8f4138a811e0 | 515 | |
irisl | 13:493a953a2a85 | 516 | while(1) { |
jessekaiser | 29:d0dab8921e9d | 517 | |
jessekaiser | 29:d0dab8921e9d | 518 | while(1) { |
jessekaiser | 29:d0dab8921e9d | 519 | pc.printf("Span de biceps aan om het instellen te starten.\n"); |
jessekaiser | 29:d0dab8921e9d | 520 | do { |
jessekaiser | 29:d0dab8921e9d | 521 | ShineRed(); |
jessekaiser | 29:d0dab8921e9d | 522 | } while(filtered_average_bi < 0.05 && filtered_average_del <0.05); // In rust, geen meting |
jessekaiser | 29:d0dab8921e9d | 523 | if (filtered_average_bi > 0.05) { // Beginnen met meting wanneer biceps wordt aangespannen |
jessekaiser | 29:d0dab8921e9d | 524 | BlinkRed(10); // 2 seconden rood knipperen, geen signaal verwerking |
jessekaiser | 29:d0dab8921e9d | 525 | BlinkGreen(); // groen knipperen, meten van spieraanspanning |
jessekaiser | 29:d0dab8921e9d | 526 | while (1) { // eerste loop, keuze voor de positie van het batje |
jessekaiser | 29:d0dab8921e9d | 527 | pc.printf("In de loop.\n"); |
jessekaiser | 29:d0dab8921e9d | 528 | if (filtered_average_bi > 0.05 && filtered_average_del > 0.045) { //bi en del aangespannen --> batje in het midden |
jessekaiser | 29:d0dab8921e9d | 529 | stopblinkgreen(); |
jessekaiser | 29:d0dab8921e9d | 530 | pc.printf("ShineGreen.\n"); |
jessekaiser | 29:d0dab8921e9d | 531 | ShineGreen(); |
jessekaiser | 29:d0dab8921e9d | 532 | wait (4); |
jessekaiser | 29:d0dab8921e9d | 533 | break; |
jessekaiser | 29:d0dab8921e9d | 534 | } |
jessekaiser | 29:d0dab8921e9d | 535 | if (filtered_average_bi < 0.05 && filtered_average_del > 0.045) { // del aanspannen --> batje naar links |
jessekaiser | 29:d0dab8921e9d | 536 | stopblinkgreen(); |
jessekaiser | 29:d0dab8921e9d | 537 | pc.printf("ShineBlue.\n"); |
jessekaiser | 29:d0dab8921e9d | 538 | ShineBlue(); |
jessekaiser | 29:d0dab8921e9d | 539 | batje_hoek = 2; |
jessekaiser | 29:d0dab8921e9d | 540 | wait(4); |
jessekaiser | 29:d0dab8921e9d | 541 | break; |
jessekaiser | 29:d0dab8921e9d | 542 | } else if (filtered_average_bi > 0.05 && filtered_average_del < 0.045) { // bi aanspannen --> batje naar rechts |
jessekaiser | 29:d0dab8921e9d | 543 | stopblinkgreen(); |
jessekaiser | 29:d0dab8921e9d | 544 | pc.printf("ShineRed.\n"); |
jessekaiser | 29:d0dab8921e9d | 545 | ShineRed(); |
jessekaiser | 29:d0dab8921e9d | 546 | batje_hoek = 1; |
jessekaiser | 29:d0dab8921e9d | 547 | wait (4); |
jessekaiser | 29:d0dab8921e9d | 548 | break; |
jessekaiser | 29:d0dab8921e9d | 549 | } |
irisl | 18:ed2afe6953de | 550 | } |
jessekaiser | 29:d0dab8921e9d | 551 | BlinkGreen(); |
jessekaiser | 29:d0dab8921e9d | 552 | while (1) { // loop voor het instellen van de kracht |
jessekaiser | 29:d0dab8921e9d | 553 | pc.printf("In de loop.\n"); |
jessekaiser | 29:d0dab8921e9d | 554 | if (filtered_average_bi > 0.05 && filtered_average_del > 0.045) { // bi en del aanspannen --> hoog slaan |
jessekaiser | 29:d0dab8921e9d | 555 | stopblinkgreen(); |
jessekaiser | 29:d0dab8921e9d | 556 | pc.printf("ShineGreen.\n"); |
jessekaiser | 29:d0dab8921e9d | 557 | ShineGreen(); |
jessekaiser | 29:d0dab8921e9d | 558 | arm_hoogte = 3; |
jessekaiser | 29:d0dab8921e9d | 559 | wait (4); |
jessekaiser | 29:d0dab8921e9d | 560 | break; |
jessekaiser | 29:d0dab8921e9d | 561 | } |
jessekaiser | 29:d0dab8921e9d | 562 | if (filtered_average_bi < 0.05 && filtered_average_del > 0.045) { // del aanspannen --> laag slaan |
jessekaiser | 29:d0dab8921e9d | 563 | stopblinkgreen(); |
jessekaiser | 29:d0dab8921e9d | 564 | pc.printf("ShineBlue.\n"); |
jessekaiser | 29:d0dab8921e9d | 565 | ShineBlue(); |
jessekaiser | 29:d0dab8921e9d | 566 | arm_hoogte = 1; |
jessekaiser | 29:d0dab8921e9d | 567 | wait(4); |
jessekaiser | 29:d0dab8921e9d | 568 | break; |
jessekaiser | 29:d0dab8921e9d | 569 | } else if (filtered_average_bi > 0.05 && filtered_average_del < 0.045) { // bi aanspannen --> midden slaan |
jessekaiser | 29:d0dab8921e9d | 570 | stopblinkgreen(); |
jessekaiser | 29:d0dab8921e9d | 571 | pc.printf("ShineRed.\n"); |
jessekaiser | 29:d0dab8921e9d | 572 | ShineRed(); |
jessekaiser | 29:d0dab8921e9d | 573 | arm_hoogte = 2; |
jessekaiser | 29:d0dab8921e9d | 574 | wait (4); |
jessekaiser | 29:d0dab8921e9d | 575 | break; |
jessekaiser | 29:d0dab8921e9d | 576 | } |
irisl | 18:ed2afe6953de | 577 | } |
jessekaiser | 29:d0dab8921e9d | 578 | |
irisl | 19:1bd2fc3bce1e | 579 | } |
irisl | 26:9859a71456fd | 580 | |
irisl | 14:257026c95f22 | 581 | } |
jessekaiser | 0:db396b9f4b4c | 582 | } |
jessekaiser | 29:d0dab8921e9d | 583 | } |