ECE3872 HW/SW Project Code

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

Committer:
trmontgomery
Date:
Tue Mar 31 20:03:55 2020 +0000
Revision:
4:1790aa9234a3
Parent:
3:7486869c8027
Child:
5:d34d14d33a89
Child:
19:f76e4ffddbe1
refactoring

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nnguyen99 3:7486869c8027 1 #include "mbed.h"
trmontgomery 4:1790aa9234a3 2 #include "audio_out.h"
nnguyen99 3:7486869c8027 3
nnguyen99 3:7486869c8027 4 DigitalOut myled(LED1);
nnguyen99 3:7486869c8027 5 // States
nnguyen99 3:7486869c8027 6 #define RESET 1
nnguyen99 3:7486869c8027 7 #define STOP 2
nnguyen99 3:7486869c8027 8 #define RECORD 3
nnguyen99 3:7486869c8027 9 #define PLAY 4
nnguyen99 3:7486869c8027 10 #define ERASE 5
nnguyen99 3:7486869c8027 11 // State Machine control global variables
nnguyen99 3:7486869c8027 12 bool X; //reset
nnguyen99 3:7486869c8027 13 bool P; //play
nnguyen99 3:7486869c8027 14 bool S; //stop
nnguyen99 3:7486869c8027 15 bool R; //record
nnguyen99 3:7486869c8027 16 bool E; //erase
nnguyen99 3:7486869c8027 17
nnguyen99 3:7486869c8027 18 enum sm_state {sRESET,sSTOP,sRECORD,sPLAY,sERASE};
nnguyen99 3:7486869c8027 19
nnguyen99 3:7486869c8027 20
nnguyen99 3:7486869c8027 21 void reset(){
nnguyen99 3:7486869c8027 22 /* reset state:
nnguyen99 3:7486869c8027 23 Initial state upon powering up the device
nnguyen99 3:7486869c8027 24 1. Cease all motion
nnguyen99 3:7486869c8027 25 2. Reset all motors to initial position
nnguyen99 3:7486869c8027 26 3. Mutes all audio
nnguyen99 3:7486869c8027 27 4. Goes to erase state if reset button is held down for at least 3 seconds
nnguyen99 3:7486869c8027 28 5. Goes to stop state according to rotary switch input
nnguyen99 3:7486869c8027 29 6. LED goes from green to red
nnguyen99 3:7486869c8027 30 NOTE: ONLY exits to stop or erase state
nnguyen99 3:7486869c8027 31 */
nnguyen99 3:7486869c8027 32 }
nnguyen99 3:7486869c8027 33 void stop(){
nnguyen99 3:7486869c8027 34 /* stop state:
nnguyen99 3:7486869c8027 35 Initiated by rotary switch
nnguyen99 3:7486869c8027 36 1. Cease all motion
nnguyen99 3:7486869c8027 37 2. Stop recording
nnguyen99 3:7486869c8027 38 3. Mute all audio
nnguyen99 3:7486869c8027 39 */
nnguyen99 3:7486869c8027 40 }
nnguyen99 3:7486869c8027 41 void record(){
nnguyen99 3:7486869c8027 42 /* record state:
nnguyen99 3:7486869c8027 43 Initiated by rotary switch
nnguyen99 3:7486869c8027 44 1. Cease all motion
nnguyen99 3:7486869c8027 45 2. Begin recording ToF inputs (distance and time)
nnguyen99 3:7486869c8027 46 3. Convert distances to corresponding audio frequencies
nnguyen99 3:7486869c8027 47 4. Append to list of frequencies
nnguyen99 3:7486869c8027 48 5.
nnguyen99 3:7486869c8027 49 */
nnguyen99 3:7486869c8027 50 }
nnguyen99 3:7486869c8027 51 void play(){
nnguyen99 3:7486869c8027 52 /* play state:
nnguyen99 3:7486869c8027 53 Initiated by rotary switch
nnguyen99 3:7486869c8027 54 1. wait a few seconds
nnguyen99 3:7486869c8027 55 2. begin reading list of frequencies while concurrently:
nnguyen99 3:7486869c8027 56 - moving servo motors accordingly
nnguyen99 3:7486869c8027 57 - playing corresponding sounds
nnguyen99 3:7486869c8027 58 */
nnguyen99 3:7486869c8027 59 }
nnguyen99 3:7486869c8027 60 void erase(){
nnguyen99 3:7486869c8027 61 /* erase state:
nnguyen99 3:7486869c8027 62 erases entire audio recording
nnguyen99 3:7486869c8027 63 */
nnguyen99 3:7486869c8027 64 }
nnguyen99 3:7486869c8027 65
trmontgomery 4:1790aa9234a3 66 void state_machine_mgr(){
nnguyen99 3:7486869c8027 67 sm_state curr_state = sRESET;
nnguyen99 3:7486869c8027 68 while(1) {
nnguyen99 3:7486869c8027 69 switch(curr_state){
nnguyen99 3:7486869c8027 70 case sRESET:
nnguyen99 3:7486869c8027 71 if(S) curr_state = sSTOP;
nnguyen99 3:7486869c8027 72 break;
nnguyen99 3:7486869c8027 73 case sSTOP:
nnguyen99 3:7486869c8027 74 if(X){
nnguyen99 3:7486869c8027 75 curr_state = sRESET;
nnguyen99 3:7486869c8027 76 }else if(S&R){
nnguyen99 3:7486869c8027 77 curr_state = sRECORD;
nnguyen99 3:7486869c8027 78 }else if(S&P){
nnguyen99 3:7486869c8027 79 curr_state = sPLAY;
nnguyen99 3:7486869c8027 80 }
nnguyen99 3:7486869c8027 81 break;
nnguyen99 3:7486869c8027 82 case sRECORD:
nnguyen99 3:7486869c8027 83 if(X){
nnguyen99 3:7486869c8027 84 curr_state = sRESET;
nnguyen99 3:7486869c8027 85 }else if(R&S){
nnguyen99 3:7486869c8027 86 curr_state = sSTOP;
nnguyen99 3:7486869c8027 87 }else if(R&P){
nnguyen99 3:7486869c8027 88 curr_state = sPLAY;
nnguyen99 3:7486869c8027 89 }
nnguyen99 3:7486869c8027 90 break;
nnguyen99 3:7486869c8027 91 case sPLAY:
nnguyen99 3:7486869c8027 92 if(X){
nnguyen99 3:7486869c8027 93 curr_state = sRESET;
nnguyen99 3:7486869c8027 94 }else if(P&S){
nnguyen99 3:7486869c8027 95 curr_state = sSTOP;
nnguyen99 3:7486869c8027 96 }else if(P&R){
nnguyen99 3:7486869c8027 97 curr_state = sPLAY;
nnguyen99 3:7486869c8027 98 }
nnguyen99 3:7486869c8027 99 break;
nnguyen99 3:7486869c8027 100 case sERASE:
nnguyen99 3:7486869c8027 101 if(X){
nnguyen99 3:7486869c8027 102 curr_state = sRESET;
nnguyen99 3:7486869c8027 103 }
nnguyen99 3:7486869c8027 104 }
nnguyen99 3:7486869c8027 105 }
nnguyen99 3:7486869c8027 106 }
trmontgomery 4:1790aa9234a3 107
trmontgomery 4:1790aa9234a3 108 int main() {
trmontgomery 4:1790aa9234a3 109 state_machine_mgr();
trmontgomery 4:1790aa9234a3 110 }