ECE3872 HW/SW Project Code

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

Revision:
16:62976c3c029e
Parent:
14:7e81f2cd4b4b
Child:
18:0e0edd4f9e4d
--- a/main.cpp	Sat Apr 11 20:00:59 2020 +0000
+++ b/main.cpp	Mon Apr 13 02:16:45 2020 +0000
@@ -3,15 +3,19 @@
 #include "audio_out.h"
 #include "PinDetect.h"
 #include "uLCD_4DGL.h"
-DigitalOut myled(LED1);
-//Serial mac(USBTX,USBRX);
+#include "motor_ctl.h"
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
 
+// Push buttons init
+PinDetect pb1(p16); 
+PinDetect pb2(p17);  
+PinDetect pb3(p18); 
+PinDetect pb4(p19); 
 // States 
-#define sRESET 1
-#define sSTOP 2
-#define sRECORD 3
-#define sPLAY 4
-#define sERASE 5
+
 //  State Machine control global variables
 bool X;     //reset
 bool P;     //play
@@ -19,6 +23,7 @@
 bool R;     //record
 bool E;     //erase
 
+enum sm_state {sRESET, sSTOP, sRECORD, sPLAY, sERASE};
 
 
 void reset(){ 
@@ -68,100 +73,91 @@
 
 
 
+void pb1_hit_callback (void) 
+{
+    myled1 = !myled1; 
+    //guLCD.printf("REEST");
+}
+
+void pb2_hit_callback (void)
+{
+    myled2 = !myled2; 
+    //guLCD.printf("STOP");
+}
+
+void pb3_hit_callback (void) 
+{
+    myled3 = !myled3; 
+    //guLCD.printf("RECORD");
+}
+
+void pb4_hit_callback (void) 
+{
+    myled4 = !myled4; 
+    //guLCD.printf("PLAY");
+}
+void hardware_init(){ 
+    // Push buttons init
+    pb1.mode(PullUp); 
+    pb2.mode(PullUp); 
+    pb3.mode(PullUp);
+    pb4.mode(PullUp);
+    pb1.attach_deasserted(&pb1_hit_callback);
+    pb2.attach_deasserted(&pb2_hit_callback); 
+    pb3.attach_deasserted(&pb3_hit_callback);
+    pb4.attach_deasserted(&pb4_hit_callback);
+    pb1.setSampleFrequency(); 
+    pb2.setSampleFrequency(); 
+    pb3.setSampleFrequency();
+    pb4.setSampleFrequency();
+}
 
 void state_machine_mgr(){
-    char curr_state =  1;
-    char key_input;
-    X = 1;
-    S = 0;
-    R = 0;
-    P = 0;
-    E = 0;
+    sm_state curr_state =  sRESET;
     while(1) {
-        if (pc.readable()) {                // if they have pressed a key
-            key_input = pc.getc();
-            if(key_input == '1') X=1;   //toggle reset
-            if(key_input == '2') S=1;   //toggle stop
-            if(key_input == '3') R=1;   //toogle record
-            if(key_input == '4') P=1;   //toggle play
-            if(key_input == '5') E=1;   //toggle erase
-        }
-        //pc.printf("X: %d\n",X);
-//        pc.printf("S: %d\n",S);
-//        pc.printf("R: %d\n",R);
-//        pc.printf("P: %d\n",P);
-//        pc.printf("E: %d\n",E);
-//        pc.printf("Current State %d\n",curr_state);
         switch(curr_state){
-            case 1:
-                pc.printf("RESET\n");
-                P = 0;
-                R = 0;
-                if(E){
-                    curr_state = 5;
-                    X = 0;
-                }else if(S){
-                    curr_state = 2;
-                    X = 0;
+            case sRESET:
+                if(S) curr_state = sSTOP;
+                break;
+            case sSTOP:
+                if(X){
+                    curr_state = sRESET;
+                }else if(S&R){
+                    curr_state = sRECORD;
+                }else if(S&P){
+                    curr_state = sPLAY;
                 }
-                reset();
                 break;
-            case 2:
-                pc.printf("STOP\n");
-                E = 0;
+            case sRECORD:
                 if(X){
-                    curr_state = 1;
-                    S = 0;
-                }else if(R){
-                    curr_state = 3;
-                    S = 0;
-                }else if(P){
-                    curr_state = 4;
-                    S = 0;
+                    curr_state = sRESET;
+                }else if(R&S){
+                    curr_state = sSTOP;
+                }else if(R&P){
+                    curr_state = sPLAY;
                 }
-                stop();
-                break;
-            case 3:
-                pc.printf("RECORD\n");
-                E = 0;
-                P = 0;
-                if(X){
-                    curr_state = 1;
-                    R = 0;
-                }else if(S){
-                    curr_state = 2;
-                    R = 0;
-                }
-                record();
                 break;
-            case 4:
-                pc.printf("PLAY\n");
-                E = 0;
-                R = 0;
+            case sPLAY:
                 if(X){
-                    curr_state = 1;
-                    P = 0;
-                }else if(S){
-                    curr_state = 2;
-                    P = 0;
+                    curr_state = sRESET;
+                }else if(P&S){
+                    curr_state = sSTOP;
+                }else if(P&R){
+                    curr_state = sPLAY;
                 }
-                play();
                 break;
-            case 5:
-                pc.printf("ERASE\n");
-                S = 0;
-                P = 0;
-                R = 0;
+            case sERASE:
                 if(X){
-                    curr_state = 1;
-                    E = 0;
+                    curr_state = sRESET;
                 }
-                erase();
-                break;
         }
     }
 }
 
+
 int main() {
-    state_machine_mgr();
+    myled1 = 1; 
+    //hardware_init();
+    //state_machine_mgr();
+    move_motors();
 }