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@8:0067469c3389, 2017-09-19 (annotated)
- Committer:
- tvlogman
- Date:
- Tue Sep 19 14:50:53 2017 +0000
- Revision:
- 8:0067469c3389
- Parent:
- 7:1bffab95fc5f
- Child:
- 9:5f0e796c9489
Using Hidscope to read LED brightness - not screwed up (yet)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vsluiter | 0:c8f15874531b | 1 | #include "mbed.h" |
vsluiter | 0:c8f15874531b | 2 | #include "MODSERIAL.h" |
tvlogman | 8:0067469c3389 | 3 | #include "HIDScope.h" |
tvlogman | 8:0067469c3389 | 4 | |
tvlogman | 8:0067469c3389 | 5 | HIDScope scope(2); |
tvlogman | 8:0067469c3389 | 6 | |
tvlogman | 8:0067469c3389 | 7 | Ticker AInTicker; |
tvlogman | 8:0067469c3389 | 8 | AnalogIn aIn1(A0); |
tvlogman | 8:0067469c3389 | 9 | |
tvlogman | 8:0067469c3389 | 10 | volatile float x; |
tvlogman | 8:0067469c3389 | 11 | volatile float x_prev =0; |
tvlogman | 8:0067469c3389 | 12 | volatile float y; // filtered 'output' of ReadAnalogInAndFilter |
tvlogman | 8:0067469c3389 | 13 | volatile float ledBrightness = 0.00; |
tvlogman | 8:0067469c3389 | 14 | |
tvlogman | 8:0067469c3389 | 15 | void ReadAnalogInAndFilter() |
tvlogman | 8:0067469c3389 | 16 | { |
tvlogman | 8:0067469c3389 | 17 | x = ledBrightness; // Capture data |
tvlogman | 8:0067469c3389 | 18 | scope.set(0, x); // store data in first element of scope memory |
tvlogman | 8:0067469c3389 | 19 | y = (x_prev + x)/2.0; // averaging filter |
tvlogman | 8:0067469c3389 | 20 | scope.set(1, y); // store data in second element of scope memory |
tvlogman | 8:0067469c3389 | 21 | x_prev = x; // Prepare for next round |
tvlogman | 8:0067469c3389 | 22 | |
tvlogman | 8:0067469c3389 | 23 | scope.send(); // send what's in scope memory to PC |
tvlogman | 8:0067469c3389 | 24 | } |
vsluiter | 0:c8f15874531b | 25 | |
tvlogman | 7:1bffab95fc5f | 26 | PwmOut ledPwm(D5); |
tvlogman | 7:1bffab95fc5f | 27 | float pwmPeriod = 1.0/5000.0; |
tvlogman | 7:1bffab95fc5f | 28 | |
tvlogman | 7:1bffab95fc5f | 29 | AnalogIn pot(A5); |
tvlogman | 8:0067469c3389 | 30 | DigitalIn button1(D3); |
tvlogman | 8:0067469c3389 | 31 | DigitalIn button2(D6); |
tvlogman | 8:0067469c3389 | 32 | |
tvlogman | 7:1bffab95fc5f | 33 | |
vsluiter | 0:c8f15874531b | 34 | MODSERIAL pc(USBTX, USBRX); |
vsluiter | 0:c8f15874531b | 35 | |
tvlogman | 7:1bffab95fc5f | 36 | |
vsluiter | 0:c8f15874531b | 37 | int main() |
vsluiter | 0:c8f15874531b | 38 | { |
tvlogman | 7:1bffab95fc5f | 39 | |
vsluiter | 0:c8f15874531b | 40 | pc.baud(115200); |
tvlogman | 8:0067469c3389 | 41 | AInTicker.attach(&ReadAnalogInAndFilter, 0.01); |
tvlogman | 7:1bffab95fc5f | 42 | ledPwm.period(pwmPeriod); |
tvlogman | 7:1bffab95fc5f | 43 | |
vsluiter | 0:c8f15874531b | 44 | while (true) { |
tvlogman | 8:0067469c3389 | 45 | if(!button1){ |
tvlogman | 8:0067469c3389 | 46 | if(ledBrightness >= 0.05){ |
tvlogman | 8:0067469c3389 | 47 | ledBrightness = ledBrightness - 0.05; |
tvlogman | 8:0067469c3389 | 48 | } |
tvlogman | 8:0067469c3389 | 49 | } |
tvlogman | 8:0067469c3389 | 50 | if(!button2){ |
tvlogman | 8:0067469c3389 | 51 | if(ledBrightness <= 0.95){ |
tvlogman | 8:0067469c3389 | 52 | ledBrightness = ledBrightness + 0.05; |
tvlogman | 8:0067469c3389 | 53 | } |
tvlogman | 8:0067469c3389 | 54 | } |
tvlogman | 8:0067469c3389 | 55 | ledPwm = ledBrightness; |
tvlogman | 7:1bffab95fc5f | 56 | wait(0.1f); |
tvlogman | 7:1bffab95fc5f | 57 | |
vsluiter | 0:c8f15874531b | 58 | } |
tvlogman | 7:1bffab95fc5f | 59 | |
vsluiter | 0:c8f15874531b | 60 | } |