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
- Committer:
- efvanmarrewijk
- Date:
- 2018-10-19
- Revision:
- 16:720365110953
- Parent:
- 15:a52be6368cd5
- Child:
- 17:0ae9e8c958f8
File content as of revision 16:720365110953:
// Inclusion of libraries #include "mbed.h" #include "FastPWM.h" #include "QEI.h" // Includes library for encoder #include "MODSERIAL.h" #include "HIDScope.h" #include "BiQuad.h" // Input AnalogIn pot1(A1); AnalogIn pot2(A2); InterruptIn button1(D0); InterruptIn button2(D1); InterruptIn emergencybutton(SW2); /* This is not yet implemented! The button SW2 on the K64F is the emergency button: if you press this, everything will abort as soon as possible */ /* Isn't needed anymore --> directly used in QEI DigitalIn pin8(D8); // Encoder 1 B DigitalIn pin9(D9); // Encoder 1 A InterruptIn pin10(D10); // Encoder 2 B InterruptIn pin11(D11); // Encoder 2 A InterruptIn pin12(D12); // Encoder 3 B InterruptIn pin13(D13); // Encoder 3 A */ // Output DigitalOut pin2(D2); // Motor 3 direction FastPWM pin3(D3); // Motor 3 pwm DigitalOut pin4(D4); // Motor 2 direction FastPWM pin5(D5); // Motor 2 pwm FastPWM pin6(D6); // Motor 1 pwm DigitalOut pin7(D7); // Motor 1 direction // Utilisation of libraries MODSERIAL pc(USBTX, USBRX); Ticker motor; QEI Encoder1(D8,D9,NC,32); // Order of D8 and D9 still needs to be determined QEI Encoder2(D10,D11,NC,32); QEI Encoder3(D12,D13,NC,32); //Ticker derivative; // Global variables //double u1 = pot1; double u3 = 0.0; // Normalised variable for the movement of motor 3 // Functions void turnbuttons() { /* Pressing button 2 concludes in a change of speed. While button 1 is pressed, the direction of change of speed is reversed. So pressing button 1 and 2 simultaneously results for the turning speed of motor 3 in a slower movement, and eventually the motor will turn the other way around. */ if (button1 == 1 && button2 == 1) { u3 = u3 + 0.1f; //In stapjes van 0.1 if (u3>1.0f) { u3 = 1.0f; } } else if (button1 == 0 && button2 == 1) { u3 = u3 - 0.1f; if (u3>1.0f) { u3 = 1.0f; } } } void turn() /* Function for the movement of all motors, using the potmeters for the moving direction and speed of motor 1 and 2, and using button 1 and 2 on the biorobotics shield for the moving direction and speed of motor 3. */ { // Controls motor 1 velocity through potmeter 1 double u1 = 2.0*(pot1 - 0.5); // Normalised variable for the movement of motor 1 if (u1>0) { pin4 = true; } else if (u1<0) { pin4 = false; } pin5 = fabs(u1); // Controls motor 2 velocity through potmeter 2 double u2 = 2.0*(pot2 - 0.5); // Normalised variable for the movement of motor 2 if (u2<0) { pin7 = true; } else if (u2>0) { pin7 = false; } pin6 = fabs(u2); // Controls motor 3 velocity through the buttons if (u3>0) //can maybe be deleted? { pin2 = true; } else if (u3<0) { pin2 = false; } else { pin3 = 0; } pin3 = fabs(u3); } /* //Derivative program to test, needs to work at 1000 Hz void derivefunction(double x, double xprev, double tsample) { double deriv = (x - xprev)/tsample; } */ /* Emergency program to test void Emergency() if emergencybutton == 1; { while (true) { } } */ // Main program int main() { pc.baud(115200); pin5.period(1.0/10000); pin3.period_us(50); pin5.period_us(50); pin6.period_us(50); // Ticker motor.attach(turn, 0.001); //derivative.attach(derivefunction, 1/1000) // Interrupts button1.rise(&turnbuttons); button2.rise(&turnbuttons); // Encoder, this code doesn't work // Our encoder doesn't have a NC, what do we need to fill in for that? int counts1 = Encoder1.getPulses(); int counts2 = Encoder2.getPulses(); int counts3 = Encoder3.getPulses(); while (true) { } }