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-12
- Revision:
- 12:ef4ba26d0e2f
- Parent:
- 11:3efd6a324f16
File content as of revision 12:ef4ba26d0e2f:
#include "mbed.h" #include "FastPWM.h" #include "MODSERIAL.h" #include "QEI.h" // Includes library for encoder MODSERIAL pc(USBTX, USBRX); 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 */ DigitalIn pin8(D8); // Encoder 1 u3 DigitalIn pin9(D9); // Encoder 1 A DigitalIn pin10(D10); // Encoder 2 u3 DigitalIn pin11(D11); // Encoder 2 A DigitalIn pin12(D12); // Encoder 3 u3 DigitalIn pin13(D13); // Encoder 3 A 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 //float u1 = pot1; Ticker motor; float u3 = 0.0; // Normalised variable for the movement of motor 3 void draaibuttons() { /* 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. */ enum Rotatingdir3 {CCWrotating,CWrotating}; Rotatingdir3 RotatingCurrent = CCWrotating; bool RotatingChanged = true; switch (RotatingCurrent) { case CCWrotating: if (RotatingChanged) { RotatingChanged = false; } // Code for rotating counterclockwise if (button2 == 1) { u3 = u3 + 0.1f; //In stapjes van 0.1 pin3 = fabs(u3); if (u3>1.0f) { u3 = 1.0f; } } // Transition to CWrotating if button is pressed if (button1 == 1) { RotatingCurrent = CWrotating; RotatingChanged = true; pc.printf("The rotating direction for motor 3 is now counterclockwise"); } break; case CWrotating: if (RotatingChanged) { RotatingChanged = false; } // Code for rotating clockwise if (button2 == 1) { u3 = u3 - 0.1f; pin3 = fabs(u3); if (u3>1.0f) { u3 = 1.0f; } } // Transition to CWrotating if button is pressed if (button1 == 1) { RotatingCurrent = CCWrotating; RotatingChanged = true; pc.printf("The rotating direction for motor 3 is now clockwise"); } break; } } void draai() /* 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. */ { float 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); float 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); if (u3>0) { pin2 = true; } else if(u3<0) { pin2 = false; } else { pin3 = 0; } } int main() { pc.baud(115200); pin5.period(1.0/10000); button1.rise(&draaibuttons); button2.rise(&draaibuttons); pin3.period_us(50); motor.attach(draai, 0.001); pin5.period_us(50); motor.attach(draai, 0.001); pin6.period_us(50); motor.attach(draai, 0.001); while(true) { } }