![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ECE3872 HW/SW Project Code
Dependencies: mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1
main.cpp@4:1790aa9234a3, 2020-03-31 (annotated)
- 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?
User | Revision | Line number | New 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 | } |