Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FastPWM mbed QEI biquadFilter HIDScope MODSERIAL
main.cpp@12:ef4ba26d0e2f, 2018-10-12 (annotated)
- Committer:
- efvanmarrewijk
- Date:
- Fri Oct 12 12:17:08 2018 +0000
- Revision:
- 12:ef4ba26d0e2f
- Parent:
- 11:3efd6a324f16
Not working version with a state machine for the rotation of motor 3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Ramonwaninge | 0:3ea1bbfbeaae | 1 | #include "mbed.h" |
efvanmarrewijk | 11:3efd6a324f16 | 2 | #include "FastPWM.h" |
efvanmarrewijk | 12:ef4ba26d0e2f | 3 | #include "MODSERIAL.h" |
efvanmarrewijk | 11:3efd6a324f16 | 4 | #include "QEI.h" // Includes library for encoder |
Ramonwaninge | 0:3ea1bbfbeaae | 5 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 6 | MODSERIAL pc(USBTX, USBRX); |
Ramonwaninge | 4:0c27632b453a | 7 | AnalogIn pot1(A1); |
Ramonwaninge | 5:047db32db712 | 8 | AnalogIn pot2(A2); |
efvanmarrewijk | 11:3efd6a324f16 | 9 | InterruptIn button1(D0); |
efvanmarrewijk | 11:3efd6a324f16 | 10 | InterruptIn button2(D1); |
efvanmarrewijk | 11:3efd6a324f16 | 11 | InterruptIn emergencybutton(SW2); /* This is not yet implemented! |
efvanmarrewijk | 11:3efd6a324f16 | 12 | The button SW2 on the K64F is the emergency button: if you press this, |
efvanmarrewijk | 11:3efd6a324f16 | 13 | everything will abort as soon as possible |
efvanmarrewijk | 11:3efd6a324f16 | 14 | */ |
efvanmarrewijk | 11:3efd6a324f16 | 15 | |
efvanmarrewijk | 11:3efd6a324f16 | 16 | DigitalIn pin8(D8); // Encoder 1 u3 |
efvanmarrewijk | 11:3efd6a324f16 | 17 | DigitalIn pin9(D9); // Encoder 1 A |
efvanmarrewijk | 11:3efd6a324f16 | 18 | DigitalIn pin10(D10); // Encoder 2 u3 |
efvanmarrewijk | 11:3efd6a324f16 | 19 | DigitalIn pin11(D11); // Encoder 2 A |
efvanmarrewijk | 11:3efd6a324f16 | 20 | DigitalIn pin12(D12); // Encoder 3 u3 |
efvanmarrewijk | 11:3efd6a324f16 | 21 | DigitalIn pin13(D13); // Encoder 3 A |
efvanmarrewijk | 9:65c52c1f4a57 | 22 | |
efvanmarrewijk | 10:ac36f9a204dd | 23 | DigitalOut pin2(D2); // Motor 3 direction |
efvanmarrewijk | 9:65c52c1f4a57 | 24 | FastPWM pin3(D3); // Motor 3 pwm |
efvanmarrewijk | 10:ac36f9a204dd | 25 | DigitalOut pin4(D4); // Motor 2 direction |
efvanmarrewijk | 6:3c9569087274 | 26 | FastPWM pin5(D5); // Motor 2 pwm |
efvanmarrewijk | 6:3c9569087274 | 27 | FastPWM pin6(D6); // Motor 1 pwm |
efvanmarrewijk | 6:3c9569087274 | 28 | DigitalOut pin7(D7); // Motor 1 direction |
efvanmarrewijk | 6:3c9569087274 | 29 | //float u1 = pot1; |
Ramonwaninge | 2:d8a552d1d33a | 30 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 31 | Ticker motor; |
efvanmarrewijk | 11:3efd6a324f16 | 32 | float u3 = 0.0; // Normalised variable for the movement of motor 3 |
efvanmarrewijk | 9:65c52c1f4a57 | 33 | |
efvanmarrewijk | 11:3efd6a324f16 | 34 | void draaibuttons() |
efvanmarrewijk | 11:3efd6a324f16 | 35 | { /* Pressing button 2 concludes in a change of speed. While button 1 is pressed, |
efvanmarrewijk | 11:3efd6a324f16 | 36 | the direction of change of speed is reversed. So pressing button 1 and 2 |
efvanmarrewijk | 11:3efd6a324f16 | 37 | simultaneously results for the turning speed of motor 3 in a slower movement, |
efvanmarrewijk | 11:3efd6a324f16 | 38 | and eventually the motor will turn the other way around. |
efvanmarrewijk | 11:3efd6a324f16 | 39 | */ |
efvanmarrewijk | 12:ef4ba26d0e2f | 40 | enum Rotatingdir3 {CCWrotating,CWrotating}; |
efvanmarrewijk | 12:ef4ba26d0e2f | 41 | Rotatingdir3 RotatingCurrent = CCWrotating; |
efvanmarrewijk | 12:ef4ba26d0e2f | 42 | bool RotatingChanged = true; |
efvanmarrewijk | 12:ef4ba26d0e2f | 43 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 44 | switch (RotatingCurrent) |
efvanmarrewijk | 12:ef4ba26d0e2f | 45 | { case CCWrotating: |
efvanmarrewijk | 12:ef4ba26d0e2f | 46 | if (RotatingChanged) |
efvanmarrewijk | 12:ef4ba26d0e2f | 47 | { |
efvanmarrewijk | 12:ef4ba26d0e2f | 48 | RotatingChanged = false; |
efvanmarrewijk | 12:ef4ba26d0e2f | 49 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 50 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 51 | // Code for rotating counterclockwise |
efvanmarrewijk | 12:ef4ba26d0e2f | 52 | if (button2 == 1) |
efvanmarrewijk | 12:ef4ba26d0e2f | 53 | { u3 = u3 + 0.1f; //In stapjes van 0.1 |
efvanmarrewijk | 11:3efd6a324f16 | 54 | pin3 = fabs(u3); |
efvanmarrewijk | 12:ef4ba26d0e2f | 55 | if (u3>1.0f) |
efvanmarrewijk | 12:ef4ba26d0e2f | 56 | { u3 = 1.0f; |
efvanmarrewijk | 11:3efd6a324f16 | 57 | } |
efvanmarrewijk | 10:ac36f9a204dd | 58 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 59 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 60 | // Transition to CWrotating if button is pressed |
efvanmarrewijk | 12:ef4ba26d0e2f | 61 | if (button1 == 1) |
efvanmarrewijk | 12:ef4ba26d0e2f | 62 | { |
efvanmarrewijk | 12:ef4ba26d0e2f | 63 | RotatingCurrent = CWrotating; |
efvanmarrewijk | 12:ef4ba26d0e2f | 64 | RotatingChanged = true; |
efvanmarrewijk | 12:ef4ba26d0e2f | 65 | pc.printf("The rotating direction for motor 3 is now counterclockwise"); |
efvanmarrewijk | 12:ef4ba26d0e2f | 66 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 67 | break; |
efvanmarrewijk | 12:ef4ba26d0e2f | 68 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 69 | case CWrotating: |
efvanmarrewijk | 12:ef4ba26d0e2f | 70 | if (RotatingChanged) |
efvanmarrewijk | 12:ef4ba26d0e2f | 71 | { |
efvanmarrewijk | 12:ef4ba26d0e2f | 72 | RotatingChanged = false; |
efvanmarrewijk | 12:ef4ba26d0e2f | 73 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 74 | // Code for rotating clockwise |
efvanmarrewijk | 12:ef4ba26d0e2f | 75 | if (button2 == 1) |
efvanmarrewijk | 12:ef4ba26d0e2f | 76 | { u3 = u3 - 0.1f; |
efvanmarrewijk | 11:3efd6a324f16 | 77 | pin3 = fabs(u3); |
efvanmarrewijk | 12:ef4ba26d0e2f | 78 | if (u3>1.0f) |
efvanmarrewijk | 12:ef4ba26d0e2f | 79 | { u3 = 1.0f; |
efvanmarrewijk | 11:3efd6a324f16 | 80 | } |
efvanmarrewijk | 9:65c52c1f4a57 | 81 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 82 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 83 | // Transition to CWrotating if button is pressed |
efvanmarrewijk | 12:ef4ba26d0e2f | 84 | if (button1 == 1) |
efvanmarrewijk | 12:ef4ba26d0e2f | 85 | { RotatingCurrent = CCWrotating; |
efvanmarrewijk | 12:ef4ba26d0e2f | 86 | RotatingChanged = true; |
efvanmarrewijk | 12:ef4ba26d0e2f | 87 | pc.printf("The rotating direction for motor 3 is now clockwise"); |
efvanmarrewijk | 12:ef4ba26d0e2f | 88 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 89 | break; |
efvanmarrewijk | 9:65c52c1f4a57 | 90 | } |
efvanmarrewijk | 11:3efd6a324f16 | 91 | } |
efvanmarrewijk | 12:ef4ba26d0e2f | 92 | |
efvanmarrewijk | 12:ef4ba26d0e2f | 93 | void draai() |
efvanmarrewijk | 11:3efd6a324f16 | 94 | /* Function for the movement of all motors, using the potmeters for the moving |
efvanmarrewijk | 11:3efd6a324f16 | 95 | direction and speed of motor 1 and 2, and using button 1 and 2 on the biorobotics |
efvanmarrewijk | 11:3efd6a324f16 | 96 | shield for the moving direction and speed of motor 3. |
efvanmarrewijk | 12:ef4ba26d0e2f | 97 | */ |
efvanmarrewijk | 12:ef4ba26d0e2f | 98 | { |
efvanmarrewijk | 11:3efd6a324f16 | 99 | float u1 = 2.0*(pot1 - 0.5); // Normalised variable for the movement of motor 1 |
efvanmarrewijk | 6:3c9569087274 | 100 | if (u1>0) |
efvanmarrewijk | 6:3c9569087274 | 101 | { pin4 = true; |
efvanmarrewijk | 6:3c9569087274 | 102 | } |
efvanmarrewijk | 6:3c9569087274 | 103 | else if(u1<0) |
efvanmarrewijk | 6:3c9569087274 | 104 | { pin4 = false; |
efvanmarrewijk | 6:3c9569087274 | 105 | } |
efvanmarrewijk | 6:3c9569087274 | 106 | pin5 = fabs(u1); |
efvanmarrewijk | 6:3c9569087274 | 107 | |
efvanmarrewijk | 11:3efd6a324f16 | 108 | float u2 = 2.0*(pot2 - 0.5); // Normalised variable for the movement of motor 2 |
efvanmarrewijk | 11:3efd6a324f16 | 109 | if (u2<0) |
efvanmarrewijk | 6:3c9569087274 | 110 | { pin7 = true; |
efvanmarrewijk | 6:3c9569087274 | 111 | } |
efvanmarrewijk | 11:3efd6a324f16 | 112 | else if(u2>0) |
efvanmarrewijk | 6:3c9569087274 | 113 | { pin7 = false; |
efvanmarrewijk | 6:3c9569087274 | 114 | } |
efvanmarrewijk | 11:3efd6a324f16 | 115 | pin6 = fabs(u2); |
efvanmarrewijk | 11:3efd6a324f16 | 116 | |
efvanmarrewijk | 11:3efd6a324f16 | 117 | if (u3>0) |
efvanmarrewijk | 11:3efd6a324f16 | 118 | { pin2 = true; |
efvanmarrewijk | 11:3efd6a324f16 | 119 | } |
efvanmarrewijk | 11:3efd6a324f16 | 120 | else if(u3<0) |
efvanmarrewijk | 11:3efd6a324f16 | 121 | { pin2 = false; |
efvanmarrewijk | 11:3efd6a324f16 | 122 | } |
efvanmarrewijk | 11:3efd6a324f16 | 123 | else |
efvanmarrewijk | 11:3efd6a324f16 | 124 | { pin3 = 0; |
efvanmarrewijk | 11:3efd6a324f16 | 125 | } |
Ramonwaninge | 3:d39285fdd103 | 126 | } |
efvanmarrewijk | 11:3efd6a324f16 | 127 | |
efvanmarrewijk | 11:3efd6a324f16 | 128 | int main() |
efvanmarrewijk | 11:3efd6a324f16 | 129 | { |
efvanmarrewijk | 12:ef4ba26d0e2f | 130 | pc.baud(115200); |
efvanmarrewijk | 12:ef4ba26d0e2f | 131 | |
efvanmarrewijk | 9:65c52c1f4a57 | 132 | pin5.period(1.0/10000); |
efvanmarrewijk | 12:ef4ba26d0e2f | 133 | |
efvanmarrewijk | 11:3efd6a324f16 | 134 | button1.rise(&draaibuttons); |
efvanmarrewijk | 11:3efd6a324f16 | 135 | button2.rise(&draaibuttons); |
efvanmarrewijk | 9:65c52c1f4a57 | 136 | |
efvanmarrewijk | 9:65c52c1f4a57 | 137 | pin3.period_us(50); |
efvanmarrewijk | 9:65c52c1f4a57 | 138 | motor.attach(draai, 0.001); |
Ramonwaninge | 1:e40e981acbf1 | 139 | |
efvanmarrewijk | 6:3c9569087274 | 140 | pin5.period_us(50); |
efvanmarrewijk | 6:3c9569087274 | 141 | motor.attach(draai, 0.001); |
efvanmarrewijk | 6:3c9569087274 | 142 | |
efvanmarrewijk | 6:3c9569087274 | 143 | pin6.period_us(50); |
efvanmarrewijk | 6:3c9569087274 | 144 | motor.attach(draai, 0.001); |
efvanmarrewijk | 12:ef4ba26d0e2f | 145 | |
efvanmarrewijk | 11:3efd6a324f16 | 146 | while(true) |
efvanmarrewijk | 11:3efd6a324f16 | 147 | { |
Ramonwaninge | 3:d39285fdd103 | 148 | } |
Ramonwaninge | 0:3ea1bbfbeaae | 149 | } |