Hidde van der Bijl / Mbed 2 deprecated biorobotics_four_scorers2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
joostbonekamp
Date:
Mon Oct 07 13:36:38 2019 +0000
Revision:
14:4cf17b10e504
Parent:
13:51ae2da8da55
Parent:
12:88cbc65f2563
Child:
15:9a1f34bc9958
added kinematics;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobertoO 0:67c50348f842 1 #include "mbed.h"
RobertoO 1:b862262a9d14 2 #include "MODSERIAL.h"
joostbonekamp 2:bbaa6fca2ab1 3 #include "FastPWM.h"
joostbonekamp 2:bbaa6fca2ab1 4 #include "QEI.h"
hidde1104 13:51ae2da8da55 5 #define PI 3.14159265
RobertoO 0:67c50348f842 6
joostbonekamp 12:88cbc65f2563 7 Serial pc(USBTX, USBRX); //connect to pc
joostbonekamp 12:88cbc65f2563 8 DigitalOut motor1_direction(D4); //rotation motor 1 on shield (always D6)
joostbonekamp 12:88cbc65f2563 9 FastPWM motor1_pwm(D5); //pwm 1 on shield (always D7)
joostbonekamp 12:88cbc65f2563 10 DigitalOut motor2_direction(D7); //rotation motor 2 on shield (always D4)
joostbonekamp 12:88cbc65f2563 11 FastPWM motor2_pwm(D6); //pwm 2 on shield (always D5)
joostbonekamp 5:aa8b5d5e632f 12 Ticker loop_ticker; //used in main()
joostbonekamp 12:88cbc65f2563 13 AnalogIn Pot1(A1); //pot 1 on biorobotics shield
joostbonekamp 12:88cbc65f2563 14 AnalogIn Pot2(A0); //pot 2 on biorobotics shield
joostbonekamp 12:88cbc65f2563 15 InterruptIn but1(D10); //debounced button on biorobotics shield
joostbonekamp 12:88cbc65f2563 16 InterruptIn but2(D9); //debounced button on biorobotics shield
joostbonekamp 12:88cbc65f2563 17
PatrickZieverink 8:6f6a4dc12036 18 QEI encoder1 (D11, D12, NC, 8400, QEI::X4_ENCODING); //encoder 1 gebruiken
joostbonekamp 10:b8c60fd468f1 19 QEI encoder2 (D1, D2, NC, 8400, QEI::X4_ENCODING); //encoder 2 gebruiken
joostbonekamp 10:b8c60fd468f1 20
joostbonekamp 3:e3d12393adb1 21
joostbonekamp 5:aa8b5d5e632f 22 //variables
joostbonekamp 12:88cbc65f2563 23 enum States {idle, cali_EMG, cali_enc, moving_magnet_off, moving_magnet_on, homing, failure};
joostbonekamp 12:88cbc65f2563 24 States state; //using the States enum
joostbonekamp 14:4cf17b10e504 25 struct actuator_state {
joostbonekamp 12:88cbc65f2563 26 float duty_cycle1; //pwm of 1st motor
joostbonekamp 12:88cbc65f2563 27 float duty_cycle2; //pwm of 2nd motor
joostbonekamp 10:b8c60fd468f1 28 int dir1; //direction of 1st motor
joostbonekamp 10:b8c60fd468f1 29 int dir2; //direction of 2nd motor
joostbonekamp 12:88cbc65f2563 30 bool magnet; //state of the magnet
joostbonekamp 12:88cbc65f2563 31 } actuators;
joostbonekamp 12:88cbc65f2563 32
joostbonekamp 14:4cf17b10e504 33 struct EMG_params {
joostbonekamp 12:88cbc65f2563 34 float idk; //params of the emg, tbd during calibration
joostbonekamp 12:88cbc65f2563 35 } emg_values;
joostbonekamp 5:aa8b5d5e632f 36
joostbonekamp 14:4cf17b10e504 37 int enc_zero; //the zero position of the encoders, to be determined from the
joostbonekamp 14:4cf17b10e504 38 //encoder calibration
joostbonekamp 12:88cbc65f2563 39
joostbonekamp 12:88cbc65f2563 40 //variables used throughout the program
joostbonekamp 12:88cbc65f2563 41 bool state_changed = false; //used to see if the state is "starting"
PatrickZieverink 8:6f6a4dc12036 42 volatile bool but1_pressed = false;
PatrickZieverink 8:6f6a4dc12036 43 volatile bool but2_pressed = false;
joostbonekamp 12:88cbc65f2563 44 float pot_1; //used to keep track of the potentiometer values
joostbonekamp 10:b8c60fd468f1 45 float pot_2;
joostbonekamp 12:88cbc65f2563 46
joostbonekamp 12:88cbc65f2563 47 void do_nothing()
joostbonekamp 5:aa8b5d5e632f 48
PatrickZieverink 9:6537eead1241 49 /*
joostbonekamp 12:88cbc65f2563 50 Idle state. Used in the beginning, before the calibration states.
joostbonekamp 12:88cbc65f2563 51 */
joostbonekamp 12:88cbc65f2563 52 {}
joostbonekamp 12:88cbc65f2563 53
joostbonekamp 12:88cbc65f2563 54 void failure()
joostbonekamp 12:88cbc65f2563 55 /*
joostbonekamp 12:88cbc65f2563 56 Failure mode. This should execute when button 2 is pressed during operation.
joostbonekamp 12:88cbc65f2563 57 */
joostbonekamp 12:88cbc65f2563 58 {
joostbonekamp 12:88cbc65f2563 59 if (state_changed) {
joostbonekamp 12:88cbc65f2563 60 pc.printf("Something went wrong!\r\n");
joostbonekamp 12:88cbc65f2563 61 state_changed = false;
joostbonekamp 12:88cbc65f2563 62 }
joostbonekamp 12:88cbc65f2563 63 }
PatrickZieverink 9:6537eead1241 64
joostbonekamp 12:88cbc65f2563 65 void cali_EMG()
joostbonekamp 12:88cbc65f2563 66 /*
joostbonekamp 12:88cbc65f2563 67 Calibratioin of the EMG. Values determined during calibration should be
joostbonekamp 12:88cbc65f2563 68 added to the EMG_params instance.
joostbonekamp 12:88cbc65f2563 69 */
joostbonekamp 12:88cbc65f2563 70 {
joostbonekamp 12:88cbc65f2563 71 if (state_changed) {
joostbonekamp 12:88cbc65f2563 72 pc.printf("Started EMG calibration\r\n");
joostbonekamp 12:88cbc65f2563 73 state_changed = false;
PatrickZieverink 9:6537eead1241 74 }
joostbonekamp 12:88cbc65f2563 75 }
joostbonekamp 12:88cbc65f2563 76 void cali_enc()
joostbonekamp 12:88cbc65f2563 77 /*
joostbonekamp 14:4cf17b10e504 78 Calibration of the encoder. The encoder should be moved to the lowest
joostbonekamp 14:4cf17b10e504 79 position for the linear stage and the most upright postition for the
joostbonekamp 12:88cbc65f2563 80 rotating stage.
joostbonekamp 12:88cbc65f2563 81 */
joostbonekamp 12:88cbc65f2563 82 {
joostbonekamp 12:88cbc65f2563 83 if (state_changed) {
joostbonekamp 12:88cbc65f2563 84 pc.printf("Started encoder calibration\r\n");
joostbonekamp 12:88cbc65f2563 85 state_changed = false;
PatrickZieverink 9:6537eead1241 86 }
joostbonekamp 12:88cbc65f2563 87 }
joostbonekamp 12:88cbc65f2563 88 void moving_magnet_off()
joostbonekamp 12:88cbc65f2563 89 /*
joostbonekamp 14:4cf17b10e504 90 Moving with the magnet disabled. This is the part from the home position
joostbonekamp 12:88cbc65f2563 91 towards the storage of chips.
joostbonekamp 12:88cbc65f2563 92 */
joostbonekamp 12:88cbc65f2563 93 {
joostbonekamp 12:88cbc65f2563 94 if (state_changed) {
joostbonekamp 12:88cbc65f2563 95 pc.printf("Moving without magnet\r\n");
joostbonekamp 12:88cbc65f2563 96 state_changed = false;
PatrickZieverink 9:6537eead1241 97 }
joostbonekamp 12:88cbc65f2563 98 return;
PatrickZieverink 9:6537eead1241 99 }
joostbonekamp 12:88cbc65f2563 100 void moving_magnet_on()
joostbonekamp 12:88cbc65f2563 101 /*
joostbonekamp 14:4cf17b10e504 102 Moving with the magnet enabled. This is the part of the movement from the
joostbonekamp 12:88cbc65f2563 103 chip holder to the top of the playing board.
joostbonekamp 12:88cbc65f2563 104 */
joostbonekamp 12:88cbc65f2563 105 {
joostbonekamp 12:88cbc65f2563 106 if (state_changed) {
joostbonekamp 12:88cbc65f2563 107 pc.printf("Moving with magnet\r\n");
joostbonekamp 12:88cbc65f2563 108 state_changed = false;
joostbonekamp 12:88cbc65f2563 109 }
joostbonekamp 12:88cbc65f2563 110 return;
PatrickZieverink 9:6537eead1241 111 }
joostbonekamp 12:88cbc65f2563 112 void homing()
joostbonekamp 12:88cbc65f2563 113 /*
joostbonekamp 14:4cf17b10e504 114 Dropping the chip and moving towards the rest position.
PatrickZieverink 9:6537eead1241 115 */
joostbonekamp 12:88cbc65f2563 116 {
joostbonekamp 12:88cbc65f2563 117 if (state_changed) {
joostbonekamp 12:88cbc65f2563 118 pc.printf("Started homing");
joostbonekamp 12:88cbc65f2563 119 state_changed = false;
joostbonekamp 12:88cbc65f2563 120 }
joostbonekamp 12:88cbc65f2563 121 return;
joostbonekamp 12:88cbc65f2563 122 }
PatrickZieverink 9:6537eead1241 123
PatrickZieverink 8:6f6a4dc12036 124 // the funtions needed to run the program
joostbonekamp 12:88cbc65f2563 125 void measure_signals()
joostbonekamp 12:88cbc65f2563 126 {
joostbonekamp 12:88cbc65f2563 127 return;
joostbonekamp 12:88cbc65f2563 128 }
joostbonekamp 10:b8c60fd468f1 129
joostbonekamp 12:88cbc65f2563 130 void do_nothing()
joostbonekamp 12:88cbc65f2563 131 {
joostbonekamp 12:88cbc65f2563 132 actuator.duty_cycle1 = 0;
joostbonekamp 12:88cbc65f2563 133 actuator.duty_cycle2 = 0;
joostbonekamp 11:f83e3bf7febf 134
joostbonekamp 5:aa8b5d5e632f 135
joostbonekamp 10:b8c60fd468f1 136 //state guard
joostbonekamp 10:b8c60fd468f1 137 if (but1_pressed) { //this moves the program from the idle to cw state
joostbonekamp 5:aa8b5d5e632f 138 current_state = cw;
joostbonekamp 6:354a6509405f 139 state_changed = true; //to show next state it can initialize
joostbonekamp 5:aa8b5d5e632f 140 pc.printf("Changed state from idle to cw\r\n");
PatrickZieverink 8:6f6a4dc12036 141 but1_pressed = false; //reset button 1
joostbonekamp 5:aa8b5d5e632f 142 }
joostbonekamp 12:88cbc65f2563 143
joostbonekamp 5:aa8b5d5e632f 144 }
PatrickZieverink 7:78bc59c7753c 145
joostbonekamp 14:4cf17b10e504 146 <<<<<<< working copy
joostbonekamp 14:4cf17b10e504 147 void kinematics1() //
joostbonekamp 14:4cf17b10e504 148 {
hidde1104 13:51ae2da8da55 149 double length_1;
hidde1104 13:51ae2da8da55 150 volatile double theta;
hidde1104 13:51ae2da8da55 151 volatile double length_2;
joostbonekamp 14:4cf17b10e504 152
joostbonekamp 14:4cf17b10e504 153 class H_matrix //rows_columns (als je het niet ziet, gebruik dat de onderste rij 0 0 1 is)
joostbonekamp 14:4cf17b10e504 154 {
joostbonekamp 14:4cf17b10e504 155 public:
joostbonekamp 14:4cf17b10e504 156 int h1_1_1 = 1;
hidde1104 13:51ae2da8da55 157 int h1_1_2 = 0;
hidde1104 13:51ae2da8da55 158 float h1_1_3 = sin(theta*PI/180)*(length_1+length_2); //sinus en cosinus zijn standaard gedefinieërd in radians, maar theta is hier dus in graden
hidde1104 13:51ae2da8da55 159 int h1_2_1 = 0;
hidde1104 13:51ae2da8da55 160 int h1_2_2 = 1;
joostbonekamp 14:4cf17b10e504 161 float h1_2_3 = cos(theta*PI/180)*(length_1+length_2);
hidde1104 13:51ae2da8da55 162 int h1_3_1 = 0;
hidde1104 13:51ae2da8da55 163 int h1_3_2 = 0;
hidde1104 13:51ae2da8da55 164 int h1_3_3 = 1;
joostbonekamp 14:4cf17b10e504 165 }
joostbonekamp 14:4cf17b10e504 166 H_matrix H;
joostbonekamp 14:4cf17b10e504 167
joostbonekamp 14:4cf17b10e504 168 class Position_vector1 //positie vector gezien vanuit het uiteinde van de complete arm (coördinatiestelsel draait niet mee met de arm)
joostbonekamp 14:4cf17b10e504 169 {
joostbonekamp 14:4cf17b10e504 170 public:
hidde1104 13:51ae2da8da55 171 float p1_1_1
hidde1104 13:51ae2da8da55 172 float p1_2_1
hidde1104 13:51ae2da8da55 173 float p1_3_1
joostbonekamp 14:4cf17b10e504 174 }
joostbonekamp 14:4cf17b10e504 175 class Position_vector2
joostbonekamp 14:4cf17b10e504 176 {
joostbonekamp 14:4cf17b10e504 177 public:
hidde1104 13:51ae2da8da55 178 float p2_1_1 = h1_1_1*p1_1_1 + h1_1_2*p1_2_1 + h1_1_3*p1_3_1
joostbonekamp 14:4cf17b10e504 179 float p2_2_1 = h1_2_1*p1_1_1 + h1_2_2*p1_2_1 + h1_2_3*p1_3_1
joostbonekamp 14:4cf17b10e504 180 float p2_3_1 = h1_3_1*p1_1_1 + h1_3_2*p1_2_1 + h1_3_3*p1_3_1
joostbonekamp 5:aa8b5d5e632f 181 }
joostbonekamp 5:aa8b5d5e632f 182 }
joostbonekamp 14:4cf17b10e504 183 =======
joostbonekamp 14:4cf17b10e504 184 void motor_controller()
joostbonekamp 12:88cbc65f2563 185 {
joostbonekamp 12:88cbc65f2563 186
joostbonekamp 12:88cbc65f2563 187 motor1_direction = actuator.dir1; // Zet de richting goed
joostbonekamp 12:88cbc65f2563 188 motor1_pwm.write(actuator.duty_cycle1); // Zet het op de snelheid van actuator.speed1
joostbonekamp 12:88cbc65f2563 189
joostbonekamp 14:4cf17b10e504 190 >>>>>>> merge rev
PatrickZieverink 7:78bc59c7753c 191
joostbonekamp 14:4cf17b10e504 192 <<<<<<< working copy
joostbonekamp 10:b8c60fd468f1 193
joostbonekamp 14:4cf17b10e504 194 void kinematics2() { //
joostbonekamp 14:4cf17b10e504 195 double length_1;
joostbonekamp 14:4cf17b10e504 196 volatile double theta;
joostbonekamp 14:4cf17b10e504 197 volatile double length_2;
joostbonekamp 12:88cbc65f2563 198
joostbonekamp 14:4cf17b10e504 199 class H_matrix2 //rows_columns (als je het niet ziet, gebruik dat de onderste rij 0 0 1 is)
joostbonekamp 14:4cf17b10e504 200 {
joostbonekamp 14:4cf17b10e504 201 public:
joostbonekamp 14:4cf17b10e504 202 int h2_1_1 = 1;
joostbonekamp 14:4cf17b10e504 203 int h2_1_2 = 0;
joostbonekamp 14:4cf17b10e504 204 float h2_1_3 = -sin(theta*PI/180)*(length_1+length_2); //sinus en cosinus zijn standaard gedefinieërd in radians, maar theta is hier dus in graden
joostbonekamp 14:4cf17b10e504 205 int h2_2_1 = 0;
joostbonekamp 14:4cf17b10e504 206 int h2_2_2 = 1;
joostbonekamp 14:4cf17b10e504 207 float h2_2_3 = -cos(theta*PI/180)*(length_1+length_2);
joostbonekamp 14:4cf17b10e504 208 int h2_3_1 = 0;
joostbonekamp 14:4cf17b10e504 209 int h2_3_2 = 0;
joostbonekamp 14:4cf17b10e504 210 int h2_3_3 = 1;
joostbonekamp 14:4cf17b10e504 211 }
joostbonekamp 14:4cf17b10e504 212 H_matrix H;
joostbonekamp 12:88cbc65f2563 213
joostbonekamp 14:4cf17b10e504 214 class Position_vector3 //positie vector gezien vanuit het onderste draaipunt
joostbonekamp 14:4cf17b10e504 215 {
joostbonekamp 14:4cf17b10e504 216 public:
joostbonekamp 14:4cf17b10e504 217 float p3_1_1
joostbonekamp 14:4cf17b10e504 218 float p3_2_1
joostbonekamp 14:4cf17b10e504 219 float p3_3_1
joostbonekamp 14:4cf17b10e504 220 }
joostbonekamp 14:4cf17b10e504 221 class Position_vector4
joostbonekamp 14:4cf17b10e504 222 {
joostbonekamp 14:4cf17b10e504 223 public:
joostbonekamp 14:4cf17b10e504 224 float p4_1_1 = h2_1_1*p3_1_1 + h2_1_2*p3_2_1 + h2_1_3*p3_3_1
joostbonekamp 14:4cf17b10e504 225 float p4_2_1 = h2_2_1*p1_1_1 + h2_2_2*p1_2_1 + h2_2_3*p3_3_1
joostbonekamp 14:4cf17b10e504 226 float p4_3_1 = h2_3_1*p1_1_1 + h2_3_2*p1_2_1 + h2_3_3*p3_3_1
joostbonekamp 14:4cf17b10e504 227 }
joostbonekamp 14:4cf17b10e504 228 H_matrix2 H2
joostbonekamp 5:aa8b5d5e632f 229 }
PatrickZieverink 8:6f6a4dc12036 230
joostbonekamp 14:4cf17b10e504 231 void rotate_cw() {
joostbonekamp 14:4cf17b10e504 232 if (state_changed) {
joostbonekamp 14:4cf17b10e504 233 pc.printf("State changed to CW\r\n");
joostbonekamp 14:4cf17b10e504 234 state_changed = false; //reset this so it wont print next loop
joostbonekamp 14:4cf17b10e504 235 }
joostbonekamp 14:4cf17b10e504 236 motor.dir1 = 1; //todo: check if this is actually clockwise
joostbonekamp 14:4cf17b10e504 237 motor.dir2 = 1; //todo: check if this is actually clockwise
joostbonekamp 5:aa8b5d5e632f 238
joostbonekamp 14:4cf17b10e504 239 motor.pwm1 = x_input; //nog niet echt de x, maar de rotatie, moet later met kinematics gefixt worden
joostbonekamp 14:4cf17b10e504 240 motor.pwm2 = y_input; // ook nog niet echt de y dus
joostbonekamp 14:4cf17b10e504 241 //state guard
joostbonekamp 14:4cf17b10e504 242 if (!state_changed && but1_pressed) { //state wasnt just changed, button 1 has been pressed -> change state
joostbonekamp 14:4cf17b10e504 243 current_state = ccw;
joostbonekamp 14:4cf17b10e504 244 state_changed = true;
joostbonekamp 14:4cf17b10e504 245 but1_pressed = false; //reset this
joostbonekamp 14:4cf17b10e504 246 }
joostbonekamp 14:4cf17b10e504 247
joostbonekamp 14:4cf17b10e504 248 =======
joostbonekamp 14:4cf17b10e504 249 motor2_direction = actuator.dir2;
joostbonekamp 14:4cf17b10e504 250 motor2_pwm.write(actuator.duty_cycle2);
joostbonekamp 14:4cf17b10e504 251 return;
joostbonekamp 14:4cf17b10e504 252 >>>>>>> merge rev
PatrickZieverink 8:6f6a4dc12036 253 }
joostbonekamp 10:b8c60fd468f1 254
joostbonekamp 14:4cf17b10e504 255 void output() {
joostbonekamp 14:4cf17b10e504 256 return;
joostbonekamp 14:4cf17b10e504 257 }
joostbonekamp 3:e3d12393adb1 258
joostbonekamp 14:4cf17b10e504 259 void state_machine() {
joostbonekamp 14:4cf17b10e504 260 //run current state
joostbonekamp 14:4cf17b10e504 261 switch (current_state) {
joostbonekamp 14:4cf17b10e504 262 case idle:
joostbonekamp 14:4cf17b10e504 263 do_nothing();
joostbonekamp 14:4cf17b10e504 264 break;
joostbonekamp 14:4cf17b10e504 265 case failure:
joostbonekamp 14:4cf17b10e504 266 failure();
joostbonekamp 14:4cf17b10e504 267 break;
joostbonekamp 14:4cf17b10e504 268 case cali_EMG:
joostbonekamp 14:4cf17b10e504 269 cali_EMG();
joostbonekamp 14:4cf17b10e504 270 break;
joostbonekamp 14:4cf17b10e504 271 case cali_ENC:
joostbonekamp 14:4cf17b10e504 272 cali_encoder();
joostbonekamp 14:4cf17b10e504 273 break;
joostbonekamp 14:4cf17b10e504 274 case moving_magnet_on:
joostbonekamp 14:4cf17b10e504 275 moving_magnet_on();
joostbonekamp 14:4cf17b10e504 276 break;
joostbonekamp 14:4cf17b10e504 277 case moving_magnet_off:
joostbonekamp 14:4cf17b10e504 278 moving_magnet_off();
joostbonekamp 14:4cf17b10e504 279 break;
joostbonekamp 14:4cf17b10e504 280 case homing:
joostbonekamp 14:4cf17b10e504 281 homing();
joostbonekamp 14:4cf17b10e504 282 break;
joostbonekamp 14:4cf17b10e504 283 }
joostbonekamp 14:4cf17b10e504 284 }
joostbonekamp 12:88cbc65f2563 285
joostbonekamp 14:4cf17b10e504 286 void main_loop() {
joostbonekamp 14:4cf17b10e504 287 measure_signals();
joostbonekamp 14:4cf17b10e504 288 state_machine();
joostbonekamp 14:4cf17b10e504 289 motor_controller();
joostbonekamp 14:4cf17b10e504 290 output();
joostbonekamp 14:4cf17b10e504 291 }
joostbonekamp 14:4cf17b10e504 292
joostbonekamp 14:4cf17b10e504 293 //Helper functions, not directly called by the main_loop functions or
joostbonekamp 14:4cf17b10e504 294 //state machines
joostbonekamp 14:4cf17b10e504 295 void but1_interrupt () {
joostbonekamp 14:4cf17b10e504 296 but1_pressed = true;
joostbonekamp 14:4cf17b10e504 297 pc.printf("Button 1 pressed \n\r");
joostbonekamp 14:4cf17b10e504 298 }
joostbonekamp 14:4cf17b10e504 299
joostbonekamp 14:4cf17b10e504 300 void but2_interrupt () {
joostbonekamp 14:4cf17b10e504 301 but2_pressed = true;
joostbonekamp 14:4cf17b10e504 302 pc.printf("Button 2 pressed \n\r");
joostbonekamp 14:4cf17b10e504 303 }
joostbonekamp 12:88cbc65f2563 304
joostbonekamp 14:4cf17b10e504 305 int main() {
joostbonekamp 14:4cf17b10e504 306 pc.baud(115200);
joostbonekamp 14:4cf17b10e504 307 pc.printf("Executing main()... \r\n");
joostbonekamp 14:4cf17b10e504 308 current_state = idle;
joostbonekamp 14:4cf17b10e504 309
joostbonekamp 14:4cf17b10e504 310 motor2_pwm.period(1/160000f); // 1/frequency van waarop hij draait
joostbonekamp 14:4cf17b10e504 311 motor1_pwm.period(1/160000f); // 1/frequency van waarop hij draait
joostbonekamp 12:88cbc65f2563 312
joostbonekamp 14:4cf17b10e504 313 actuator.dir1 = 0;
joostbonekamp 14:4cf17b10e504 314 actuator.dir2 = 0;
joostbonekamp 14:4cf17b10e504 315
joostbonekamp 14:4cf17b10e504 316 actuator.magnet = false;
joostbonekamp 14:4cf17b10e504 317
joostbonekamp 14:4cf17b10e504 318 but1.fall(&but1_interrupt);
joostbonekamp 14:4cf17b10e504 319 but2.fall(&but2_interrupt);
joostbonekamp 14:4cf17b10e504 320 loop_ticker.attach(&main_loop, 0.001f); //main loop at 1kHz
joostbonekamp 14:4cf17b10e504 321 pc.printf("Main_loop is running\n\r");
joostbonekamp 14:4cf17b10e504 322 while (true) {}
joostbonekamp 14:4cf17b10e504 323 }