Dynamics ident of the system
Dependencies: FastPWM HIDScope MODSERIAL QEI mbed
Fork of Berekenen_motorhoek by
main.cpp@7:167b6dfdefee, 2016-10-28 (annotated)
- Committer:
- sjoerdbarts
- Date:
- Fri Oct 28 10:10:32 2016 +0000
- Revision:
- 7:167b6dfdefee
- Parent:
- 6:ee243782bf51
Updated code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TimDouma | 0:46a1642a10c8 | 1 | #include "mbed.h" |
sjoerdbarts | 6:ee243782bf51 | 2 | #include "FastPWM.h" |
sjoerdbarts | 6:ee243782bf51 | 3 | #include "HIDScope.h" |
sjoerdbarts | 6:ee243782bf51 | 4 | #include "QEI.h" |
sjoerdbarts | 6:ee243782bf51 | 5 | #include "MODSERIAL.h" |
TimDouma | 0:46a1642a10c8 | 6 | #define SERIAL_BAUD 115200 |
sjoerdbarts | 6:ee243782bf51 | 7 | |
sjoerdbarts | 6:ee243782bf51 | 8 | MODSERIAL pc(USBTX,USBRX); |
sjoerdbarts | 6:ee243782bf51 | 9 | // Set button pins |
sjoerdbarts | 6:ee243782bf51 | 10 | InterruptIn button1(PTB9); |
sjoerdbarts | 6:ee243782bf51 | 11 | InterruptIn button2(PTA1); |
TimDouma | 0:46a1642a10c8 | 12 | |
sjoerdbarts | 6:ee243782bf51 | 13 | // Set AnalogIn potmeters |
sjoerdbarts | 6:ee243782bf51 | 14 | AnalogIn pot1(A3); |
sjoerdbarts | 6:ee243782bf51 | 15 | AnalogIn pot2(A4); |
TimDouma | 0:46a1642a10c8 | 16 | |
sjoerdbarts | 6:ee243782bf51 | 17 | // Set motor Pinouts |
sjoerdbarts | 6:ee243782bf51 | 18 | DigitalOut motor1_dir(D4); |
sjoerdbarts | 6:ee243782bf51 | 19 | FastPWM motor1_pwm(D5); |
sjoerdbarts | 6:ee243782bf51 | 20 | DigitalOut motor2_dir(D7); |
sjoerdbarts | 6:ee243782bf51 | 21 | FastPWM motor2_pwm(D6); |
s1600907 | 3:ac6f86c0db6e | 22 | |
sjoerdbarts | 6:ee243782bf51 | 23 | // Set LED pins |
sjoerdbarts | 6:ee243782bf51 | 24 | DigitalOut led(LED_RED); |
s1600907 | 5:a9da7bc89b24 | 25 | |
sjoerdbarts | 6:ee243782bf51 | 26 | // Set HID scope |
sjoerdbarts | 7:167b6dfdefee | 27 | HIDScope scope(3); |
s1600907 | 5:a9da7bc89b24 | 28 | |
sjoerdbarts | 6:ee243782bf51 | 29 | // Set Encoders for motors |
sjoerdbarts | 6:ee243782bf51 | 30 | QEI Motor1_ENC_CW(D11,D10,NC,32); |
sjoerdbarts | 6:ee243782bf51 | 31 | QEI Motor1_ENC_CCW(D10,D11,NC,32); |
sjoerdbarts | 6:ee243782bf51 | 32 | QEI Motor2_ENC_CW(D12,D13,NC,32); |
sjoerdbarts | 6:ee243782bf51 | 33 | QEI Motor2_ENC_CCW(D13,D12,NC,32); |
sjoerdbarts | 6:ee243782bf51 | 34 | |
sjoerdbarts | 6:ee243782bf51 | 35 | // Constants |
sjoerdbarts | 6:ee243782bf51 | 36 | volatile double pwm = 0.0; |
sjoerdbarts | 6:ee243782bf51 | 37 | volatile double pwm_new = 0; |
sjoerdbarts | 7:167b6dfdefee | 38 | volatile double timer = 0.00000000; |
sjoerdbarts | 6:ee243782bf51 | 39 | volatile bool button1_value = false; |
sjoerdbarts | 6:ee243782bf51 | 40 | volatile bool button2_value = false; |
s1600907 | 4:bd1db680e5a1 | 41 | |
sjoerdbarts | 6:ee243782bf51 | 42 | // Ticker |
sjoerdbarts | 6:ee243782bf51 | 43 | Ticker SinTicker; |
sjoerdbarts | 6:ee243782bf51 | 44 | Ticker PotControlTicker; |
sjoerdbarts | 6:ee243782bf51 | 45 | Ticker SendZerosTicker; |
sjoerdbarts | 6:ee243782bf51 | 46 | |
sjoerdbarts | 6:ee243782bf51 | 47 | void SwitchLed() |
sjoerdbarts | 6:ee243782bf51 | 48 | { |
sjoerdbarts | 6:ee243782bf51 | 49 | led = not led; |
sjoerdbarts | 6:ee243782bf51 | 50 | } |
sjoerdbarts | 6:ee243782bf51 | 51 | |
sjoerdbarts | 6:ee243782bf51 | 52 | void button1_switch() |
sjoerdbarts | 6:ee243782bf51 | 53 | { |
sjoerdbarts | 6:ee243782bf51 | 54 | button1_value = not button1_value; |
sjoerdbarts | 6:ee243782bf51 | 55 | } |
sjoerdbarts | 6:ee243782bf51 | 56 | |
sjoerdbarts | 6:ee243782bf51 | 57 | void button2_switch() |
sjoerdbarts | 6:ee243782bf51 | 58 | { |
sjoerdbarts | 6:ee243782bf51 | 59 | button2_value = not button2_value; |
s1600907 | 4:bd1db680e5a1 | 60 | } |
TimDouma | 0:46a1642a10c8 | 61 | |
sjoerdbarts | 6:ee243782bf51 | 62 | void SendZeros() |
sjoerdbarts | 6:ee243782bf51 | 63 | { |
sjoerdbarts | 6:ee243782bf51 | 64 | int zero=0; |
sjoerdbarts | 6:ee243782bf51 | 65 | scope.set(0,zero); |
sjoerdbarts | 6:ee243782bf51 | 66 | scope.set(1,zero); |
sjoerdbarts | 7:167b6dfdefee | 67 | scope.set(2,zero); |
sjoerdbarts | 6:ee243782bf51 | 68 | scope.send(); |
TimDouma | 0:46a1642a10c8 | 69 | } |
TimDouma | 0:46a1642a10c8 | 70 | |
sjoerdbarts | 6:ee243782bf51 | 71 | void SetMotor(int motor_number, double MotorValue) |
sjoerdbarts | 6:ee243782bf51 | 72 | { |
sjoerdbarts | 6:ee243782bf51 | 73 | // Given -1<=motorValue<=1, this sets the PWM and direction |
sjoerdbarts | 6:ee243782bf51 | 74 | // bits for motor 1. Positive value makes motor rotating |
sjoerdbarts | 6:ee243782bf51 | 75 | // clockwise. motorValues outside range are truncated to |
sjoerdbarts | 6:ee243782bf51 | 76 | // within range |
sjoerdbarts | 6:ee243782bf51 | 77 | if (motor_number == 1) |
sjoerdbarts | 6:ee243782bf51 | 78 | { |
sjoerdbarts | 6:ee243782bf51 | 79 | if (MotorValue >=0) |
sjoerdbarts | 6:ee243782bf51 | 80 | { |
sjoerdbarts | 6:ee243782bf51 | 81 | motor1_dir=1; |
sjoerdbarts | 6:ee243782bf51 | 82 | } |
sjoerdbarts | 6:ee243782bf51 | 83 | else |
sjoerdbarts | 6:ee243782bf51 | 84 | { |
sjoerdbarts | 6:ee243782bf51 | 85 | motor1_dir=0; |
sjoerdbarts | 6:ee243782bf51 | 86 | } |
sjoerdbarts | 6:ee243782bf51 | 87 | if (fabs(MotorValue)>1){ |
sjoerdbarts | 6:ee243782bf51 | 88 | motor1_pwm.write(1); |
sjoerdbarts | 6:ee243782bf51 | 89 | } |
sjoerdbarts | 6:ee243782bf51 | 90 | else |
sjoerdbarts | 6:ee243782bf51 | 91 | { |
sjoerdbarts | 6:ee243782bf51 | 92 | motor1_pwm.write(abs(MotorValue)); |
sjoerdbarts | 6:ee243782bf51 | 93 | } |
s1600907 | 5:a9da7bc89b24 | 94 | } |
sjoerdbarts | 6:ee243782bf51 | 95 | else |
sjoerdbarts | 6:ee243782bf51 | 96 | { |
sjoerdbarts | 6:ee243782bf51 | 97 | if (MotorValue >=0) |
sjoerdbarts | 6:ee243782bf51 | 98 | { |
sjoerdbarts | 7:167b6dfdefee | 99 | motor2_dir=1; |
sjoerdbarts | 6:ee243782bf51 | 100 | } |
sjoerdbarts | 6:ee243782bf51 | 101 | else |
sjoerdbarts | 6:ee243782bf51 | 102 | { |
sjoerdbarts | 7:167b6dfdefee | 103 | motor2_dir=0; |
sjoerdbarts | 6:ee243782bf51 | 104 | } |
sjoerdbarts | 6:ee243782bf51 | 105 | if (fabs(MotorValue)>1){ |
sjoerdbarts | 7:167b6dfdefee | 106 | motor2_pwm.write(1); |
sjoerdbarts | 6:ee243782bf51 | 107 | } |
sjoerdbarts | 6:ee243782bf51 | 108 | else |
sjoerdbarts | 6:ee243782bf51 | 109 | { |
sjoerdbarts | 7:167b6dfdefee | 110 | motor2_pwm.write(abs(MotorValue)); |
sjoerdbarts | 6:ee243782bf51 | 111 | } |
s1600907 | 4:bd1db680e5a1 | 112 | } |
sjoerdbarts | 6:ee243782bf51 | 113 | |
sjoerdbarts | 6:ee243782bf51 | 114 | } |
sjoerdbarts | 6:ee243782bf51 | 115 | |
sjoerdbarts | 6:ee243782bf51 | 116 | double GetPosition(int motor_number) |
sjoerdbarts | 6:ee243782bf51 | 117 | { |
sjoerdbarts | 6:ee243782bf51 | 118 | const int COUNTS_PER_REV = 8400; |
sjoerdbarts | 6:ee243782bf51 | 119 | const float DEGREES_PER_PULSE = 8400 / 360; |
sjoerdbarts | 6:ee243782bf51 | 120 | if (motor_number == 1) |
sjoerdbarts | 6:ee243782bf51 | 121 | { |
sjoerdbarts | 6:ee243782bf51 | 122 | int countsCW = Motor1_ENC_CW.getPulses(); |
sjoerdbarts | 6:ee243782bf51 | 123 | int countsCCW= Motor1_ENC_CCW.getPulses(); |
sjoerdbarts | 6:ee243782bf51 | 124 | int net_counts = countsCW-countsCCW; |
sjoerdbarts | 6:ee243782bf51 | 125 | double Position=(net_counts*360.0f)/COUNTS_PER_REV; |
sjoerdbarts | 6:ee243782bf51 | 126 | return Position; |
s1600907 | 4:bd1db680e5a1 | 127 | } |
sjoerdbarts | 6:ee243782bf51 | 128 | else |
sjoerdbarts | 6:ee243782bf51 | 129 | { |
sjoerdbarts | 6:ee243782bf51 | 130 | int countsCW = Motor2_ENC_CW.getPulses(); |
sjoerdbarts | 6:ee243782bf51 | 131 | int countsCCW= Motor2_ENC_CCW.getPulses(); |
sjoerdbarts | 6:ee243782bf51 | 132 | int net_counts = countsCW-countsCCW; |
sjoerdbarts | 6:ee243782bf51 | 133 | double Position=(net_counts*360.0f)/COUNTS_PER_REV; |
sjoerdbarts | 6:ee243782bf51 | 134 | return Position; |
s1600907 | 4:bd1db680e5a1 | 135 | } |
s1600907 | 4:bd1db680e5a1 | 136 | } |
s1600907 | 5:a9da7bc89b24 | 137 | |
sjoerdbarts | 6:ee243782bf51 | 138 | void MultiSin_motor1() |
sjoerdbarts | 6:ee243782bf51 | 139 | { |
sjoerdbarts | 6:ee243782bf51 | 140 | double f1 = 0.2f; |
sjoerdbarts | 7:167b6dfdefee | 141 | double f2 = 0.4f; |
sjoerdbarts | 7:167b6dfdefee | 142 | double f3 = 0.8f; |
sjoerdbarts | 7:167b6dfdefee | 143 | double f4 = 1.6f; |
sjoerdbarts | 7:167b6dfdefee | 144 | double f5 = 3.2f; |
sjoerdbarts | 7:167b6dfdefee | 145 | double f6 = 6.3f; |
sjoerdbarts | 7:167b6dfdefee | 146 | double f7 = 12.6f; |
sjoerdbarts | 7:167b6dfdefee | 147 | double f8 = 25.0f; |
sjoerdbarts | 7:167b6dfdefee | 148 | double f9 = 50.0f; |
sjoerdbarts | 7:167b6dfdefee | 149 | double f10 = 100.0f; |
sjoerdbarts | 6:ee243782bf51 | 150 | const double pi = 3.141592653589793238462; |
sjoerdbarts | 6:ee243782bf51 | 151 | // read encoder |
sjoerdbarts | 6:ee243782bf51 | 152 | double motor1_position = GetPosition(1); |
sjoerdbarts | 6:ee243782bf51 | 153 | // set HIDSCOPE values, position, pwm*volt |
sjoerdbarts | 6:ee243782bf51 | 154 | scope.set(0, motor1_position); |
sjoerdbarts | 7:167b6dfdefee | 155 | scope.set(1, pwm_new); |
sjoerdbarts | 7:167b6dfdefee | 156 | scope.set(2, timer); |
sjoerdbarts | 6:ee243782bf51 | 157 | scope.send(); |
sjoerdbarts | 7:167b6dfdefee | 158 | // sent HIDScope values |
sjoerdbarts | 7:167b6dfdefee | 159 | |
sjoerdbarts | 6:ee243782bf51 | 160 | // calculate the new multisin |
sjoerdbarts | 7:167b6dfdefee | 161 | double multisin = sin(2*pi*f1*timer)+sin(2*pi*f2*timer)+sin(2*pi*f3*timer)+sin(2*pi*f4*timer)+sin(2*pi*f5*timer)+sin(2*pi*f6*timer)+sin(2*pi*f7*timer)+sin(2*pi*f8*timer)+sin(2*pi*f9*timer)+sin(2*pi*f10*timer); |
sjoerdbarts | 6:ee243782bf51 | 162 | // devide by the amount of sin waves |
sjoerdbarts | 7:167b6dfdefee | 163 | pwm_new=multisin / 10.0f; |
sjoerdbarts | 6:ee243782bf51 | 164 | // write the motors |
sjoerdbarts | 7:167b6dfdefee | 165 | SetMotor(1, pwm_new); |
sjoerdbarts | 6:ee243782bf51 | 166 | // Increase the timer |
sjoerdbarts | 7:167b6dfdefee | 167 | timer = timer + 0.001f; |
sjoerdbarts | 7:167b6dfdefee | 168 | if (timer >= (10.00000f)) |
sjoerdbarts | 6:ee243782bf51 | 169 | { |
sjoerdbarts | 7:167b6dfdefee | 170 | SetMotor(1, 0); |
sjoerdbarts | 6:ee243782bf51 | 171 | SinTicker.detach(); |
sjoerdbarts | 6:ee243782bf51 | 172 | timer = 0; |
sjoerdbarts | 6:ee243782bf51 | 173 | } |
sjoerdbarts | 6:ee243782bf51 | 174 | } |
sjoerdbarts | 6:ee243782bf51 | 175 | |
sjoerdbarts | 6:ee243782bf51 | 176 | void MultiSin_motor2() |
sjoerdbarts | 6:ee243782bf51 | 177 | { |
sjoerdbarts | 6:ee243782bf51 | 178 | double f1 = 0.2f; |
sjoerdbarts | 7:167b6dfdefee | 179 | double f2 = 0.4f; |
sjoerdbarts | 7:167b6dfdefee | 180 | double f3 = 0.8f; |
sjoerdbarts | 7:167b6dfdefee | 181 | double f4 = 1.6f; |
sjoerdbarts | 7:167b6dfdefee | 182 | double f5 = 3.2f; |
sjoerdbarts | 7:167b6dfdefee | 183 | double f6 = 6.3f; |
sjoerdbarts | 7:167b6dfdefee | 184 | double f7 = 12.6f; |
sjoerdbarts | 7:167b6dfdefee | 185 | double f8 = 25.0f; |
sjoerdbarts | 7:167b6dfdefee | 186 | double f9 = 50.0f; |
sjoerdbarts | 7:167b6dfdefee | 187 | double f10 = 100.0f; |
sjoerdbarts | 6:ee243782bf51 | 188 | const double pi = 3.141592653589793238462; |
sjoerdbarts | 6:ee243782bf51 | 189 | // read encoder |
sjoerdbarts | 6:ee243782bf51 | 190 | double motor2_position = GetPosition(2); |
sjoerdbarts | 6:ee243782bf51 | 191 | // set HIDSCOPE values, position, pwm*volt |
sjoerdbarts | 6:ee243782bf51 | 192 | scope.set(0, motor2_position); |
sjoerdbarts | 7:167b6dfdefee | 193 | scope.set(1, pwm_new); |
sjoerdbarts | 7:167b6dfdefee | 194 | scope.set(2, timer); |
sjoerdbarts | 6:ee243782bf51 | 195 | scope.send(); |
sjoerdbarts | 7:167b6dfdefee | 196 | |
sjoerdbarts | 6:ee243782bf51 | 197 | // calculate the new multisin |
sjoerdbarts | 7:167b6dfdefee | 198 | double multisin = sin(2*pi*f1*timer)+sin(2*pi*f2*timer)+sin(2*pi*f3*timer)+sin(2*pi*f4*timer)+sin(2*pi*f5*timer)+sin(2*pi*f6*timer)+sin(2*pi*f7*timer)+sin(2*pi*f8*timer)+sin(2*pi*f9*timer)+sin(2*pi*f10*timer); |
sjoerdbarts | 6:ee243782bf51 | 199 | // devide by the amount of sin waves |
sjoerdbarts | 7:167b6dfdefee | 200 | pwm_new=multisin / 10.0f; |
sjoerdbarts | 7:167b6dfdefee | 201 | // write the motors |
sjoerdbarts | 7:167b6dfdefee | 202 | SetMotor(2, pwm_new); |
sjoerdbarts | 6:ee243782bf51 | 203 | // Increase the timer |
sjoerdbarts | 7:167b6dfdefee | 204 | timer = timer + 0.001f; |
sjoerdbarts | 7:167b6dfdefee | 205 | if (timer >= (10.0000f)) |
sjoerdbarts | 6:ee243782bf51 | 206 | { |
sjoerdbarts | 7:167b6dfdefee | 207 | SetMotor(2, 0); |
sjoerdbarts | 6:ee243782bf51 | 208 | SinTicker.detach(); |
sjoerdbarts | 6:ee243782bf51 | 209 | timer = 0; |
sjoerdbarts | 6:ee243782bf51 | 210 | } |
sjoerdbarts | 6:ee243782bf51 | 211 | } |
sjoerdbarts | 6:ee243782bf51 | 212 | |
sjoerdbarts | 6:ee243782bf51 | 213 | void PotControl() |
sjoerdbarts | 6:ee243782bf51 | 214 | { |
sjoerdbarts | 6:ee243782bf51 | 215 | double Motor1_Value = (pot1.read() - 0.5)/2.0; |
sjoerdbarts | 6:ee243782bf51 | 216 | double Motor2_Value = (pot2.read() - 0.5)/2.0; |
sjoerdbarts | 6:ee243782bf51 | 217 | //pc.printf("\r\n Motor value 1: %f \r\n",Motor1_Value); |
sjoerdbarts | 6:ee243782bf51 | 218 | //pc.printf("\r\n Motor value 2: %f \r\n",Motor2_Value); |
sjoerdbarts | 6:ee243782bf51 | 219 | scope.set(0, Motor1_Value); |
sjoerdbarts | 6:ee243782bf51 | 220 | scope.set(1, Motor2_Value); |
sjoerdbarts | 6:ee243782bf51 | 221 | scope.send(); |
sjoerdbarts | 6:ee243782bf51 | 222 | // Write the motors |
sjoerdbarts | 6:ee243782bf51 | 223 | SetMotor(1, Motor1_Value); |
sjoerdbarts | 6:ee243782bf51 | 224 | SetMotor(2, Motor2_Value); |
sjoerdbarts | 6:ee243782bf51 | 225 | } |
sjoerdbarts | 6:ee243782bf51 | 226 | |
sjoerdbarts | 6:ee243782bf51 | 227 | void SinControl1() |
sjoerdbarts | 6:ee243782bf51 | 228 | { |
sjoerdbarts | 6:ee243782bf51 | 229 | SinTicker.attach(&MultiSin_motor1, 0.001); |
sjoerdbarts | 6:ee243782bf51 | 230 | } |
sjoerdbarts | 6:ee243782bf51 | 231 | |
sjoerdbarts | 6:ee243782bf51 | 232 | void SinControl2() |
sjoerdbarts | 6:ee243782bf51 | 233 | { |
sjoerdbarts | 6:ee243782bf51 | 234 | SinTicker.attach(&MultiSin_motor2, 0.001); |
sjoerdbarts | 6:ee243782bf51 | 235 | } |
sjoerdbarts | 6:ee243782bf51 | 236 | |
sjoerdbarts | 6:ee243782bf51 | 237 | void HIDScope_Send() |
sjoerdbarts | 6:ee243782bf51 | 238 | { |
sjoerdbarts | 6:ee243782bf51 | 239 | scope.send(); |
sjoerdbarts | 6:ee243782bf51 | 240 | } |
sjoerdbarts | 6:ee243782bf51 | 241 | |
sjoerdbarts | 6:ee243782bf51 | 242 | |
sjoerdbarts | 6:ee243782bf51 | 243 | |
s1600907 | 3:ac6f86c0db6e | 244 | int main() { |
s1600907 | 3:ac6f86c0db6e | 245 | pc.baud(SERIAL_BAUD); |
sjoerdbarts | 6:ee243782bf51 | 246 | pc.printf("\r\n ***THERMONUCLEAR WARFARE HAS COMMENCED*** \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 247 | |
sjoerdbarts | 6:ee243782bf51 | 248 | // Set LED |
sjoerdbarts | 6:ee243782bf51 | 249 | led=0; |
sjoerdbarts | 6:ee243782bf51 | 250 | Ticker LedTicker; |
sjoerdbarts | 6:ee243782bf51 | 251 | LedTicker.attach(SwitchLed,0.5f); |
sjoerdbarts | 6:ee243782bf51 | 252 | |
sjoerdbarts | 6:ee243782bf51 | 253 | // Interrupt for buttons |
sjoerdbarts | 6:ee243782bf51 | 254 | button1.fall(button1_switch); |
sjoerdbarts | 6:ee243782bf51 | 255 | button2.fall(button2_switch); |
sjoerdbarts | 6:ee243782bf51 | 256 | |
sjoerdbarts | 6:ee243782bf51 | 257 | pc.printf("\r\n ***************** \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 258 | pc.printf("\r\n Press button 1 to start positioning the arms \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 259 | pc.printf("\r\n Make sure both potentiometers are positioned halfway! \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 260 | pc.printf("\r\n ***************** \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 261 | while (button1_value == false) |
sjoerdbarts | 6:ee243782bf51 | 262 | { |
sjoerdbarts | 6:ee243782bf51 | 263 | // just wait |
sjoerdbarts | 6:ee243782bf51 | 264 | } |
sjoerdbarts | 7:167b6dfdefee | 265 | |
sjoerdbarts | 7:167b6dfdefee | 266 | |
sjoerdbarts | 6:ee243782bf51 | 267 | pc.printf("\r\n ***************** \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 268 | pc.printf("\r\n Use potentiometers to control the motor arms \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 269 | pc.printf("\r\n Pot 1 for motor 1 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 270 | pc.printf("\r\n Pot 2 for motor 2 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 271 | pc.printf("\r\n ***************** \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 272 | pc.printf("\r\n Press button 2 to start the rest of the program \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 273 | pc.printf("\r\n ***************** \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 274 | // Start potmeter control |
sjoerdbarts | 6:ee243782bf51 | 275 | PotControlTicker.attach(&PotControl,0.01f); |
TimDouma | 0:46a1642a10c8 | 276 | |
sjoerdbarts | 6:ee243782bf51 | 277 | while (button2_value == false) |
sjoerdbarts | 6:ee243782bf51 | 278 | { |
sjoerdbarts | 6:ee243782bf51 | 279 | // just wait |
sjoerdbarts | 6:ee243782bf51 | 280 | } |
sjoerdbarts | 7:167b6dfdefee | 281 | // When button is pressed detach PotControl and sendzeros to HIDScope |
sjoerdbarts | 6:ee243782bf51 | 282 | PotControlTicker.detach(); |
sjoerdbarts | 7:167b6dfdefee | 283 | // Reset the motor PWM values to zero |
sjoerdbarts | 7:167b6dfdefee | 284 | SetMotor(1, 0); |
sjoerdbarts | 7:167b6dfdefee | 285 | SetMotor(2, 0); |
sjoerdbarts | 7:167b6dfdefee | 286 | // wait a bit to make sure all movement is gone |
sjoerdbarts | 7:167b6dfdefee | 287 | wait(0.5); |
sjoerdbarts | 7:167b6dfdefee | 288 | // Reset the QUE encoder values so that the currect position is nog the 0 position |
sjoerdbarts | 7:167b6dfdefee | 289 | Motor1_ENC_CW.reset(); |
sjoerdbarts | 7:167b6dfdefee | 290 | Motor1_ENC_CCW.reset(); |
sjoerdbarts | 7:167b6dfdefee | 291 | Motor2_ENC_CW.reset(); |
sjoerdbarts | 7:167b6dfdefee | 292 | Motor2_ENC_CCW.reset(); |
sjoerdbarts | 7:167b6dfdefee | 293 | |
sjoerdbarts | 7:167b6dfdefee | 294 | // Flush the HIDScope with zeros |
sjoerdbarts | 6:ee243782bf51 | 295 | SendZerosTicker.attach(&SendZeros,0.001); |
sjoerdbarts | 7:167b6dfdefee | 296 | wait(1); |
sjoerdbarts | 7:167b6dfdefee | 297 | SendZerosTicker.detach(); |
sjoerdbarts | 6:ee243782bf51 | 298 | |
sjoerdbarts | 6:ee243782bf51 | 299 | // Program startup |
sjoerdbarts | 6:ee243782bf51 | 300 | pc.printf("\r\n Starting multisin on motor 1 in: \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 301 | pc.printf("\r\n 10 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 302 | wait(5); |
sjoerdbarts | 6:ee243782bf51 | 303 | pc.printf("\r\n 5 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 304 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 305 | pc.printf("\r\n 4 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 306 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 307 | pc.printf("\r\n 3 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 308 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 309 | pc.printf("\r\n 2 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 310 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 311 | pc.printf("\r\n 1 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 312 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 313 | pc.printf("\r\n 0 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 314 | pc.printf("\r\n Wait for the signal to complete \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 315 | pc.printf("\r\n Press button 2 too continue afterwards \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 316 | SinControl1(); |
sjoerdbarts | 6:ee243782bf51 | 317 | |
sjoerdbarts | 6:ee243782bf51 | 318 | while (button2_value == true) |
sjoerdbarts | 6:ee243782bf51 | 319 | { |
sjoerdbarts | 6:ee243782bf51 | 320 | // just wait |
s1600907 | 5:a9da7bc89b24 | 321 | } |
sjoerdbarts | 7:167b6dfdefee | 322 | // Flush the HIDScope with zeros |
sjoerdbarts | 7:167b6dfdefee | 323 | SendZerosTicker.attach(&SendZeros,0.001); |
sjoerdbarts | 7:167b6dfdefee | 324 | wait(1); |
sjoerdbarts | 7:167b6dfdefee | 325 | SendZerosTicker.detach(); |
TimDouma | 2:bf1466ac4e6f | 326 | |
sjoerdbarts | 7:167b6dfdefee | 327 | // Start multisine om motor 2 routine |
sjoerdbarts | 6:ee243782bf51 | 328 | pc.printf("\r\n Starting multisin on motor 2 in: \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 329 | pc.printf("\r\n 10 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 330 | wait(5); |
sjoerdbarts | 6:ee243782bf51 | 331 | pc.printf("\r\n 5 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 332 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 333 | pc.printf("\r\n 4 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 334 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 335 | pc.printf("\r\n 3 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 336 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 337 | pc.printf("\r\n 2 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 338 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 339 | pc.printf("\r\n 1 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 340 | wait(1); |
sjoerdbarts | 6:ee243782bf51 | 341 | pc.printf("\r\n 0 \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 342 | SinControl2(); |
sjoerdbarts | 6:ee243782bf51 | 343 | wait(23); |
sjoerdbarts | 6:ee243782bf51 | 344 | pc.printf("\r\n Program Finished, press reset to restart \r\n"); |
sjoerdbarts | 6:ee243782bf51 | 345 | while (true) {} |
TimDouma | 0:46a1642a10c8 | 346 | } |