State machine

Dependencies:   mbed Adafruit_GFX BioroboticsMotorControl MODSERIAL BioroboticsEMGFilter

Revision:
36:691ea4660f29
Parent:
35:38a5af0afee8
diff -r 38a5af0afee8 -r 691ea4660f29 EMG_calibration.h
--- 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);
+}
+};