Control up to two motors using filtered EMG signals and a PID controller

Dependencies:   FastPWM HIDScope MODSERIAL QEI Matrix biquadFilter controller errorFetch mbed motorConfig refGen MatrixMath inverseKinematics

Fork of Minor_test_serial by First Last

main.cpp

Committer:
tvlogman
Date:
2017-09-19
Revision:
8:0067469c3389
Parent:
7:1bffab95fc5f
Child:
9:5f0e796c9489

File content as of revision 8:0067469c3389:

#include "mbed.h"
#include "MODSERIAL.h"
#include "HIDScope.h"

HIDScope scope(2);

Ticker AInTicker;
AnalogIn aIn1(A0);

volatile float x;
volatile float x_prev =0; 
volatile float y; // filtered 'output' of ReadAnalogInAndFilter 
volatile float ledBrightness = 0.00;

void ReadAnalogInAndFilter()
{
        x = ledBrightness;   // Capture data
        scope.set(0, x);   // store data in first element of scope memory
        y = (x_prev + x)/2.0;   // averaging filter
        scope.set(1, y);  // store data in second element of scope memory
        x_prev = x; // Prepare for next round
    
        scope.send(); // send what's in scope memory to PC
}

PwmOut ledPwm(D5);
float pwmPeriod = 1.0/5000.0;

AnalogIn pot(A5);
DigitalIn button1(D3);
DigitalIn button2(D6);


MODSERIAL pc(USBTX, USBRX);


int main()
{
    
    pc.baud(115200);
    AInTicker.attach(&ReadAnalogInAndFilter, 0.01);
    ledPwm.period(pwmPeriod);
    
    while (true) {
        if(!button1){
            if(ledBrightness >= 0.05){
                ledBrightness = ledBrightness - 0.05;                
                }
            }
        if(!button2){
            if(ledBrightness <= 0.95){
                ledBrightness = ledBrightness + 0.05;
                }
            }
        ledPwm = ledBrightness;
        wait(0.1f);
        
    }
    
}