read emg to turn motor shaft

Dependencies:   MODSERIAL QEI mbed

main.cpp

Committer:
MaikOvermars
Date:
2018-10-01
Revision:
0:e46276179d7f

File content as of revision 0:e46276179d7f:

#include "mbed.h"
#include "MODSERIAL.h"
#include "QEI.h"

PwmOut pwmpin(D5);
DigitalOut directionpin(D4);
AnalogIn potmeter(A2);

AnalogIn    emg0( A0 );
AnalogIn    emg1( A1 );

MODSERIAL pc(USBTX, USBRX);
QEI wheel (D13, D12, NC, 32);

float angle_resolution = (360.0/32.0)*(1.0/131.0);  //degrees/counts 

float mean(float *samples, int n) {
    float sum = 0.0;
    for (int i=0; i<n; i++) {
        sum += samples[i];
    }
    return sum / (float)n;
}

int main()
{   
    pc.baud(115200);
    
    pwmpin.period_us(60);
    int pulses = 0;
    float angle;
    int n = 1;
    int i = 0;
    float meanmuscle;
    float u[500];
    while (true) {
        u[i] = fabs(2*(emg0.read() - 0.5));
        
        pulses = wheel.getPulses();
        angle = pulses*angle_resolution;      
        if(n%500 == 0){
            pc.printf("Angle is: %f degrees \r\n", meanmuscle);
            meanmuscle = (mean(u,500)-0.1)*4;
            directionpin = meanmuscle > 0.0f;
            pwmpin = fabs(meanmuscle);
            i=0;
        }
        n++;    
        i++;
        wait(0.001);     
    }
}