ECE3872 HW/SW Project Code

Dependencies:   mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1

Revision:
11:299f2c8a4092
Parent:
10:f10105ec435f
Child:
12:0528ef6978ec
--- a/main.cpp	Thu Apr 09 17:01:39 2020 +0000
+++ b/main.cpp	Sat Apr 11 03:18:24 2020 +0000
@@ -4,7 +4,7 @@
 #include "PinDetect.h"
 #include "uLCD_4DGL.h"
 DigitalOut myled(LED1);
-Serial mac(USBTX,USBRX);
+//Serial mac(USBTX,USBRX);
 
 // States 
 #define sRESET 1
@@ -70,65 +70,91 @@
 
 
 void state_machine_mgr(){
-    mac.printf("SM\n");
-    int curr_state =  1;
+    pc.printf("SM\n");
+    char curr_state =  1;
+    X = 1;
+    S = 0;
+    R = 0;
+    P = 0;
+    E = 0;
     while(1) {
+        if (pc.readable()) {                // if they have pressed a key
+            curr_state = pc.getc();
+            if('1') X=!X;   //toggle reset
+            if('2') S=!S;   //toggle stop
+            if('3') R=!R;   //toogle record
+            if('4') P=!P;   //toggle play
+            if('5') E=!E;   //toggle erase
+        }
+        
+        // Implementing state machine logical transitions based on what states can exit to other states
+        if(X){
+            if(E){
+                curr_state = 5;
+                X = !X;
+            }else if(S){
+                curr_state = 2;
+                X = !X;
+            }
+        }else if(S){
+            if(X){
+                curr_state = 1;
+                S = !S;
+            }else if(R){
+                curr_state = 3;
+                S = !S;
+            }else if(P){
+                curr_state = 4;
+                S = !S;
+            }
+        }else if(R){
+            if(X){
+                curr_state = 1;
+                R = !R;
+            }else if(S){
+                curr_state = 2;
+                R = !R;
+            }
+        }else if(P){
+            if(X){
+                curr_state = 1;
+                P = !P;
+            }else if(S){
+                curr_state = 2;
+                P = !P;
+            }
+        }else if(E){
+            if(X){
+                curr_state = 1;
+                E = !E;
+            }
+        }
         switch(curr_state){
             case 1:
-                S,R,P,E = 0;
-                mac.printf("RESET\n");
+                pc.printf("RESET\n");
                 reset();
-                if(S) curr_state = sSTOP;
                 break;
             case 2:
-                X,R,P,E = 0;
-                mac.printf("STOP\n");
+                pc.printf("STOP\n");
                 stop();
-                if(X){
-                    curr_state = sRESET;
-                }else if(S&R){
-                    curr_state = sRECORD;
-                }else if(S&P){
-                    curr_state = sPLAY;
-                }
                 break;
             case 3:
-                S,X,P,E = 0;
-                mac.printf("RECORD\n");
+                pc.printf("RECORD\n");
                 record();
-                if(X){
-                    curr_state = sRESET;
-                }else if(R&S){
-                    curr_state = sSTOP;
-                }else if(R&P){
-                    curr_state = sPLAY;
-                }
                 break;
             case 4:
-                S,R,X,E = 0;
-                mac.printf("PLAY\n");
+                pc.printf("PLAY\n");
                 play();
-                if(X){
-                    curr_state = sRESET;
-                }else if(P&S){
-                    curr_state = sSTOP;
-                }else if(P&R){
-                    curr_state = sPLAY;
-                }
                 break;
             case 5:
-                mac.printf("ERASE\n");
+                pc.printf("ERASE\n");
                 erase();
-                S,R,X,P = 0;
-                if(X){
-                    curr_state = sRESET;
-                }
+                break;
         }
-        curr_state = mac.getc();
     }
 }
 
 int main() {
-    mac.printf("MAIN\n");
+    pc.printf("MAIN\n");
     state_machine_mgr();
 }