ECE3872 HW/SW Project Code
Dependencies: mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1
Revision 11:299f2c8a4092, committed 2020-04-11
- Comitter:
- nnguyen99
- Date:
- Sat Apr 11 03:18:24 2020 +0000
- Parent:
- 10:f10105ec435f
- Child:
- 12:0528ef6978ec
- Commit message:
- State machine transition logic using keyboard inputs
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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();
}
