robot
Dependencies: Encoder HIDScope MODSERIAL TouchButton mbed-dsp mbed
Fork of Robot2false by
main.cpp@50:43ead068c523, 2014-11-02 (annotated)
- Committer:
- Jolein
- Date:
- Sun Nov 02 14:19:53 2014 +0000
- Revision:
- 50:43ead068c523
- Parent:
- 49:7ae21c58ba92
- Child:
- 51:26a2af57b8e9
Af. snelheids en positie regeling bij slaan. Alleen positie op de terugweg
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Tanja2211 | 0:1594bb11fa13 | 1 | #include "mbed.h" |
Tanja2211 | 0:1594bb11fa13 | 2 | #include "encoder.h" |
Tanja2211 | 0:1594bb11fa13 | 3 | #include "HIDScope.h" |
Tanja2211 | 0:1594bb11fa13 | 4 | #include "MODSERIAL.h" |
Tanja2211 | 0:1594bb11fa13 | 5 | #include "arm_math.h" |
Tanja2211 | 0:1594bb11fa13 | 6 | #include "TouchButton.h" |
Tanja2211 | 0:1594bb11fa13 | 7 | |
Tanja2211 | 0:1594bb11fa13 | 8 | #define K_P (0.5) |
Tanja2211 | 0:1594bb11fa13 | 9 | #define K_I (0.02 *TSAMP1) |
Tanja2211 | 0:1594bb11fa13 | 10 | #define K_D (0 /TSAMP1) |
Tanja2211 | 0:1594bb11fa13 | 11 | #define I_LIMIT 1. |
Jolein | 24:a165dcd86710 | 12 | #define K_Pp (0.2) |
Jolein | 37:35fda673beb3 | 13 | #define K_Ip (0.02 *TSAMP2)//-----------------------------TSAMP1 veranderd naar TSAMP2 |
Jolein | 37:35fda673beb3 | 14 | #define K_Dp (0 /TSAMP2)//--------------------------------TSAMP1 veranderd naar TSAMP2 |
Tanja2211 | 0:1594bb11fa13 | 15 | |
Tanja2211 | 0:1594bb11fa13 | 16 | #define TSAMP1 0.01 |
Tanja2211 | 0:1594bb11fa13 | 17 | #define TSAMP2 0.01 |
Tanja2211 | 0:1594bb11fa13 | 18 | #define WACHTEN 1 |
Tanja2211 | 0:1594bb11fa13 | 19 | #define SLAAN 2 |
Tanja2211 | 0:1594bb11fa13 | 20 | #define TERUGKEREN 3 |
Tanja2211 | 33:2f9c21ac9175 | 21 | #define ANGLEMAX -150 |
Tanja2211 | 35:39e6e9941ce4 | 22 | #define ANGLEMIN 0 |
Tanja2211 | 0:1594bb11fa13 | 23 | |
Tanja2211 | 0:1594bb11fa13 | 24 | //initiating functions |
Tanja2211 | 0:1594bb11fa13 | 25 | void Triceps(); |
Tanja2211 | 0:1594bb11fa13 | 26 | void Biceps(); |
Tanja2211 | 0:1594bb11fa13 | 27 | void Calibratie_Triceps(); |
Tanja2211 | 0:1594bb11fa13 | 28 | void Calibratie_Biceps(); |
Tanja2211 | 7:b40bbf5be443 | 29 | float pid(float setspeed, float measurement, bool reset = false); |
Jolein | 49:7ae21c58ba92 | 30 | float pidpositie(float setposition, float measurement); |
Tanja2211 | 0:1594bb11fa13 | 31 | void motor2aansturing(); |
Tanja2211 | 0:1594bb11fa13 | 32 | void motor1aansturing(); |
Jolein | 17:71c5c9bfb7ba | 33 | void motor1aansturingdeel2(); |
Tanja2211 | 0:1594bb11fa13 | 34 | |
Tanja2211 | 0:1594bb11fa13 | 35 | //alle initiaties voor EMG |
Tanja2211 | 0:1594bb11fa13 | 36 | MODSERIAL pc(USBTX,USBRX); |
Tanja2211 | 0:1594bb11fa13 | 37 | |
Tanja2211 | 0:1594bb11fa13 | 38 | HIDScope scope(4); |
Tanja2211 | 0:1594bb11fa13 | 39 | |
Tanja2211 | 0:1594bb11fa13 | 40 | AnalogIn emgB(PTB1); //biceps |
Tanja2211 | 0:1594bb11fa13 | 41 | AnalogIn emgT(PTB2); //tricep |
Tanja2211 | 0:1594bb11fa13 | 42 | |
Tanja2211 | 0:1594bb11fa13 | 43 | //*** OBJECTS *** |
Tanja2211 | 0:1594bb11fa13 | 44 | //bicep |
Tanja2211 | 0:1594bb11fa13 | 45 | uint16_t emg_valueB; |
Tanja2211 | 0:1594bb11fa13 | 46 | float emg_value_f32B; |
Tanja2211 | 0:1594bb11fa13 | 47 | float filtered_emgB; |
Tanja2211 | 0:1594bb11fa13 | 48 | float drempelwaardeB1, drempelwaardeB2, drempelwaardeB3;//B1=snelheidsstand 1, B2=snelheidsstand 2, B3=snelheidsstand 3 |
Tanja2211 | 0:1594bb11fa13 | 49 | int yB1, yB2, yB3; |
Tanja2211 | 0:1594bb11fa13 | 50 | float B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, B28, B29, MOVAVG_B; //moving average objects |
Tanja2211 | 0:1594bb11fa13 | 51 | float B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B56, B57, B58, B59; |
Tanja2211 | 0:1594bb11fa13 | 52 | int snelheidsstand; |
Tanja2211 | 0:1594bb11fa13 | 53 | //tricep |
Tanja2211 | 0:1594bb11fa13 | 54 | uint16_t emg_valueT; |
Tanja2211 | 0:1594bb11fa13 | 55 | float emg_value_f32T; |
Tanja2211 | 0:1594bb11fa13 | 56 | float filtered_emgT; |
Tanja2211 | 0:1594bb11fa13 | 57 | float drempelwaardeT; |
Tanja2211 | 0:1594bb11fa13 | 58 | int yT1, yT2; |
Tanja2211 | 0:1594bb11fa13 | 59 | float T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,MOVAVG_T; //moving average objects |
Tanja2211 | 0:1594bb11fa13 | 60 | float MOVAVG_Positie1, MOVAVG_Positie2; |
Tanja2211 | 0:1594bb11fa13 | 61 | int positie; |
Tanja2211 | 0:1594bb11fa13 | 62 | |
Tanja2211 | 0:1594bb11fa13 | 63 | //*** FILTERS *** |
Tanja2211 | 0:1594bb11fa13 | 64 | arm_biquad_casd_df1_inst_f32 notchT; |
Tanja2211 | 0:1594bb11fa13 | 65 | arm_biquad_casd_df1_inst_f32 notchB; |
Tanja2211 | 0:1594bb11fa13 | 66 | //constants for 50Hz |
Tanja2211 | 0:1594bb11fa13 | 67 | float notch_const[]= {0.5857841106784856, -1.3007020142696517e-16, 0.5857841106784856, 1.3007020142696517e-16, -0.17156822135697122}; //{a0 a1 a2 -b1 -b2} |
Tanja2211 | 0:1594bb11fa13 | 68 | float notch_states[4]; |
Tanja2211 | 0:1594bb11fa13 | 69 | |
Tanja2211 | 0:1594bb11fa13 | 70 | arm_biquad_casd_df1_inst_f32 lowpassT; |
Tanja2211 | 0:1594bb11fa13 | 71 | arm_biquad_casd_df1_inst_f32 lowpassB; |
Tanja2211 | 0:1594bb11fa13 | 72 | //constants for 60Hz lowpass |
Tanja2211 | 0:1594bb11fa13 | 73 | float lowpass_const[] = {0.39133426347022965, 0.7826685269404593, 0.39133426347022965, -0.3695259524151476, -0.19581110146577096};//{a0 a1 a2 -b1 -b2} van online calculator |
Tanja2211 | 0:1594bb11fa13 | 74 | float lowpass_states[4]; |
Tanja2211 | 0:1594bb11fa13 | 75 | |
Tanja2211 | 0:1594bb11fa13 | 76 | arm_biquad_casd_df1_inst_f32 highpassT; |
Tanja2211 | 0:1594bb11fa13 | 77 | arm_biquad_casd_df1_inst_f32 highpassB; |
Tanja2211 | 0:1594bb11fa13 | 78 | //constants for 20Hz highpass |
Tanja2211 | 0:1594bb11fa13 | 79 | float highpass_const[] = {0.6389437261127494, -1.2778874522254988, 0.6389437261127494, 1.1429772843080923, -0.41279762014290533};//{a0 a1 a2 -b1 -b2} |
Tanja2211 | 0:1594bb11fa13 | 80 | float highpass_states[4]; |
Tanja2211 | 0:1594bb11fa13 | 81 | |
Jolein | 46:8b30338f3f9b | 82 | /*bool stop;*/ |
Tanja2211 | 33:2f9c21ac9175 | 83 | float pwm; |
Jolein | 48:5b1b90260239 | 84 | float new_pwmpos; |
Tanja2211 | 0:1594bb11fa13 | 85 | float new_pwm; |
Tanja2211 | 0:1594bb11fa13 | 86 | float PWM2 = 0.3; //PWM voor instellen hoek batje |
Jolein | 24:a165dcd86710 | 87 | int toestand = WACHTEN; //terugkeren? |
Jolein | 1:5d30a2ea2e11 | 88 | float setspeed = 0, V3=60, V2=40, V1 =30, Vreturn= 35;//V in counts/s |
Tanja2211 | 0:1594bb11fa13 | 89 | |
Tanja2211 | 0:1594bb11fa13 | 90 | |
Jolein | 24:a165dcd86710 | 91 | Encoder motor1(PTD5,PTD3); |
Jolein | 24:a165dcd86710 | 92 | Encoder motor2(PTD0,PTD2); |
Jolein | 24:a165dcd86710 | 93 | |
Tanja2211 | 0:1594bb11fa13 | 94 | DigitalOut motordir1(PTA4); |
Tanja2211 | 0:1594bb11fa13 | 95 | DigitalOut motordir2(PTC9); |
Tanja2211 | 0:1594bb11fa13 | 96 | PwmOut pwm_motor1(PTA5); |
Tanja2211 | 0:1594bb11fa13 | 97 | PwmOut pwm_motor2(PTC8); |
Tanja2211 | 0:1594bb11fa13 | 98 | |
Tanja2211 | 0:1594bb11fa13 | 99 | DigitalOut myled1(LED1);//red |
Tanja2211 | 0:1594bb11fa13 | 100 | DigitalOut myled2(LED2);//green |
Tanja2211 | 0:1594bb11fa13 | 101 | DigitalOut myled3(LED3);//blue |
Tanja2211 | 0:1594bb11fa13 | 102 | |
s1340735 | 36:0c8d4397c02f | 103 | DigitalOut rood(PTD1); |
s1340735 | 36:0c8d4397c02f | 104 | DigitalOut groen(PTA13); |
s1340735 | 36:0c8d4397c02f | 105 | DigitalOut blauw(PTA12); |
s1340735 | 36:0c8d4397c02f | 106 | DigitalOut wit(PTD4); |
s1340735 | 36:0c8d4397c02f | 107 | |
Tanja2211 | 0:1594bb11fa13 | 108 | /* FRDM-KL25Z built-in touch slider |
Tanja2211 | 0:1594bb11fa13 | 109 | ******************* |
Tanja2211 | 0:1594bb11fa13 | 110 | * * * * |
Tanja2211 | 0:1594bb11fa13 | 111 | * 1 * 2 * 3 * |
Tanja2211 | 0:1594bb11fa13 | 112 | * * * * |
Tanja2211 | 0:1594bb11fa13 | 113 | ******************* |
Tanja2211 | 0:1594bb11fa13 | 114 | * key 1 will light Red LED -> CALIBRATIE TRICEPS |
Tanja2211 | 0:1594bb11fa13 | 115 | * key 2 will light Green LED -> CALIBRATIE BICEPS |
Tanja2211 | 0:1594bb11fa13 | 116 | * key 3 will light Blue LED -> START*/ |
Tanja2211 | 0:1594bb11fa13 | 117 | |
Tanja2211 | 0:1594bb11fa13 | 118 | |
Tanja2211 | 0:1594bb11fa13 | 119 | enum standen {STAND1=0, STAND2=1, STAND3=2}; |
Tanja2211 | 0:1594bb11fa13 | 120 | standen hoek2 = STAND1; |
Tanja2211 | 0:1594bb11fa13 | 121 | |
Tanja2211 | 0:1594bb11fa13 | 122 | int main () |
Tanja2211 | 22:f3a827faa135 | 123 | { |
Tanja2211 | 0:1594bb11fa13 | 124 | pc.baud(115200); |
Tanja2211 | 0:1594bb11fa13 | 125 | |
Tanja2211 | 0:1594bb11fa13 | 126 | drempelwaardeT=0; |
Tanja2211 | 0:1594bb11fa13 | 127 | drempelwaardeB1=0; |
Tanja2211 | 0:1594bb11fa13 | 128 | drempelwaardeB2=0; |
Tanja2211 | 0:1594bb11fa13 | 129 | drempelwaardeB3=0; |
Tanja2211 | 0:1594bb11fa13 | 130 | |
Tanja2211 | 0:1594bb11fa13 | 131 | TouchButton TButton; |
Tanja2211 | 0:1594bb11fa13 | 132 | |
Tanja2211 | 0:1594bb11fa13 | 133 | myled1=1; |
Tanja2211 | 0:1594bb11fa13 | 134 | myled2=1; |
Tanja2211 | 0:1594bb11fa13 | 135 | myled3=1; |
Tanja2211 | 0:1594bb11fa13 | 136 | |
Tanja2211 | 0:1594bb11fa13 | 137 | int key=0; |
Tanja2211 | 0:1594bb11fa13 | 138 | |
Tanja2211 | 0:1594bb11fa13 | 139 | pc.printf("key 1 calibratie triceps\n"); |
Tanja2211 | 0:1594bb11fa13 | 140 | pc.printf("key 2 caliratie biceps\n"); |
Tanja2211 | 0:1594bb11fa13 | 141 | pc.printf("key 3 START\n"); |
Tanja2211 | 0:1594bb11fa13 | 142 | |
Tanja2211 | 0:1594bb11fa13 | 143 | while(true) { |
Tanja2211 | 0:1594bb11fa13 | 144 | |
Tanja2211 | 0:1594bb11fa13 | 145 | key = TButton.PressedButton(); |
Tanja2211 | 0:1594bb11fa13 | 146 | |
Tanja2211 | 0:1594bb11fa13 | 147 | if (key==1) { |
Tanja2211 | 0:1594bb11fa13 | 148 | //rood |
Tanja2211 | 0:1594bb11fa13 | 149 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 150 | myled2 = 1; |
Tanja2211 | 0:1594bb11fa13 | 151 | myled3 = 1; |
s1340735 | 36:0c8d4397c02f | 152 | rood=1; |
Tanja2211 | 0:1594bb11fa13 | 153 | |
s1340735 | 21:b7fb79882cb8 | 154 | /*pc.printf("calibratie tricep aan\n"); |
Tanja2211 | 0:1594bb11fa13 | 155 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 156 | |
Tanja2211 | 0:1594bb11fa13 | 157 | Calibratie_Triceps(); |
Tanja2211 | 0:1594bb11fa13 | 158 | drempelwaardeT=MOVAVG_T-1; |
Tanja2211 | 0:1594bb11fa13 | 159 | pc.printf("drempelwaarde triceps is %f\r\n", drempelwaardeT); |
Tanja2211 | 0:1594bb11fa13 | 160 | |
Tanja2211 | 0:1594bb11fa13 | 161 | pc.printf("calibratie tricep klaar,\n"); |
Tanja2211 | 0:1594bb11fa13 | 162 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 163 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 164 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 165 | wit=1; |
s1340735 | 36:0c8d4397c02f | 166 | |
Tanja2211 | 0:1594bb11fa13 | 167 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 168 | |
Tanja2211 | 0:1594bb11fa13 | 169 | myled1=1; |
Tanja2211 | 0:1594bb11fa13 | 170 | myled2=1; |
s1340735 | 36:0c8d4397c02f | 171 | myled3=1; |
s1340735 | 36:0c8d4397c02f | 172 | rood=0; |
s1340735 | 36:0c8d4397c02f | 173 | wit=0;*/ |
Tanja2211 | 0:1594bb11fa13 | 174 | } |
Tanja2211 | 0:1594bb11fa13 | 175 | if (key==2) { |
Tanja2211 | 0:1594bb11fa13 | 176 | //green |
Tanja2211 | 0:1594bb11fa13 | 177 | myled1 = 1; |
Tanja2211 | 0:1594bb11fa13 | 178 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 179 | myled3 = 1; |
s1340735 | 36:0c8d4397c02f | 180 | groen=1; |
Tanja2211 | 0:1594bb11fa13 | 181 | |
s1340735 | 21:b7fb79882cb8 | 182 | /*pc.printf("calibratie bicep snelheid 1 aan\n"); |
Tanja2211 | 0:1594bb11fa13 | 183 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 184 | |
Tanja2211 | 0:1594bb11fa13 | 185 | Calibratie_Biceps(); |
Tanja2211 | 0:1594bb11fa13 | 186 | drempelwaardeB1=MOVAVG_B-1; |
Tanja2211 | 0:1594bb11fa13 | 187 | pc.printf("drempelwaarde snelheid 1 is %f\r\n", drempelwaardeB1); |
Tanja2211 | 0:1594bb11fa13 | 188 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 189 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 190 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 191 | wit=1; |
Tanja2211 | 0:1594bb11fa13 | 192 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 193 | |
s1340735 | 36:0c8d4397c02f | 194 | wit=0; |
Tanja2211 | 0:1594bb11fa13 | 195 | myled1 = 1; |
Tanja2211 | 0:1594bb11fa13 | 196 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 197 | myled3 = 1; |
Tanja2211 | 0:1594bb11fa13 | 198 | |
Tanja2211 | 0:1594bb11fa13 | 199 | pc.printf("calibratie biceps snelheid 2 aan\n"); |
Tanja2211 | 0:1594bb11fa13 | 200 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 201 | |
Tanja2211 | 0:1594bb11fa13 | 202 | Calibratie_Biceps(); |
Tanja2211 | 0:1594bb11fa13 | 203 | drempelwaardeB2=MOVAVG_B-1; |
Tanja2211 | 0:1594bb11fa13 | 204 | pc.printf("drempelwaarde snelheid 2 is %f\r\n", drempelwaardeB2); |
Tanja2211 | 0:1594bb11fa13 | 205 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 206 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 207 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 208 | wit=1; |
s1340735 | 36:0c8d4397c02f | 209 | |
Tanja2211 | 0:1594bb11fa13 | 210 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 211 | |
s1340735 | 36:0c8d4397c02f | 212 | wit=0; |
Tanja2211 | 0:1594bb11fa13 | 213 | myled1 = 1; |
Tanja2211 | 0:1594bb11fa13 | 214 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 215 | myled3 = 1; |
Tanja2211 | 0:1594bb11fa13 | 216 | |
Tanja2211 | 0:1594bb11fa13 | 217 | pc.printf("calibratie biceps snelheid 3 aan\n"); |
Tanja2211 | 0:1594bb11fa13 | 218 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 219 | Calibratie_Biceps(); |
Tanja2211 | 0:1594bb11fa13 | 220 | drempelwaardeB3=MOVAVG_B-1; |
Tanja2211 | 0:1594bb11fa13 | 221 | pc.printf("drempelwaarde snelheid 3 is %f\r\n", drempelwaardeB3); |
Tanja2211 | 0:1594bb11fa13 | 222 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 223 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 224 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 225 | wit=1; |
s1340735 | 36:0c8d4397c02f | 226 | |
Tanja2211 | 0:1594bb11fa13 | 227 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 228 | |
Tanja2211 | 0:1594bb11fa13 | 229 | pc.printf("caliratie biceps is klaar\n"); |
s1340735 | 36:0c8d4397c02f | 230 | wit=0; |
s1340735 | 36:0c8d4397c02f | 231 | groen=0; |
Tanja2211 | 0:1594bb11fa13 | 232 | myled1=1; |
Tanja2211 | 0:1594bb11fa13 | 233 | myled2=1; |
s1340735 | 21:b7fb79882cb8 | 234 | myled3=1;*/ |
Tanja2211 | 0:1594bb11fa13 | 235 | } |
Tanja2211 | 0:1594bb11fa13 | 236 | |
Tanja2211 | 0:1594bb11fa13 | 237 | if (key==3) { |
Tanja2211 | 0:1594bb11fa13 | 238 | //blue |
Tanja2211 | 0:1594bb11fa13 | 239 | myled1 = 1; |
Tanja2211 | 0:1594bb11fa13 | 240 | myled2 = 1; |
Tanja2211 | 0:1594bb11fa13 | 241 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 242 | blauw=1; |
s1340735 | 21:b7fb79882cb8 | 243 | /*wait(3); |
Tanja2211 | 0:1594bb11fa13 | 244 | |
Tanja2211 | 0:1594bb11fa13 | 245 | if(drempelwaardeT==0) { |
Tanja2211 | 0:1594bb11fa13 | 246 | pc.printf("geen waarde calibratie TRICEPS \n"); |
Tanja2211 | 0:1594bb11fa13 | 247 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 248 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 249 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 250 | wit=1; |
s1340735 | 36:0c8d4397c02f | 251 | rood=1; |
Tanja2211 | 0:1594bb11fa13 | 252 | } |
Tanja2211 | 0:1594bb11fa13 | 253 | if (drempelwaardeB1==0) { |
Tanja2211 | 0:1594bb11fa13 | 254 | pc.printf("geen waarde calibratie BICEPS 1 \n"); |
Tanja2211 | 0:1594bb11fa13 | 255 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 256 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 257 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 258 | wit=1; |
s1340735 | 36:0c8d4397c02f | 259 | groen=1; |
Tanja2211 | 0:1594bb11fa13 | 260 | } |
Tanja2211 | 0:1594bb11fa13 | 261 | if (drempelwaardeB2==0) { |
Tanja2211 | 0:1594bb11fa13 | 262 | pc.printf("geen waarde calibratie BICEPS 2 \n"); |
Tanja2211 | 0:1594bb11fa13 | 263 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 264 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 265 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 266 | wit=1; |
s1340735 | 36:0c8d4397c02f | 267 | groen=1; |
Tanja2211 | 0:1594bb11fa13 | 268 | } |
Tanja2211 | 0:1594bb11fa13 | 269 | if (drempelwaardeB3==0) { |
Tanja2211 | 0:1594bb11fa13 | 270 | pc.printf("geen waarde calibratie BICEPS 3 \n"); |
Tanja2211 | 0:1594bb11fa13 | 271 | myled1 = 0; |
Tanja2211 | 0:1594bb11fa13 | 272 | myled2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 273 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 274 | wit=1; |
s1340735 | 36:0c8d4397c02f | 275 | groen=1; |
s1340735 | 21:b7fb79882cb8 | 276 | } else {*/ |
Tanja2211 | 0:1594bb11fa13 | 277 | |
Tanja2211 | 22:f3a827faa135 | 278 | /*pc.printf("eerst positie dan snelheid aangeven /n"); |
Tanja2211 | 0:1594bb11fa13 | 279 | |
Tanja2211 | 22:f3a827faa135 | 280 | //bepaling van positie met triceps 1 |
Tanja2211 | 22:f3a827faa135 | 281 | Ticker log_timerT1; |
Tanja2211 | 22:f3a827faa135 | 282 | |
Tanja2211 | 22:f3a827faa135 | 283 | arm_biquad_cascade_df1_init_f32(¬chT,1,notch_const,notch_states); |
Tanja2211 | 22:f3a827faa135 | 284 | arm_biquad_cascade_df1_init_f32(&lowpassT,1,lowpass_const,lowpass_states); |
Tanja2211 | 22:f3a827faa135 | 285 | arm_biquad_cascade_df1_init_f32(&highpassT,1,highpass_const,highpass_states); |
Tanja2211 | 0:1594bb11fa13 | 286 | |
Tanja2211 | 22:f3a827faa135 | 287 | myled1 = 0; |
Tanja2211 | 22:f3a827faa135 | 288 | myled2 = 1; |
Tanja2211 | 22:f3a827faa135 | 289 | myled3 = 1; |
s1340735 | 36:0c8d4397c02f | 290 | rood=1; |
Tanja2211 | 22:f3a827faa135 | 291 | |
Tanja2211 | 22:f3a827faa135 | 292 | log_timerT1.attach(Triceps, 0.005); |
Tanja2211 | 22:f3a827faa135 | 293 | wait(2); |
Tanja2211 | 22:f3a827faa135 | 294 | log_timerT1.detach(); |
Tanja2211 | 0:1594bb11fa13 | 295 | |
Tanja2211 | 22:f3a827faa135 | 296 | // positie van batje met behulp van Triceps |
Tanja2211 | 0:1594bb11fa13 | 297 | |
Tanja2211 | 22:f3a827faa135 | 298 | if (MOVAVG_T >= drempelwaardeT) { |
Tanja2211 | 22:f3a827faa135 | 299 | yT1=1; |
Tanja2211 | 22:f3a827faa135 | 300 | } else { |
Tanja2211 | 22:f3a827faa135 | 301 | yT1=0; |
Tanja2211 | 22:f3a827faa135 | 302 | } |
Tanja2211 | 0:1594bb11fa13 | 303 | |
Tanja2211 | 22:f3a827faa135 | 304 | pc.printf("Triceps meting 1 is klaar.\n"); |
Tanja2211 | 22:f3a827faa135 | 305 | myled1 = 1; |
Tanja2211 | 22:f3a827faa135 | 306 | myled2 = 1; |
Tanja2211 | 22:f3a827faa135 | 307 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 308 | rood=0; |
s1340735 | 36:0c8d4397c02f | 309 | |
Tanja2211 | 22:f3a827faa135 | 310 | wait(3); |
Tanja2211 | 0:1594bb11fa13 | 311 | |
Tanja2211 | 22:f3a827faa135 | 312 | //bepaling van positie met tricep 2 |
Tanja2211 | 22:f3a827faa135 | 313 | Ticker log_timerT2; |
Tanja2211 | 22:f3a827faa135 | 314 | |
Tanja2211 | 22:f3a827faa135 | 315 | arm_biquad_cascade_df1_init_f32(¬chT,1,notch_const,notch_states); |
Tanja2211 | 22:f3a827faa135 | 316 | arm_biquad_cascade_df1_init_f32(&lowpassT,1,lowpass_const,lowpass_states); |
Tanja2211 | 22:f3a827faa135 | 317 | arm_biquad_cascade_df1_init_f32(&highpassT,1,highpass_const,highpass_states); |
Tanja2211 | 22:f3a827faa135 | 318 | |
Tanja2211 | 22:f3a827faa135 | 319 | myled1 = 0; |
Tanja2211 | 22:f3a827faa135 | 320 | myled2 = 1; |
Tanja2211 | 22:f3a827faa135 | 321 | myled3 = 1; |
s1340735 | 36:0c8d4397c02f | 322 | rood=1; |
Tanja2211 | 0:1594bb11fa13 | 323 | |
Tanja2211 | 22:f3a827faa135 | 324 | log_timerT2.attach(Triceps, 0.005); |
Tanja2211 | 22:f3a827faa135 | 325 | wait(2); |
Tanja2211 | 22:f3a827faa135 | 326 | log_timerT2.detach(); |
Tanja2211 | 0:1594bb11fa13 | 327 | |
Tanja2211 | 22:f3a827faa135 | 328 | if (MOVAVG_T >= drempelwaardeT) { |
Tanja2211 | 22:f3a827faa135 | 329 | yT2=1; |
Tanja2211 | 22:f3a827faa135 | 330 | } else { |
Tanja2211 | 22:f3a827faa135 | 331 | yT2=0; |
Tanja2211 | 22:f3a827faa135 | 332 | } |
Tanja2211 | 22:f3a827faa135 | 333 | |
Tanja2211 | 22:f3a827faa135 | 334 | pc.printf("Triceps meting 2 is klaar.\n"); |
Tanja2211 | 22:f3a827faa135 | 335 | myled1 = 1; |
Tanja2211 | 22:f3a827faa135 | 336 | myled2 = 1; |
Tanja2211 | 22:f3a827faa135 | 337 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 338 | rood=0; |
Tanja2211 | 22:f3a827faa135 | 339 | |
Tanja2211 | 22:f3a827faa135 | 340 | //*** INPUT MOTOR 2 *** |
Tanja2211 | 22:f3a827faa135 | 341 | positie=yT1+yT2; |
Tanja2211 | 0:1594bb11fa13 | 342 | |
Tanja2211 | 22:f3a827faa135 | 343 | //controle positie op scherm |
Tanja2211 | 22:f3a827faa135 | 344 | if (positie==0) { |
Tanja2211 | 22:f3a827faa135 | 345 | pc.printf("Motor 2 blijft op stand 1\n"); |
Tanja2211 | 22:f3a827faa135 | 346 | } else { |
Tanja2211 | 22:f3a827faa135 | 347 | if (positie==1) { |
Tanja2211 | 22:f3a827faa135 | 348 | pc.printf("Motor 2 gaat naar stand 2\n"); |
Tanja2211 | 22:f3a827faa135 | 349 | } else { |
Tanja2211 | 22:f3a827faa135 | 350 | if (positie==2) { |
Tanja2211 | 22:f3a827faa135 | 351 | pc.printf("Motor 2 gaat naar stand 3\n"); |
Tanja2211 | 22:f3a827faa135 | 352 | } |
Tanja2211 | 22:f3a827faa135 | 353 | } |
Tanja2211 | 22:f3a827faa135 | 354 | } |
Tanja2211 | 0:1594bb11fa13 | 355 | |
Tanja2211 | 22:f3a827faa135 | 356 | Ticker looptimer2; |
Tanja2211 | 22:f3a827faa135 | 357 | looptimer2.attach(motor2aansturing,TSAMP1); |
Tanja2211 | 22:f3a827faa135 | 358 | wait(8); |
Tanja2211 | 22:f3a827faa135 | 359 | looptimer2.detach(); |
Tanja2211 | 22:f3a827faa135 | 360 | pc.printf("Detach Motor 1\n"); */ |
Tanja2211 | 22:f3a827faa135 | 361 | |
Tanja2211 | 22:f3a827faa135 | 362 | //------------------------------------------------------------------------------------------------------------------------------- eind aansturing motor 2 |
Tanja2211 | 22:f3a827faa135 | 363 | wait(2); |
Tanja2211 | 22:f3a827faa135 | 364 | /* Ticker log_timerB; |
Tanja2211 | 0:1594bb11fa13 | 365 | |
Tanja2211 | 22:f3a827faa135 | 366 | arm_biquad_cascade_df1_init_f32(¬chB,1,notch_const,notch_states); |
Tanja2211 | 22:f3a827faa135 | 367 | arm_biquad_cascade_df1_init_f32(&lowpassB,1,lowpass_const,lowpass_states); |
Tanja2211 | 22:f3a827faa135 | 368 | arm_biquad_cascade_df1_init_f32(&highpassB,1,highpass_const,highpass_states); |
Tanja2211 | 22:f3a827faa135 | 369 | |
Tanja2211 | 22:f3a827faa135 | 370 | myled1 = 1; |
Tanja2211 | 22:f3a827faa135 | 371 | myled2 = 0; |
Tanja2211 | 22:f3a827faa135 | 372 | myled3 = 1; |
s1340735 | 36:0c8d4397c02f | 373 | groen=1; |
Tanja2211 | 22:f3a827faa135 | 374 | |
Tanja2211 | 22:f3a827faa135 | 375 | log_timerB.attach(Biceps,0.005); |
Tanja2211 | 22:f3a827faa135 | 376 | wait(2); |
Tanja2211 | 22:f3a827faa135 | 377 | log_timerB.detach(); |
Tanja2211 | 22:f3a827faa135 | 378 | |
Tanja2211 | 22:f3a827faa135 | 379 | //bepaling van snelheidsstand met biceps |
Tanja2211 | 0:1594bb11fa13 | 380 | |
Tanja2211 | 22:f3a827faa135 | 381 | if (MOVAVG_B >= drempelwaardeB1) { |
Tanja2211 | 22:f3a827faa135 | 382 | yB1=1; |
Tanja2211 | 22:f3a827faa135 | 383 | if (MOVAVG_B >= drempelwaardeB2) { |
Tanja2211 | 22:f3a827faa135 | 384 | yB2=1; |
Tanja2211 | 22:f3a827faa135 | 385 | if (MOVAVG_B >= drempelwaardeB3) { |
Tanja2211 | 22:f3a827faa135 | 386 | yB3=1; |
Tanja2211 | 22:f3a827faa135 | 387 | } else { |
Tanja2211 | 22:f3a827faa135 | 388 | yB3=0; |
Tanja2211 | 22:f3a827faa135 | 389 | } |
Tanja2211 | 22:f3a827faa135 | 390 | } else { |
Tanja2211 | 22:f3a827faa135 | 391 | yB2=0; |
Tanja2211 | 22:f3a827faa135 | 392 | } |
Tanja2211 | 22:f3a827faa135 | 393 | } else { |
Tanja2211 | 22:f3a827faa135 | 394 | yB1=0; |
Tanja2211 | 22:f3a827faa135 | 395 | } |
Tanja2211 | 0:1594bb11fa13 | 396 | |
Tanja2211 | 22:f3a827faa135 | 397 | pc.printf("Biceps meting is klaar.\n"); |
Tanja2211 | 22:f3a827faa135 | 398 | myled1 = 1; |
Tanja2211 | 22:f3a827faa135 | 399 | myled2 = 1; |
Tanja2211 | 22:f3a827faa135 | 400 | myled3 = 0; |
s1340735 | 36:0c8d4397c02f | 401 | groen=0; |
Tanja2211 | 22:f3a827faa135 | 402 | |
Tanja2211 | 22:f3a827faa135 | 403 | //*** INPUT MOTOR 1 *** |
Tanja2211 | 22:f3a827faa135 | 404 | snelheidsstand=yB1+yB2+yB3; */ |
Tanja2211 | 22:f3a827faa135 | 405 | |
Tanja2211 | 22:f3a827faa135 | 406 | snelheidsstand=3; |
Tanja2211 | 22:f3a827faa135 | 407 | |
Tanja2211 | 22:f3a827faa135 | 408 | //controle snelheidsstand op scherm |
Tanja2211 | 22:f3a827faa135 | 409 | if (snelheidsstand==0) { |
Tanja2211 | 22:f3a827faa135 | 410 | pc.printf("Motor 1 beweegt niet \n"); |
Tanja2211 | 22:f3a827faa135 | 411 | } else { |
Tanja2211 | 22:f3a827faa135 | 412 | if (snelheidsstand==1) { |
Tanja2211 | 22:f3a827faa135 | 413 | pc.printf("Motor 1 beweegt met snelheid 1 \n"); |
Tanja2211 | 0:1594bb11fa13 | 414 | } else { |
Tanja2211 | 22:f3a827faa135 | 415 | if (snelheidsstand==2) { |
Tanja2211 | 22:f3a827faa135 | 416 | pc.printf("Motor 1 beweegt met snelheid 2 \n"); |
Tanja2211 | 0:1594bb11fa13 | 417 | } else { |
Tanja2211 | 22:f3a827faa135 | 418 | if (snelheidsstand==3) { |
Tanja2211 | 22:f3a827faa135 | 419 | pc.printf("Motor 1 beweegt met snelheid 3 \n"); |
Tanja2211 | 0:1594bb11fa13 | 420 | } |
Tanja2211 | 0:1594bb11fa13 | 421 | } |
Tanja2211 | 0:1594bb11fa13 | 422 | } |
Tanja2211 | 22:f3a827faa135 | 423 | } |
Tanja2211 | 0:1594bb11fa13 | 424 | |
Tanja2211 | 34:688120048afb | 425 | Ticker looptimer1; |
Tanja2211 | 22:f3a827faa135 | 426 | //pwm_motor1.write(0.3); |
Tanja2211 | 22:f3a827faa135 | 427 | motordir1 = 1; |
Jolein | 46:8b30338f3f9b | 428 | //stop = 0; |
Tanja2211 | 22:f3a827faa135 | 429 | looptimer1.attach(motor1aansturing,TSAMP1); |
Tanja2211 | 29:f26796cca47f | 430 | wait(2); ////is aan te passen (tijd die nodig is om balletje te slaan |
Tanja2211 | 22:f3a827faa135 | 431 | looptimer1.detach(); |
Tanja2211 | 34:688120048afb | 432 | pc.printf("detachMotor1\n"); |
s1340735 | 36:0c8d4397c02f | 433 | |
s1340735 | 36:0c8d4397c02f | 434 | pid(0,0,true); |
s1340735 | 36:0c8d4397c02f | 435 | |
Tanja2211 | 22:f3a827faa135 | 436 | Ticker looptimer3; |
Jolein | 40:207eb8ab507a | 437 | looptimer3.attach(motor1aansturingdeel2,TSAMP1); //of TSAMP2?.... |
Tanja2211 | 33:2f9c21ac9175 | 438 | wait(5); ////is aan te passen (tijd die nodig is om balletje te slaan |
Tanja2211 | 22:f3a827faa135 | 439 | looptimer3.detach(); |
Tanja2211 | 22:f3a827faa135 | 440 | pc.printf("detachMotor1\n"); |
Tanja2211 | 0:1594bb11fa13 | 441 | |
Tanja2211 | 22:f3a827faa135 | 442 | pwm_motor1.write(0); |
Jolein | 48:5b1b90260239 | 443 | toestand = WACHTEN; //hierheen verplaatst vanaf motor1aansturingdeel2. Belangrijk!! niet weghalen!! |
Tanja2211 | 0:1594bb11fa13 | 444 | |
Tanja2211 | 22:f3a827faa135 | 445 | myled1=1; |
Tanja2211 | 22:f3a827faa135 | 446 | myled2=1; |
Tanja2211 | 22:f3a827faa135 | 447 | myled3=1; |
s1340735 | 36:0c8d4397c02f | 448 | groen=0; |
s1340735 | 36:0c8d4397c02f | 449 | blauw=0; |
s1340735 | 36:0c8d4397c02f | 450 | } |
s1340735 | 36:0c8d4397c02f | 451 | } |
Tanja2211 | 22:f3a827faa135 | 452 | //} |
Tanja2211 | 0:1594bb11fa13 | 453 | }//end int main |
Tanja2211 | 0:1594bb11fa13 | 454 | |
Tanja2211 | 0:1594bb11fa13 | 455 | |
Tanja2211 | 9:ba7f541cef3a | 456 | float pid(float setspeed, float measurement, bool reset ) |
Tanja2211 | 0:1594bb11fa13 | 457 | { |
Tanja2211 | 0:1594bb11fa13 | 458 | float error; |
Tanja2211 | 0:1594bb11fa13 | 459 | static float prev_error = 0; |
Tanja2211 | 0:1594bb11fa13 | 460 | float out_p = 0; |
Tanja2211 | 0:1594bb11fa13 | 461 | static float out_i = 0; |
Tanja2211 | 0:1594bb11fa13 | 462 | float out_d = 0; |
Tanja2211 | 22:f3a827faa135 | 463 | if(reset==true) { |
Jolein | 13:722697791695 | 464 | out_i = 0; |
Jolein | 13:722697791695 | 465 | prev_error = 0; |
Jolein | 13:722697791695 | 466 | } |
Tanja2211 | 0:1594bb11fa13 | 467 | error = setspeed-measurement; |
Tanja2211 | 0:1594bb11fa13 | 468 | out_p = error*K_P; |
Tanja2211 | 0:1594bb11fa13 | 469 | out_i += error*K_I; |
Tanja2211 | 0:1594bb11fa13 | 470 | out_d = (error-prev_error)*K_D; |
Tanja2211 | 0:1594bb11fa13 | 471 | prev_error = error; |
Tanja2211 | 0:1594bb11fa13 | 472 | return out_p + out_i + out_d; |
Tanja2211 | 0:1594bb11fa13 | 473 | } |
Tanja2211 | 0:1594bb11fa13 | 474 | |
Jolein | 49:7ae21c58ba92 | 475 | float pidpositie(float setposition, float measurement) |
Jolein | 24:a165dcd86710 | 476 | { |
Jolein | 24:a165dcd86710 | 477 | float error; |
Jolein | 24:a165dcd86710 | 478 | static float prev_error = 0; |
Jolein | 24:a165dcd86710 | 479 | float out_p = 0; |
Jolein | 24:a165dcd86710 | 480 | static float out_i = 0; |
Jolein | 24:a165dcd86710 | 481 | float out_d = 0; |
Tanja2211 | 27:9dea548d6d6c | 482 | error = setposition-measurement; |
Jolein | 24:a165dcd86710 | 483 | out_p = error*K_Pp; |
Jolein | 24:a165dcd86710 | 484 | out_i += error*K_Ip; |
Jolein | 24:a165dcd86710 | 485 | out_d = (error-prev_error)*K_Dp; |
Jolein | 24:a165dcd86710 | 486 | prev_error = error; |
Jolein | 24:a165dcd86710 | 487 | return out_p + out_i + out_d; |
Jolein | 24:a165dcd86710 | 488 | } |
Jolein | 24:a165dcd86710 | 489 | |
Tanja2211 | 0:1594bb11fa13 | 490 | void Triceps() |
Tanja2211 | 0:1594bb11fa13 | 491 | { |
Tanja2211 | 0:1594bb11fa13 | 492 | //Triceps lezen |
Tanja2211 | 0:1594bb11fa13 | 493 | emg_valueT = emgT.read_u16(); |
Tanja2211 | 0:1594bb11fa13 | 494 | emg_value_f32T = emgT.read(); |
Tanja2211 | 0:1594bb11fa13 | 495 | |
Tanja2211 | 0:1594bb11fa13 | 496 | //Triceps filteren |
Tanja2211 | 0:1594bb11fa13 | 497 | arm_biquad_cascade_df1_f32(¬chT, &emg_value_f32T, &filtered_emgT, 1); |
Tanja2211 | 0:1594bb11fa13 | 498 | arm_biquad_cascade_df1_f32(&lowpassT, &filtered_emgT, &filtered_emgT, 1 ); |
Tanja2211 | 0:1594bb11fa13 | 499 | filtered_emgT = fabs(filtered_emgT); |
Tanja2211 | 0:1594bb11fa13 | 500 | arm_biquad_cascade_df1_f32(&highpassT, &filtered_emgT, &filtered_emgT, 1 ); |
Tanja2211 | 0:1594bb11fa13 | 501 | filtered_emgT = fabs(filtered_emgT); |
Tanja2211 | 0:1594bb11fa13 | 502 | |
Tanja2211 | 0:1594bb11fa13 | 503 | //Triceps moving average |
Tanja2211 | 0:1594bb11fa13 | 504 | T0=filtered_emgT*1000; |
Tanja2211 | 0:1594bb11fa13 | 505 | MOVAVG_T=T0*0.03333+T1*0.03333+T2*0.03333+T3*0.03333+T4*0.03333+T5*0.03333+T6*0.03333+T7*0.03333+T8*0.03333+T9*0.03333+T10*0.03333+T11*0.03333+T12*0.03333+T13*0.03333+T14*0.03333+T15*0.03333+T16*0.03333+T17*0.03333+T18*0.03333+T19*0.03333+T20*0.03333+T21*0.03333+T22*0.03333+T23*0.03333+T24*0.03333+T25*0.03333+T26*0.03333+T27*0.03333+T28*0.03333+T29*0.03333; |
Tanja2211 | 0:1594bb11fa13 | 506 | T29=T28; |
Tanja2211 | 0:1594bb11fa13 | 507 | T28=T27; |
Tanja2211 | 0:1594bb11fa13 | 508 | T27=T26; |
Tanja2211 | 0:1594bb11fa13 | 509 | T26=T25; |
Tanja2211 | 0:1594bb11fa13 | 510 | T25=T24; |
Tanja2211 | 0:1594bb11fa13 | 511 | T24=T23; |
Tanja2211 | 0:1594bb11fa13 | 512 | T23=T22; |
Tanja2211 | 0:1594bb11fa13 | 513 | T22=T21; |
Tanja2211 | 0:1594bb11fa13 | 514 | T21=T20; |
Tanja2211 | 0:1594bb11fa13 | 515 | T20=T19; |
Tanja2211 | 0:1594bb11fa13 | 516 | T19=T18; |
Tanja2211 | 0:1594bb11fa13 | 517 | T18=T17; |
Tanja2211 | 0:1594bb11fa13 | 518 | T17=T16; |
Tanja2211 | 0:1594bb11fa13 | 519 | T16=T15; |
Tanja2211 | 0:1594bb11fa13 | 520 | T15=T14; |
Tanja2211 | 0:1594bb11fa13 | 521 | T14=T13; |
Tanja2211 | 0:1594bb11fa13 | 522 | T13=T12; |
Tanja2211 | 0:1594bb11fa13 | 523 | T12=T11; |
Tanja2211 | 0:1594bb11fa13 | 524 | T11=T10; |
Tanja2211 | 0:1594bb11fa13 | 525 | T10=T9; |
Tanja2211 | 0:1594bb11fa13 | 526 | T9=T8; |
Tanja2211 | 0:1594bb11fa13 | 527 | T8=T7; |
Tanja2211 | 0:1594bb11fa13 | 528 | T7=T6; |
Tanja2211 | 0:1594bb11fa13 | 529 | T6=T5; |
Tanja2211 | 0:1594bb11fa13 | 530 | T5=T4; |
Tanja2211 | 0:1594bb11fa13 | 531 | T4=T3; |
Tanja2211 | 0:1594bb11fa13 | 532 | T3=T2; |
Tanja2211 | 0:1594bb11fa13 | 533 | T2=T1; |
Tanja2211 | 0:1594bb11fa13 | 534 | T1=T0; |
Tanja2211 | 0:1594bb11fa13 | 535 | |
Tanja2211 | 0:1594bb11fa13 | 536 | //sturen naar scherm (Realterm) |
Tanja2211 | 0:1594bb11fa13 | 537 | pc.printf("Moving average T %f\r\n",MOVAVG_T); |
Tanja2211 | 0:1594bb11fa13 | 538 | |
Tanja2211 | 0:1594bb11fa13 | 539 | //sturen naar HID Scope |
Tanja2211 | 20:99a8e9da2d6d | 540 | /*scope.set(0,emg_valueT); //ruwe data |
Tanja2211 | 0:1594bb11fa13 | 541 | scope.set(1,filtered_emgT); //filtered |
Tanja2211 | 20:99a8e9da2d6d | 542 | scope.send();*/ |
Tanja2211 | 0:1594bb11fa13 | 543 | } |
Tanja2211 | 0:1594bb11fa13 | 544 | |
Tanja2211 | 0:1594bb11fa13 | 545 | void Biceps() |
Tanja2211 | 0:1594bb11fa13 | 546 | { |
Tanja2211 | 0:1594bb11fa13 | 547 | //Biceps lezen |
Tanja2211 | 0:1594bb11fa13 | 548 | emg_valueB = emgB.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V) |
Tanja2211 | 0:1594bb11fa13 | 549 | emg_value_f32B = emgB.read(); |
Tanja2211 | 0:1594bb11fa13 | 550 | |
Tanja2211 | 0:1594bb11fa13 | 551 | //Biceps filteren |
Tanja2211 | 0:1594bb11fa13 | 552 | arm_biquad_cascade_df1_f32(¬chB, &emg_value_f32B, &filtered_emgB, 1 ); |
Tanja2211 | 0:1594bb11fa13 | 553 | arm_biquad_cascade_df1_f32(&lowpassB, &filtered_emgB, &filtered_emgB, 1 ); |
Tanja2211 | 0:1594bb11fa13 | 554 | filtered_emgB = fabs(filtered_emgB); |
Tanja2211 | 0:1594bb11fa13 | 555 | arm_biquad_cascade_df1_f32(&highpassB, &filtered_emgB, &filtered_emgB, 1 ); |
Tanja2211 | 0:1594bb11fa13 | 556 | filtered_emgB = fabs(filtered_emgB); |
Tanja2211 | 0:1594bb11fa13 | 557 | |
Tanja2211 | 0:1594bb11fa13 | 558 | //Biceps moving average |
Tanja2211 | 0:1594bb11fa13 | 559 | B0=filtered_emgB*1000; |
Tanja2211 | 0:1594bb11fa13 | 560 | MOVAVG_B=B0*0.01667+B1*0.01667+B2*0.01667+B3*0.01667+B4*0.01667+B5*0.01667+B6*0.01667+B7*0.01667+B8*0.01667+B9*0.01667+B10*0.01667+B11*0.01667+B12*0.01667+B13*0.01667+B14*0.01667+B15*0.01667+B16*0.01667+B17*0.01667+B18*0.01667+B19*0.01667+B20*0.01667+B21*0.01667+B22*0.01667+B23*0.01667+B24*0.01667+B25*0.01667+B26*0.01667+B27*0.01667+B28*0.01667+B29*0.01667+B30*0.01667+B31*0.01667+B32*0.01667+B33*0.01667+B34*0.01667+B35*0.01667+B36*0.01667+B37*0.01667+B38*0.01667+B39*0.01667+B40*0.01667+B41*0.01667+B42*0.01667+B43*0.01667+B44*0.01667+B45*0.01667+B46*0.01667+B47*0.01667+B48*0.01667+B49*0.01667+B50*0.01667+B51*0.01667+B52*0.01667+B53*0.01667+B54*0.01667+B55*0.01667+B56*0.01667+B57*0.01667+B58*0.01667+B59*0.01667; |
Tanja2211 | 0:1594bb11fa13 | 561 | B59=B58; |
Tanja2211 | 0:1594bb11fa13 | 562 | B58=B57; |
Tanja2211 | 0:1594bb11fa13 | 563 | B57=B56; |
Tanja2211 | 0:1594bb11fa13 | 564 | B56=B55; |
Tanja2211 | 0:1594bb11fa13 | 565 | B55=B54; |
Tanja2211 | 0:1594bb11fa13 | 566 | B54=B53; |
Tanja2211 | 0:1594bb11fa13 | 567 | B53=B52; |
Tanja2211 | 0:1594bb11fa13 | 568 | B52=B51; |
Tanja2211 | 0:1594bb11fa13 | 569 | B51=B50; |
Tanja2211 | 0:1594bb11fa13 | 570 | B50=B48; |
Tanja2211 | 0:1594bb11fa13 | 571 | B49=B49; |
Tanja2211 | 0:1594bb11fa13 | 572 | B48=B47; |
Tanja2211 | 0:1594bb11fa13 | 573 | B47=B46; |
Tanja2211 | 0:1594bb11fa13 | 574 | B46=B45; |
Tanja2211 | 0:1594bb11fa13 | 575 | B45=B44; |
Tanja2211 | 0:1594bb11fa13 | 576 | B44=B43; |
Tanja2211 | 0:1594bb11fa13 | 577 | B43=B42; |
Tanja2211 | 0:1594bb11fa13 | 578 | B42=B41; |
Tanja2211 | 0:1594bb11fa13 | 579 | B41=B40; |
Tanja2211 | 0:1594bb11fa13 | 580 | B40=B39; |
Tanja2211 | 0:1594bb11fa13 | 581 | B39=B38; |
Tanja2211 | 0:1594bb11fa13 | 582 | B38=B37; |
Tanja2211 | 0:1594bb11fa13 | 583 | B37=B36; |
Tanja2211 | 0:1594bb11fa13 | 584 | B36=B35; |
Tanja2211 | 0:1594bb11fa13 | 585 | B35=B34; |
Tanja2211 | 0:1594bb11fa13 | 586 | B34=B33; |
Tanja2211 | 0:1594bb11fa13 | 587 | B33=B32; |
Tanja2211 | 0:1594bb11fa13 | 588 | B32=B31; |
Tanja2211 | 0:1594bb11fa13 | 589 | B31=B30; |
Tanja2211 | 0:1594bb11fa13 | 590 | B30=B29; |
Tanja2211 | 0:1594bb11fa13 | 591 | B29=B28; |
Tanja2211 | 0:1594bb11fa13 | 592 | B28=B27; |
Tanja2211 | 0:1594bb11fa13 | 593 | B27=B26; |
Tanja2211 | 0:1594bb11fa13 | 594 | B26=B25; |
Tanja2211 | 0:1594bb11fa13 | 595 | B25=B24; |
Tanja2211 | 0:1594bb11fa13 | 596 | B24=B23; |
Tanja2211 | 0:1594bb11fa13 | 597 | B23=B22; |
Tanja2211 | 0:1594bb11fa13 | 598 | B22=B21; |
Tanja2211 | 0:1594bb11fa13 | 599 | B21=B20; |
Tanja2211 | 0:1594bb11fa13 | 600 | B20=B19; |
Tanja2211 | 0:1594bb11fa13 | 601 | B19=B18; |
Tanja2211 | 0:1594bb11fa13 | 602 | B18=B17; |
Tanja2211 | 0:1594bb11fa13 | 603 | B17=B16; |
Tanja2211 | 0:1594bb11fa13 | 604 | B16=B15; |
Tanja2211 | 0:1594bb11fa13 | 605 | B15=B14; |
Tanja2211 | 0:1594bb11fa13 | 606 | B14=B13; |
Tanja2211 | 0:1594bb11fa13 | 607 | B13=B12; |
Tanja2211 | 0:1594bb11fa13 | 608 | B12=B11; |
Tanja2211 | 0:1594bb11fa13 | 609 | B11=B10; |
Tanja2211 | 0:1594bb11fa13 | 610 | B10=B9; |
Tanja2211 | 0:1594bb11fa13 | 611 | B9=B8; |
Tanja2211 | 0:1594bb11fa13 | 612 | B8=B7; |
Tanja2211 | 0:1594bb11fa13 | 613 | B7=B6; |
Tanja2211 | 0:1594bb11fa13 | 614 | B6=B5; |
Tanja2211 | 0:1594bb11fa13 | 615 | B5=B4; |
Tanja2211 | 0:1594bb11fa13 | 616 | B4=B3; |
Tanja2211 | 0:1594bb11fa13 | 617 | B3=B2; |
Tanja2211 | 0:1594bb11fa13 | 618 | B2=B1; |
Tanja2211 | 0:1594bb11fa13 | 619 | B1=B0; |
Tanja2211 | 0:1594bb11fa13 | 620 | |
Tanja2211 | 0:1594bb11fa13 | 621 | //sturen naar scherm |
Tanja2211 | 0:1594bb11fa13 | 622 | pc.printf("Moving average B %f\r\n",MOVAVG_B); |
Tanja2211 | 0:1594bb11fa13 | 623 | |
Tanja2211 | 0:1594bb11fa13 | 624 | //naar HID Scope |
Tanja2211 | 20:99a8e9da2d6d | 625 | /*scope.set(2,emg_valueB); //ruwe data |
Tanja2211 | 0:1594bb11fa13 | 626 | scope.set(3,filtered_emgB); //filtered |
Tanja2211 | 20:99a8e9da2d6d | 627 | scope.send();*/ |
Tanja2211 | 0:1594bb11fa13 | 628 | } |
Tanja2211 | 0:1594bb11fa13 | 629 | |
Tanja2211 | 0:1594bb11fa13 | 630 | void Calibratie_Triceps() |
Tanja2211 | 0:1594bb11fa13 | 631 | { |
Tanja2211 | 0:1594bb11fa13 | 632 | Ticker log_timerT; |
Tanja2211 | 0:1594bb11fa13 | 633 | |
Tanja2211 | 0:1594bb11fa13 | 634 | arm_biquad_cascade_df1_init_f32(¬chT,1,notch_const,notch_states); |
Tanja2211 | 0:1594bb11fa13 | 635 | arm_biquad_cascade_df1_init_f32(&lowpassT,1,lowpass_const,lowpass_states); |
Tanja2211 | 0:1594bb11fa13 | 636 | arm_biquad_cascade_df1_init_f32(&highpassT,1,highpass_const,highpass_states); |
Tanja2211 | 0:1594bb11fa13 | 637 | |
Tanja2211 | 0:1594bb11fa13 | 638 | log_timerT.attach(Triceps, 0.005); |
Tanja2211 | 0:1594bb11fa13 | 639 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 640 | log_timerT.detach(); |
Tanja2211 | 0:1594bb11fa13 | 641 | } |
Tanja2211 | 0:1594bb11fa13 | 642 | |
Tanja2211 | 0:1594bb11fa13 | 643 | void Calibratie_Biceps() |
Tanja2211 | 0:1594bb11fa13 | 644 | { |
Tanja2211 | 0:1594bb11fa13 | 645 | Ticker log_timerB; |
Tanja2211 | 0:1594bb11fa13 | 646 | |
Tanja2211 | 0:1594bb11fa13 | 647 | arm_biquad_cascade_df1_init_f32(¬chB,1,notch_const,notch_states); |
Tanja2211 | 0:1594bb11fa13 | 648 | arm_biquad_cascade_df1_init_f32(&lowpassB,1,lowpass_const,lowpass_states); |
Tanja2211 | 0:1594bb11fa13 | 649 | arm_biquad_cascade_df1_init_f32(&highpassB,1,highpass_const,highpass_states); |
Tanja2211 | 0:1594bb11fa13 | 650 | |
Tanja2211 | 0:1594bb11fa13 | 651 | log_timerB.attach(Biceps, 0.005); |
Tanja2211 | 0:1594bb11fa13 | 652 | wait(2); |
Tanja2211 | 0:1594bb11fa13 | 653 | log_timerB.detach(); |
Tanja2211 | 0:1594bb11fa13 | 654 | } |
Tanja2211 | 0:1594bb11fa13 | 655 | |
Tanja2211 | 0:1594bb11fa13 | 656 | void motor2aansturing() |
Tanja2211 | 0:1594bb11fa13 | 657 | { |
Tanja2211 | 0:1594bb11fa13 | 658 | if (positie == 0) { |
Tanja2211 | 0:1594bb11fa13 | 659 | if (motor2.getPosition()>= 0) { |
Tanja2211 | 0:1594bb11fa13 | 660 | motordir2 = 1; |
Tanja2211 | 0:1594bb11fa13 | 661 | pwm_motor2.write(PWM2); |
Tanja2211 | 0:1594bb11fa13 | 662 | } else { |
Tanja2211 | 0:1594bb11fa13 | 663 | pwm_motor2.write(0); |
Tanja2211 | 0:1594bb11fa13 | 664 | } |
Tanja2211 | 0:1594bb11fa13 | 665 | } |
Tanja2211 | 0:1594bb11fa13 | 666 | if (positie ==1) { |
Tanja2211 | 0:1594bb11fa13 | 667 | if (motor2.getPosition()>= 2) { |
Tanja2211 | 0:1594bb11fa13 | 668 | motordir2 = 1; |
Tanja2211 | 0:1594bb11fa13 | 669 | pwm_motor2.write(PWM2); |
Tanja2211 | 0:1594bb11fa13 | 670 | } |
Tanja2211 | 0:1594bb11fa13 | 671 | if (motor2.getPosition()<= 2) { |
Tanja2211 | 0:1594bb11fa13 | 672 | motordir2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 673 | pwm_motor2.write(PWM2); |
Tanja2211 | 0:1594bb11fa13 | 674 | } else { |
Tanja2211 | 0:1594bb11fa13 | 675 | pwm_motor2.write(0); |
Tanja2211 | 0:1594bb11fa13 | 676 | } |
Tanja2211 | 0:1594bb11fa13 | 677 | } |
Tanja2211 | 0:1594bb11fa13 | 678 | if (positie ==2) { |
Tanja2211 | 0:1594bb11fa13 | 679 | if (motor2.getPosition()<= 4) { |
Tanja2211 | 0:1594bb11fa13 | 680 | motordir2 = 0; |
Tanja2211 | 0:1594bb11fa13 | 681 | pwm_motor2.write(PWM2); |
Tanja2211 | 0:1594bb11fa13 | 682 | } else { |
Tanja2211 | 0:1594bb11fa13 | 683 | pwm_motor2.write(0); |
Tanja2211 | 0:1594bb11fa13 | 684 | } |
Tanja2211 | 0:1594bb11fa13 | 685 | } //end if |
Tanja2211 | 0:1594bb11fa13 | 686 | } |
Tanja2211 | 0:1594bb11fa13 | 687 | |
Tanja2211 | 0:1594bb11fa13 | 688 | void motor1aansturing() |
Tanja2211 | 0:1594bb11fa13 | 689 | { |
Jolein | 40:207eb8ab507a | 690 | switch(toestand) { |
Jolein | 38:cc14faf38326 | 691 | case SLAAN: |
Jolein | 44:130fa54388ef | 692 | pc.printf("SLAAN\n"); |
Jolein | 48:5b1b90260239 | 693 | new_pwm = pid(setspeed, motor1.getSpeed()); |
Jolein | 38:cc14faf38326 | 694 | pwm_motor1.write(new_pwm); |
Jolein | 38:cc14faf38326 | 695 | motordir1 = 1; |
Jolein | 44:130fa54388ef | 696 | if (motor1.getPosition() <= ANGLEMAX) { |
Jolein | 44:130fa54388ef | 697 | toestand = TERUGKEREN; |
Jolein | 44:130fa54388ef | 698 | pwm_motor1.write(0);//arvid had hier 0,0 gezet?! |
Jolein | 45:d359aad22a8a | 699 | pc.printf("toestand = terugkeren, wacht tot 2e ticker\n\r"); |
Jolein | 46:8b30338f3f9b | 700 | //stop = 1; |
Jolein | 44:130fa54388ef | 701 | } |
Jolein | 44:130fa54388ef | 702 | |
Jolein | 40:207eb8ab507a | 703 | break; |
Jolein | 38:cc14faf38326 | 704 | case WACHTEN: |
Jolein | 38:cc14faf38326 | 705 | pidpositie(ANGLEMIN,motor1.getPosition()); //dit is nu alleen een waarde, moet vervolgens in een functie terugkomen toch |
Jolein | 38:cc14faf38326 | 706 | //?? motor1.getPosition(nieuwe positie); |
Jolein | 38:cc14faf38326 | 707 | pwm_motor1.write(0); |
Jolein | 38:cc14faf38326 | 708 | pc.printf("ifwachten\n"); |
Jolein | 46:8b30338f3f9b | 709 | if (snelheidsstand != 0 /*&& stop == 0*/) { |
Jolein | 40:207eb8ab507a | 710 | toestand = SLAAN; |
Jolein | 40:207eb8ab507a | 711 | pc.printf("slaan \n"); |
Jolein | 41:f2478822cee9 | 712 | switch(snelheidsstand) { |
Jolein | 41:f2478822cee9 | 713 | case 1: |
Jolein | 41:f2478822cee9 | 714 | setspeed = V1; |
Jolein | 41:f2478822cee9 | 715 | pc.printf("Snel 1 \n"); |
Jolein | 41:f2478822cee9 | 716 | break; |
Jolein | 41:f2478822cee9 | 717 | case 2: |
Jolein | 41:f2478822cee9 | 718 | setspeed = V2; |
Jolein | 41:f2478822cee9 | 719 | pc.printf("Snel 2\n"); |
Jolein | 41:f2478822cee9 | 720 | break; |
Jolein | 41:f2478822cee9 | 721 | case 3: |
Jolein | 41:f2478822cee9 | 722 | setspeed = V3; |
Jolein | 41:f2478822cee9 | 723 | pc.printf("Snel 3 \n"); |
Jolein | 41:f2478822cee9 | 724 | break; |
Jolein | 41:f2478822cee9 | 725 | }//end switch |
Jolein | 40:207eb8ab507a | 726 | } //end if |
Jolein | 40:207eb8ab507a | 727 | break; |
Jolein | 48:5b1b90260239 | 728 | case TERUGKEREN: |
Jolein | 50:43ead068c523 | 729 | if (motor1.getPosition()<=ANGLEMAX) { |
Jolein | 50:43ead068c523 | 730 | new_pwmpos = pidpositie(ANGLEMAX, motor1.getPosition()); |
Jolein | 50:43ead068c523 | 731 | pwm_motor1.write(new_pwmpos); //mogelijk moet dit -new_pwm zijn??? |
Jolein | 50:43ead068c523 | 732 | motordir1 = 0; |
Jolein | 50:43ead068c523 | 733 | } |
Jolein | 50:43ead068c523 | 734 | if (motor1.getPosition()>= ANGLEMAX) { |
Jolein | 50:43ead068c523 | 735 | new_pwmpos = pidpositie(ANGLEMAX, motor1.getPosition()); |
Jolein | 50:43ead068c523 | 736 | pwm_motor1.write(new_pwmpos); //mogelijk moet dit -new_pwm zijn??? |
Jolein | 50:43ead068c523 | 737 | motordir1 = 1; |
Jolein | 50:43ead068c523 | 738 | } |
Jolein | 48:5b1b90260239 | 739 | break; |
Jolein | 41:f2478822cee9 | 740 | } //end switch |
Jolein | 39:7d36e1219707 | 741 | scope.set(0,motor1.getPosition()); |
Jolein | 39:7d36e1219707 | 742 | scope.set(1,motor1.getPosition()); |
Jolein | 39:7d36e1219707 | 743 | scope.send(); |
Jolein | 17:71c5c9bfb7ba | 744 | } |
Jolein | 17:71c5c9bfb7ba | 745 | |
Jolein | 17:71c5c9bfb7ba | 746 | void motor1aansturingdeel2() |
Jolein | 17:71c5c9bfb7ba | 747 | { |
Jolein | 40:207eb8ab507a | 748 | switch(toestand) { |
Jolein | 48:5b1b90260239 | 749 | case TERUGKEREN: //deze case moet blijven ookal is het de enige case |
Jolein | 48:5b1b90260239 | 750 | if (motor1.getPosition()<=ANGLEMIN) { |
Jolein | 48:5b1b90260239 | 751 | new_pwmpos = pidpositie(ANGLEMIN, motor1.getPosition());//new_PWM benaming zorgt mogelijk voor problemen. |
Jolein | 48:5b1b90260239 | 752 | pwm_motor1.write(new_pwmpos); //mogelijk moet dit -new_pwm zijn??? |
Jolein | 48:5b1b90260239 | 753 | motordir1 = 0; |
Jolein | 48:5b1b90260239 | 754 | //pc.printf("motor2.getPosition %d\r\n", motor2.getPosition()); |
Jolein | 48:5b1b90260239 | 755 | } |
Jolein | 48:5b1b90260239 | 756 | if (motor1.getPosition()>= ANGLEMIN) { |
Jolein | 48:5b1b90260239 | 757 | new_pwmpos = pidpositie(ANGLEMIN, motor1.getPosition()); |
Jolein | 48:5b1b90260239 | 758 | pwm_motor1.write(new_pwmpos); //mogelijk moet dit -new_pwm zijn??? |
Jolein | 48:5b1b90260239 | 759 | motordir1 = 1; |
Jolein | 43:af480e6823ab | 760 | //pc.printf("if2\n"); |
Jolein | 43:af480e6823ab | 761 | } |
Jolein | 40:207eb8ab507a | 762 | break; |
Jolein | 44:130fa54388ef | 763 | } //end switch |
Jolein | 39:7d36e1219707 | 764 | scope.set(0,motor1.getPosition()); //ruwe data |
Jolein | 47:8cef7b0badea | 765 | scope.set(2,motor1.getPosition()); //filtered... |
Jolein | 39:7d36e1219707 | 766 | scope.send(); |
Jolein | 48:5b1b90260239 | 767 | }//let op. Geen pidposition(0,0,true) deze moet zelf zorgen dat hij 0 wordt, en daar genoeg tijd voor hebben!!! |