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
Diff: main.cpp
- Revision:
- 8:0067469c3389
- Parent:
- 7:1bffab95fc5f
- Child:
- 9:5f0e796c9489
--- a/main.cpp Tue Sep 19 14:17:30 2017 +0000 +++ b/main.cpp Tue Sep 19 14:50:53 2017 +0000 @@ -1,11 +1,35 @@ #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 button(D3); +DigitalIn button1(D3); +DigitalIn button2(D6); + MODSERIAL pc(USBTX, USBRX); @@ -14,18 +38,23 @@ { pc.baud(115200); - pc.printf("Hello World!\r\n"); - + AInTicker.attach(&ReadAnalogInAndFilter, 0.01); ledPwm.period(pwmPeriod); - while (true) { - float potMeterValue = pot.read(); - ledPwm = potMeterValue; + 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); - - } }