read emg to turn motor shaft

Dependencies:   MODSERIAL QEI mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "MODSERIAL.h"
00003 #include "QEI.h"
00004 
00005 PwmOut pwmpin(D5);
00006 DigitalOut directionpin(D4);
00007 AnalogIn potmeter(A2);
00008 
00009 AnalogIn    emg0( A0 );
00010 AnalogIn    emg1( A1 );
00011 
00012 MODSERIAL pc(USBTX, USBRX);
00013 QEI wheel (D13, D12, NC, 32);
00014 
00015 float angle_resolution = (360.0/32.0)*(1.0/131.0);  //degrees/counts 
00016 
00017 float mean(float *samples, int n) {
00018     float sum = 0.0;
00019     for (int i=0; i<n; i++) {
00020         sum += samples[i];
00021     }
00022     return sum / (float)n;
00023 }
00024 
00025 int main()
00026 {   
00027     pc.baud(115200);
00028     
00029     pwmpin.period_us(60);
00030     int pulses = 0;
00031     float angle;
00032     int n = 1;
00033     int i = 0;
00034     float meanmuscle;
00035     float u[500];
00036     while (true) {
00037         u[i] = fabs(2*(emg0.read() - 0.5));
00038         
00039         pulses = wheel.getPulses();
00040         angle = pulses*angle_resolution;      
00041         if(n%500 == 0){
00042             pc.printf("Angle is: %f degrees \r\n", meanmuscle);
00043             meanmuscle = (mean(u,500)-0.1)*4;
00044             directionpin = meanmuscle > 0.0f;
00045             pwmpin = fabs(meanmuscle);
00046             i=0;
00047         }
00048         n++;    
00049         i++;
00050         wait(0.001);     
00051     }
00052 }