Ramon Waninge / Mbed 2 deprecated Milestone1

Dependencies:   FastPWM mbed QEI biquadFilter HIDScope MODSERIAL

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?

UserRevisionLine numberNew 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 }