State machine
Dependencies: mbed Adafruit_GFX BioroboticsMotorControl MODSERIAL BioroboticsEMGFilter
Diff: EMG_calibration.h
- Revision:
- 36:691ea4660f29
- Parent:
- 35:38a5af0afee8
--- a/EMG_calibration.h Thu Nov 01 08:50:20 2018 +0000 +++ b/EMG_calibration.h Thu Nov 01 11:10:34 2018 +0000 @@ -5,24 +5,36 @@ #include "Screen.h" #include "EMGFilter.h" -//Define objects -InterruptIn Button1(D2); // Button on interface +class EMG_calibration +{ +private: Ticker calibration_timer; +timeout adjustment_time; Timeout calibration_bicep; // Timeout to get to relax state Timeout end_of_calibration; // Timeout to get to final state -Screen screen(D14, D15, D9); +EMG_Filter* EMG_filter +Screen* screen; -//Variables +//variables volatile float EMG_signal1; - volatile float EMG_min_relax=1.000; - volatile float EMG_min_tense=1.000; - volatile float EMG_max_relax=0.000; - volatile float EMG_max_tense=0.000; + volatile float EMG_min_relax; + volatile float EMG_min_tense; + volatile float EMG_max_relax; + volatile float EMG_max_tense; volatile float EMG_threshold; // IN STATE MACHINE: -EMGFilter emg_input = EMGFilter(A0); // Voor kalibratie van bicep 1 +EMGFilter emg_input *EMGFilter; // Voor kalibratie van bicep 1 //EMGFilter emg_input = EMGFilter(A1); // Voor kalibratie van bicep 2 +EMG_calibration(Screen *new_screen,EMGFilter *EMG_filter){ + screen= new_screen; + EMG_min_relax=1.000; + EMG_min_tense=1.000; + EMG_max_relax=0.000; + EMG_max_tense=0.000; + relax_calibration(); +} + void tense_calibration() { EMG_signal1 = emg_input.get_envelope_emg(); @@ -84,9 +96,11 @@ screen.get_screen_handle()->printf(" ",EMG_min_tense); screen.get_screen_handle()->printf(" ",EMG_min_tense); screen.display(); - wait(2.5f); + adjustment_time.attach(callback(this, &EMG_calibration::start_relax),2.5f); +} +void start_relax(){ calibration_timer.attach(&relax_calibration, 0.1); - end_of_calibration.attach(TheFinalCalibration,5.0f); + end_of_calibration.attach(&relax_measure,5.0f); } void tense_measure() @@ -98,17 +112,10 @@ screen.get_screen_handle()->printf(" ",EMG_min_tense); screen.get_screen_handle()->printf(" ",EMG_min_tense); screen.display(); - wait(2.5f); - calibration_timer.attach(&tense_calibration, 0.1); - calibration_bicep.attach(&relax_measure,5); + adjustment_time.attach(callback(this, &EMG_calibration::start_tense),2.5f); } - -int main() -{ - emg_input.start(0.005); - while(1) - { - Button1.fall(&tense_measure); - } -// return 0; -} \ No newline at end of file +void start_tense(){ + calibration_timer.attach(&tense_calibration,0.1); + calibration_bicep.attach(&TheFinalCalibration,5); +} +};