Ramon Waninge / Mbed 2 deprecated Milestone1

Dependencies:   FastPWM mbed QEI biquadFilter HIDScope MODSERIAL

main.cpp

Committer:
efvanmarrewijk
Date:
2018-10-29
Revision:
24:d255752065d1
Parent:
21:363271dcfe1f
Child:
25:76e9e5597416

File content as of revision 24:d255752065d1:

// 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
*/

DigitalIn pin8(D8);     // Encoder 1 B
DigitalIn pin9(D9);     // Encoder 1 A
DigitalIn pin10(D10);   // Encoder 2 B
DigitalIn pin11(D11);   // Encoder 2 A
DigitalIn pin12(D12);   // Encoder 3 B
DigitalIn 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
//float u1  = pot1;

// Utilisation of libraries
MODSERIAL   pc(USBTX, USBRX);
QEI         Encoder1(D11,D10,NC,4200);      // Counterclockwise motor rotation is the positive direction
QEI         Encoder2(D9,D8,NC,4200);        // Counterclockwise motor rotation is the positive direction
QEI         Encoder3(D13,D12,NC,4200);      // Counterclockwise motor rotation is the positive direction
Ticker      motor;
Ticker      encoders;

// Global variables
const float     pi = 3.14159265358979;
float u3 = 0.0;         // Normalised variable for the movement of motor 3
const float     fCountsRad = 4200.0;

// Functions
float   AngleCalc(float counts)
{   float angle = ((float)counts*2.0*pi)/fCountsRad;
    while (angle > 2.0*pi)
    {   angle = angle - 2.0*pi;
    }
    while (angle < -2.0*pi)
    {   angle = angle + 2.0*pi;
    }
    return angle;
}

void Encoderinput()
{   int counts1;
    int counts2;
    int counts3;
    float  angle1;
    float  angle2;
    float  angle3;
    counts1 = Encoder1.getPulses();
    counts2 = Encoder2.getPulses();
    counts3 = Encoder3.getPulses();
    angle1 = AngleCalc(counts1);
    angle2 = AngleCalc(counts2);
    angle3 = AngleCalc(counts3);
         
    pc.printf("Counts1,2,3: %i  %i  %i      Angle1,2,3: %f  %f  %f\r\n",counts1,counts2,counts3,angle1,angle2,angle3);
}

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.
    */
    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 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;
    }
    pin3 = fabs(u3);   
}

// Main program
int main()
{   
    pc.baud(115200);
        
    pin5.period(1.0/10000);
    button1.rise(&draaibuttons);       
    button2.rise(&draaibuttons);
    
    pin3.period(0.2);
    pin5.period(0.2);
    pin6.period(0.2);
    motor.attach(draai, 0.001);

            
    while   (true)
    {   Encoderinput();
    }
}