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
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); } }