Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope MODSERIAL biquadFilter mbed
Fork of Filter by
Diff: Calibrationscript.cpp
- Revision:
- 5:7c8176cdaa1c
- Parent:
- 4:285fb7d84088
- Child:
- 6:b9a84c1cb4f9
--- a/Calibrationscript.cpp Tue Oct 31 10:17:15 2017 +0000 +++ b/Calibrationscript.cpp Tue Oct 31 13:41:07 2017 +0000 @@ -2,6 +2,7 @@ #include "HIDScope.h" //require the HIDScope library #include "MODSERIAL.h" #include "BiQuad.h" +# include "math.h" // DEFINING //Define Inputs @@ -20,7 +21,7 @@ Ticker sample_timer; // Taking samples Ticker LED_timer; // Write the LED Ticker calibration_timer; // Check when to start calibration -//MODSERIAL pc(USBTX,USBRX); + //Define HIDscope //HIDScope scope(2); //instantize a 2-channel HIDScope object @@ -32,24 +33,26 @@ BiQuad bq2_high(0.96508, -1.93016, 0.96508, -1.92894, 0.93138); BiQuad bq3_notch(0.91859, -1.82269, 0.91859, -1.82269, 0.83718); +double print; double emgFiltered; double filteredAbs; double emg_value; double onoffsignal; -double maxcal=0; -bool aboveTreshold=0; + +bool check_calibration=0; +double avg_emg; // FUNCTIONS //function for filtering void filter(){ - if(aboveTreshold==1){ + if(check_calibration==1){ emg_value = emg.read(); emgFiltered = bqc.step( emg_value ); filteredAbs = abs( emgFiltered ); - onoffsignal=filteredAbs/maxcal; //divide the emg signal by the max EMG to calibrate the signal per person + onoffsignal=filteredAbs/avg_emg; //divide the emg signal by the max EMG to calibrate the signal per person // scope.set(0,emg_value); //set emg signal to scope in channel 1 // scope.set(1,onoffsignal); //set filtered signal to scope in channel 2 // scope.send(); //send the signals to the scope @@ -58,13 +61,13 @@ } //function to check the threshold -void checkthreshold(){ - if(aboveTreshold==1){ //if signal passes threshold value, red light goes on - if(onoffsignal<=0.25){ +void check_emg(){ + if(check_calibration==1){ //if signal passes threshold value, red light goes on + if(onoffsignal<=0.5){ led1.write(1); led2.write(0); } - else if(onoffsignal >= 0.5){ //if signal does not pass threshold value, blue light goes on + else if(onoffsignal > 0.5){ //if signal does not pass threshold value, blue light goes on led1.write(0); led2.write(1); } @@ -72,44 +75,61 @@ } //function to calibrate -void calibration(){ - double sum_array; - if(button1.read()==false){ +int calibration(){ + pc.printf("check1\n\r"); + + // if(button1.read()==false){ + + + led3.write(0); - double signal_verzameling[5000]; - for(int n =0; n<5000;n++){ //read for 5000 samples as calibration - emg_value = emg.read(); - emgFiltered = bqc.step( emg_value ); - filteredAbs = abs( emgFiltered ); + + double signal_verzameling = 0; + for(int n =0; n<5000;n++){ - double signalmeasure = filteredAbs; - signal_verzameling[n]= signalmeasure; - } - double lengte_array = sizeof(signal_verzameling); - + //read for 5000 samples as calibration + emg_value = emg.read(); + emgFiltered = bqc.step( emg_value ); + filteredAbs = abs(emgFiltered); + + + // signal_verzameling[n]= filteredAbs; + signal_verzameling = signal_verzameling + filteredAbs ; + pc.printf("signal_verzameling = %f \n\r",filteredAbs); + wait(0.0005); + if (n == 4999){ + avg_emg = signal_verzameling / n; + pc.printf("avg_emg = %f\n\r",avg_emg); + } + } + + led3.write(1); + // double lengte_array = sizeof(signal_verzameling); + // pc.printf("lengte_array = %f\n\r",lengte_array); - for(int i = 1; i < lengte_array; i++){ - //^^should be 0 - double temp_a = signal_verzameling[i]; - sum_array += temp_a ; - } - double avg = sum_array / lengte_array; + // for(int i = 0; i < lengte_array; i++){ + + + // sum_array = sum_array + signal_verzameling[i] ; + // } +//avg_emg = sum_array / lengte_array; + // pc.printf("avg_emg = %f\n\r",avg_emg); - - aboveTreshold=1; + check_calibration=1; led3.write(1); - } + // } + return 0; } // MAIN int main(){ -// pc.baud(115200); + pc.baud(115200); -// pc.printf("Lampjes zijn langs geweest"); +pc.printf("Lampjes zijn langs geweest"); led1.write(1); led2.write(1); led3.write(1); @@ -119,11 +139,11 @@ bqc.add( &bq1_low ).add( &bq2_high ).add( &bq3_notch ); sample_timer.attach(&filter, 0.002); //continously execute the EMG reader and filter - LED_timer.attach(&checkthreshold, 0.002); //continously execute the motor controller - calibration_timer.attach(&calibration, 0.002); //ticker to check if EMG is being calibrated + LED_timer.attach(&check_emg, 0.002); //continously execute the motor controller + //calibration_timer.attach(&calibration, 0.002); //ticker to check if EMG is being calibrated // pc.printf("%d",filteredAbs); - + calibration(); while(1){ //while loop to keep system going