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

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?

UserRevisionLine numberNew 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 }