ECE3872 HW/SW Project Code

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

Committer:
nnguyen99
Date:
Thu Apr 09 17:01:39 2020 +0000
Revision:
10:f10105ec435f
Parent:
9:770effc3af2d
Child:
11:299f2c8a4092
Set up serial terminal

Who changed what in which revision?

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