fsm

Dependencies:   mbed QEI HIDScope MODSERIAL FXOS8700Q

Files at this revision

API Documentation at this revision

Comitter:
ehopman
Date:
Mon Oct 14 12:14:18 2019 +0000
Parent:
1:268bf7dbb15c
Commit message:
dok

Changed in this revision

Opzet_Eli.cpp Show annotated file Show diff for this revision Revisions of this file
QEI.lib Show annotated file Show diff for this revision Revisions of this file
--- a/Opzet_Eli.cpp	Mon Oct 07 08:26:51 2019 +0000
+++ b/Opzet_Eli.cpp	Mon Oct 14 12:14:18 2019 +0000
@@ -1,14 +1,17 @@
 // Robot states
 #include "mbed.h"
 #include "HIDScope.h"
+#include "QEI.h"
 #include "MODSERIAL.h"
 
 // Define objects
-DigitalOut led1(LED_RED);
-DigitalOut led2(LED_BLUE);
-DigitalOut led3(LED_GREEN);
-DigitalIn ptc1(PTC6); //Button 1
-DigitalIn ptc2(PTA4); //Button 2
+MODSERIAL pc(USBTX,USBRX);
+DigitalOut led_red(LED_RED);
+DigitalOut led_blue(LED_BLUE);
+DigitalOut led_green(LED_GREEN);
+InterruptIn button_Mbed(PTC6); //Button 1 Mbed
+InterruptIn button_1(PTB10); //Button 2 BRS
+InterruptIn button_2(PTB11); // Button 3 BRS
 
 // Functions 
 enum states{START,KAL_ME,KAL_EMG,MOVE_START,READY_START,DEMO,MOVE,WAIT,OFF};
@@ -16,6 +19,8 @@
 states CurrentState = START;
 bool StateChanged = true;         // this is the initialization of the first state
 
+// Function START_TO_KAL_ME
+
 void StateMachine(void)
 {
     switch(CurrentState)
@@ -24,37 +29,34 @@
             if (StateChanged)
             {
                 pc.printf("Start state, red led is on. If button 1 pressed, go to kal_me state");
-                led1 = 0;  // Red led is on 
-                led2 = 1;
-                led3 = 1;
+                led_red = 0;  // Red led is on 
+                led_blue = 1;
+                led_green = 1;
                 StateChanged = false;
             }
-            if (ptc1 = 0) // State switches when button pressed
+            if (button_Mbed.mode (PullDown)== false; ) // State switches when button pressed
             {
                 CurrentState = KAL_ME;
                 StateChanged = true;
+                wait(0.2f);
+                
             }
         break;      // end of state START
                 
         case KAL_ME:
             if (StateChanged)
             {
-                pc.printf("Calibration ME state, red ld flickers slow. 
-                while(true)         // Red lef flickers slow
-                {
-                    led2 = 1;
-                    led3 = 1;
-                    led1 = !led1;
-                    wait(0.7);
-                }
+                pc.printf("Calibration ME state, red ld flickers slow"); 
+                //FUNCTION Red led flickers slow
                 
-                // FUNCTION Move to mechanical stop, include v_motor
+                
+                // FUNCTION Move to mechanical stop, include v_motor, t_passed
                 // FUNCTION Reset encoders
                 
                 StateChanged = false;
             }
             
-            if  (v_motor == 0; t_passed > 2) // FUNCTION t_passed, included in v_motor?
+            if  (v_motor == 0 && t_passed > 2) // FUNCTION t_passed, included in v_motor?
             {
                 CurrentState = KAL_EMG;
                 StateChanged = true;
@@ -64,14 +66,9 @@
         case KAL_EMG:
             if (StateChanged)
             {
-                while(true)     // Red led flickers fast
-                {
-                    led2 = 1;
-                    led3 = 1;
-                    led1 = !led1;
-                    wait(0.2);
-                }
-                //FUNCTION Measure EMG_max
+                // FUCNTION Red led flickers fast
+                
+                //FUNCTION Measure EMG_max, EMG variable meten, t_passed
                 
                 StateChanged = false;
             }
@@ -86,43 +83,57 @@
         case MOVE_START:
             if(StateChanged)
             {
-                led1 = 1;
-                led2 = 1; 
-                led3 = 0;   // Green led is on
+                led_red = 1;
+                led_blue = 1; 
+                led_green = 0;   // Green led is on
             
-            // define start position
+                // FUNCTION move to start, t_passed
+                // Define current_position & start_position 
+                StateChanged = false; 
+            }
             
-            if //position realised and tmie passed
+            if (current_position == start_position && t_passed > 2) // FUNCTIO t_passed
             {
-                // Stop moving
                 CurrentState = READY_START;
                 StateChanged = true;
             } 
         break;      // end of state MOVE_START
         
         case READY_START:
-            while(true)
+            if (StateChanged)
             {
-                led1 = 1;
-                led2 = 1;
-                led3 = 0;
+                led_red = 1;
+                led_blue = 1;
+                led_green = 0;       // Green led is on 
+                
+                StateChanged = false;
             }
             
-            if (ptc1 == 0) 
+            if (button_1.read() == false)   // Button 1
             {
                 CurrentState = DEMO;
                 StateChanged = true;
+                wait(0.2f);
             }
-            else if (ptc2 == 0) // or EMG signal >= 20% max
+            else if (button_2.read() == false || EMG > 0.2*EMG_max) // Button 2 or 20% EMG_max
             {
                 CurrentState = MOVE;
                 StateChanged = true;
+                wait(0.2f);
             }                
         break;      // end of state READY_START
         
         case DEMO:
-            //perform straight movements in some way, dunno how to make that here yet
-            if //position = end and time 
+            if (StateChanged)
+            {
+                //FUNCTION Blue led blink fast
+                
+                //FUNCTION perform straight movements for demo
+                
+                StateChanged = false; 
+            }
+            
+            if (current_position == end_position && t_passed > 2) 
             {
                 CurrentState = MOVE_START;
                 StateChanged = true;
@@ -130,38 +141,69 @@
         break;      // end of state DEMO
         
         case MOVE:
-            if // no movement for 2 sec after input
+            if (StateChanged)
+            {
+                led_red = 1;
+                led_green = 1;
+                led_blue = 0;  //Blue led is on 
+                
+                // FUNCTION Play the game with EMG signal
+                
+                StateChanged = false; 
+            }
+            
+            if (button_Mbed.read() == false)
+            {
+                CurrentState = OFF;
+                StateChanged = true;
+                wait(0.2f);
+            }
+            
+            else if (button_1.read() == false || EMG < 0.2*EMG_max) 
             {
                 CurrentState = WAIT;
                 StateChanged = true;
+                wait(0.2f);
             }
-            else if // input signal
-            {
-                // move in direction linked to EMG
-            }
-            // Iets met dat oranje lichtje maar snap die stap niet helemaal 
-        break;      // end of state MOVE
+            break;      // end of state MOVE
         
         case WAIT:
-            if (ptc1 == 0)
+            if (StateChanged)
+            {
+                led_red = 0;   // Pink led iS on 
+                led_blue = 0; 
+                led_green = 1
+                
+            if (button_Mbed.read() == false) // For five second, too hard
             {
-                CurrentState = READY_START;
+                CurrentState = OFF;
                 StateChanged = true;
+                wait(0.2f);
             )
-            else if (ptc2 == 0) // or EMG>= 20%max
+            else if (button_1.read() == false) 
+            {
+                CurrentState = MOVE_START;
+                StateChanged = true;
+                wait(0.2f);
+            }
+            else if (button_2.read() == false || EMG > 0.2*EMG_max) 
             {
                 CurrentState = MOVE;
                 StateChanged = true;
+                wait(0.2f);
             }
-            else if (ptc1 == 0) //maar dan heel lang achter elkaar
+            
         break;      // end of state WAIT
         
         case OFF:
-            // turns all of 
+            led_red = 0;       // White led is on 
+            led_blue = 0; 
+            led_green = 0;
+            
         break;      // end of state OFF
         
         default:
-        TurnMotorsoff();
+        TurnMotorsoff(); //FUNCTION 
         printf("Unknown state reached");
     }               // End of the switch, all states are prescribed
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QEI.lib	Mon Oct 14 12:14:18 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/aberk/code/QEI/#5c2ad81551aa