Laagdoorlaatfilter MBED + HIDscope + optionele LCD

Dependencies:   HIDScope MODSERIAL TextLCD mbed

Committer:
phgbartels
Date:
Thu Oct 16 14:42:43 2014 +0000
Revision:
0:8405998d18d6
Laagdoorlaatfilter + HID-scope + optionele LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phgbartels 0:8405998d18d6 1 #include "mbed.h"
phgbartels 0:8405998d18d6 2 #include "MODSERIAL.h"
phgbartels 0:8405998d18d6 3 #include "HIDScope.h"
phgbartels 0:8405998d18d6 4 #include "TextLCD.h"
phgbartels 0:8405998d18d6 5
phgbartels 0:8405998d18d6 6 /*definieren van de filtercoëfficienten, waarbij A. de y-componenten(output) geven en B. de x-componenten(input)*/
phgbartels 0:8405998d18d6 7 #define A1 -1.3490
phgbartels 0:8405998d18d6 8 #define A2 0.5140
phgbartels 0:8405998d18d6 9 #define B0 0.7157
phgbartels 0:8405998d18d6 10 #define B1 -1.4315
phgbartels 0:8405998d18d6 11 #define B2 0.7157
phgbartels 0:8405998d18d6 12
phgbartels 0:8405998d18d6 13 /*aantal kanalen die naar de HIDscope */
phgbartels 0:8405998d18d6 14 HIDScope scope(2); /*Definieren dat we 2 kanalen naar de HID-scope willen sturen*/
phgbartels 0:8405998d18d6 15 AnalogIn emg(PTB1); /*Analog input pin definieren*/
phgbartels 0:8405998d18d6 16 TextLCD lcd(PTD2, PTA12, PTB2, PTB3, PTC2, PTA13, TextLCD::LCD16x2); /*pinnen voor textLCD toeschrijven naar de library tekstLCD, zodat de functies uit die bibliotheek gebruikt kunnen worden*/
phgbartels 0:8405998d18d6 17 float(y); /*y moet een floating point worden(type definieren)*/
phgbartels 0:8405998d18d6 18 float filter(float); /*naar de functie filter willen we een float toeschrijven, welke later gedefinieerd mag worden*/
phgbartels 0:8405998d18d6 19 int main() {
phgbartels 0:8405998d18d6 20 float x; /*x moet een floating point worden*/
phgbartels 0:8405998d18d6 21 while(true) {
phgbartels 0:8405998d18d6 22 x = emg.read(); /*het EMG signaal vanaf de pin wordt opgeslagen in x*/
phgbartels 0:8405998d18d6 23 y = filter(x); /*x gaat in de filter*/
phgbartels 0:8405998d18d6 24 scope.set(0, y); /*het bewerkte signaal wordt op kanaal 1 getoont*/
phgbartels 0:8405998d18d6 25 scope.set(1,emg); /*het ruwe signaal wordt op kanaal 2 getoont*/
phgbartels 0:8405998d18d6 26 scope.send(); /*Hiermee stuur je de data daadwerkelijk naar je pc*/
phgbartels 0:8405998d18d6 27 lcd.cls(); /*schoonmaken LCD scherm*/
phgbartels 0:8405998d18d6 28 /*hieronder een leuke if functie zodat onze display aangeeft of iemand een lage, middel of hoge aanspanning heeft.*/
phgbartels 0:8405998d18d6 29 if (abs(y) <= 0.05){
phgbartels 0:8405998d18d6 30 lcd.printf("Lage\naanspanning");
phgbartels 0:8405998d18d6 31 wait(0.2);
phgbartels 0:8405998d18d6 32 }
phgbartels 0:8405998d18d6 33
phgbartels 0:8405998d18d6 34 else if (abs(y) >= 0.05 && abs(y) <= 0.10){
phgbartels 0:8405998d18d6 35 lcd.printf("Middel\naanspanning");
phgbartels 0:8405998d18d6 36 wait(0.2);
phgbartels 0:8405998d18d6 37 }
phgbartels 0:8405998d18d6 38
phgbartels 0:8405998d18d6 39 else{
phgbartels 0:8405998d18d6 40 lcd.printf("Hoge\naanspanning");
phgbartels 0:8405998d18d6 41 wait(0.2);
phgbartels 0:8405998d18d6 42 }
phgbartels 0:8405998d18d6 43 wait(0.005); /*wacht 0.005s, omdat we meten met 200Hz*/
phgbartels 0:8405998d18d6 44 }
phgbartels 0:8405998d18d6 45 }
phgbartels 0:8405998d18d6 46
phgbartels 0:8405998d18d6 47 float filter(float x) { /*de filter functie! Waarbij de x de input is en y de output!*/
phgbartels 0:8405998d18d6 48 static float y, x1, y1, x2, y2;
phgbartels 0:8405998d18d6 49 y = -A1*y1-A2*y2+B0*x+B1*x1+B2*x2;
phgbartels 0:8405998d18d6 50 x2 = x1;
phgbartels 0:8405998d18d6 51 x1 = x;
phgbartels 0:8405998d18d6 52 y2 = y1;
phgbartels 0:8405998d18d6 53 y1 = y;
phgbartels 0:8405998d18d6 54 return y;
phgbartels 0:8405998d18d6 55 }