ECE3872 HW/SW Project Code

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

Committer:
trmontgomery
Date:
Mon Apr 13 02:43:08 2020 +0000
Revision:
18:0e0edd4f9e4d
Parent:
16:62976c3c029e
Child:
25:7764baddb7bc
all files successfully merged

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 18:0e0edd4f9e4d 3 #include "speaker_out.h"
nnguyen99 5:d34d14d33a89 4 #include "uLCD_4DGL.h"
trmontgomery 16:62976c3c029e 5 #include "motor_ctl.h"
trmontgomery 16:62976c3c029e 6 DigitalOut myled1(LED1);
trmontgomery 16:62976c3c029e 7 DigitalOut myled2(LED2);
trmontgomery 16:62976c3c029e 8 DigitalOut myled3(LED3);
trmontgomery 16:62976c3c029e 9 DigitalOut myled4(LED4);
nnguyen99 10:f10105ec435f 10
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
trmontgomery 16:62976c3c029e 18 enum sm_state {sRESET, sSTOP, sRECORD, sPLAY, sERASE};
nnguyen99 3:7486869c8027 19
nnguyen99 3:7486869c8027 20 void reset(){
nnguyen99 3:7486869c8027 21 /* reset state:
nnguyen99 3:7486869c8027 22 Initial state upon powering up the device
nnguyen99 3:7486869c8027 23 1. Cease all motion
nnguyen99 3:7486869c8027 24 2. Reset all motors to initial position
nnguyen99 3:7486869c8027 25 3. Mutes all audio
nnguyen99 3:7486869c8027 26 4. Goes to erase state if reset button is held down for at least 3 seconds
nnguyen99 3:7486869c8027 27 5. Goes to stop state according to rotary switch input
nnguyen99 3:7486869c8027 28 6. LED goes from green to red
nnguyen99 3:7486869c8027 29 NOTE: ONLY exits to stop or erase state
nnguyen99 3:7486869c8027 30 */
nnguyen99 3:7486869c8027 31 }
nnguyen99 3:7486869c8027 32 void stop(){
nnguyen99 3:7486869c8027 33 /* stop state:
nnguyen99 3:7486869c8027 34 Initiated by rotary switch
nnguyen99 3:7486869c8027 35 1. Cease all motion
nnguyen99 3:7486869c8027 36 2. Stop recording
nnguyen99 3:7486869c8027 37 3. Mute all audio
nnguyen99 3:7486869c8027 38 */
nnguyen99 3:7486869c8027 39 }
nnguyen99 3:7486869c8027 40 void record(){
nnguyen99 3:7486869c8027 41 /* record state:
nnguyen99 3:7486869c8027 42 Initiated by rotary switch
nnguyen99 3:7486869c8027 43 1. Cease all motion
nnguyen99 3:7486869c8027 44 2. Begin recording ToF inputs (distance and time)
nnguyen99 3:7486869c8027 45 3. Convert distances to corresponding audio frequencies
nnguyen99 3:7486869c8027 46 4. Append to list of frequencies
nnguyen99 3:7486869c8027 47 5.
nnguyen99 3:7486869c8027 48 */
nnguyen99 3:7486869c8027 49 }
nnguyen99 3:7486869c8027 50 void play(){
nnguyen99 3:7486869c8027 51 /* play state:
nnguyen99 3:7486869c8027 52 Initiated by rotary switch
nnguyen99 3:7486869c8027 53 1. wait a few seconds
nnguyen99 3:7486869c8027 54 2. begin reading list of frequencies while concurrently:
nnguyen99 3:7486869c8027 55 - moving servo motors accordingly
nnguyen99 3:7486869c8027 56 - playing corresponding sounds
nnguyen99 3:7486869c8027 57 */
nnguyen99 3:7486869c8027 58 }
nnguyen99 3:7486869c8027 59 void erase(){
nnguyen99 3:7486869c8027 60 /* erase state:
nnguyen99 3:7486869c8027 61 erases entire audio recording
nnguyen99 3:7486869c8027 62 */
nnguyen99 3:7486869c8027 63 }
nnguyen99 3:7486869c8027 64
trmontgomery 4:1790aa9234a3 65 void state_machine_mgr(){
trmontgomery 18:0e0edd4f9e4d 66 char curr_state = 1;
trmontgomery 18:0e0edd4f9e4d 67 char key_input;
trmontgomery 18:0e0edd4f9e4d 68 X = 1;
trmontgomery 18:0e0edd4f9e4d 69 S = 0;
trmontgomery 18:0e0edd4f9e4d 70 R = 0;
trmontgomery 18:0e0edd4f9e4d 71 P = 0;
trmontgomery 18:0e0edd4f9e4d 72 E = 0;
nnguyen99 3:7486869c8027 73 while(1) {
trmontgomery 18:0e0edd4f9e4d 74 if (pc.readable()) { // if they have pressed a key
trmontgomery 18:0e0edd4f9e4d 75 key_input = pc.getc();
trmontgomery 18:0e0edd4f9e4d 76 if(key_input == '1') X=1; //toggle reset
trmontgomery 18:0e0edd4f9e4d 77 if(key_input == '2') S=1; //toggle stop
trmontgomery 18:0e0edd4f9e4d 78 if(key_input == '3') R=1; //toogle record
trmontgomery 18:0e0edd4f9e4d 79 if(key_input == '4') P=1; //toggle play
trmontgomery 18:0e0edd4f9e4d 80 if(key_input == '5') E=1; //toggle erase
trmontgomery 18:0e0edd4f9e4d 81 }
trmontgomery 18:0e0edd4f9e4d 82 //pc.printf("X: %d\n",X);
trmontgomery 18:0e0edd4f9e4d 83 // pc.printf("S: %d\n",S);
trmontgomery 18:0e0edd4f9e4d 84 // pc.printf("R: %d\n",R);
trmontgomery 18:0e0edd4f9e4d 85 // pc.printf("P: %d\n",P);
trmontgomery 18:0e0edd4f9e4d 86 // pc.printf("E: %d\n",E);
trmontgomery 18:0e0edd4f9e4d 87 // pc.printf("Current State %d\n",curr_state);
nnguyen99 3:7486869c8027 88 switch(curr_state){
trmontgomery 18:0e0edd4f9e4d 89 case 1:
trmontgomery 18:0e0edd4f9e4d 90 pc.printf("RESET\n");
trmontgomery 18:0e0edd4f9e4d 91 P = 0;
trmontgomery 18:0e0edd4f9e4d 92 R = 0;
trmontgomery 18:0e0edd4f9e4d 93 if(E){
trmontgomery 18:0e0edd4f9e4d 94 curr_state = 5;
trmontgomery 18:0e0edd4f9e4d 95 X = 0;
trmontgomery 18:0e0edd4f9e4d 96 }else if(S){
trmontgomery 18:0e0edd4f9e4d 97 curr_state = 2;
trmontgomery 18:0e0edd4f9e4d 98 X = 0;
trmontgomery 18:0e0edd4f9e4d 99 }
trmontgomery 18:0e0edd4f9e4d 100 reset();
trmontgomery 16:62976c3c029e 101 break;
trmontgomery 18:0e0edd4f9e4d 102 case 2:
trmontgomery 18:0e0edd4f9e4d 103 pc.printf("STOP\n");
trmontgomery 18:0e0edd4f9e4d 104 E = 0;
nnguyen99 13:3ae48dd67009 105 if(X){
trmontgomery 18:0e0edd4f9e4d 106 curr_state = 1;
trmontgomery 18:0e0edd4f9e4d 107 S = 0;
trmontgomery 18:0e0edd4f9e4d 108 }else if(R){
trmontgomery 18:0e0edd4f9e4d 109 curr_state = 3;
trmontgomery 18:0e0edd4f9e4d 110 S = 0;
trmontgomery 18:0e0edd4f9e4d 111 }else if(P){
trmontgomery 18:0e0edd4f9e4d 112 curr_state = 4;
trmontgomery 18:0e0edd4f9e4d 113 S = 0;
nnguyen99 13:3ae48dd67009 114 }
trmontgomery 18:0e0edd4f9e4d 115 stop();
nnguyen99 3:7486869c8027 116 break;
trmontgomery 18:0e0edd4f9e4d 117 case 3:
trmontgomery 18:0e0edd4f9e4d 118 pc.printf("RECORD\n");
trmontgomery 18:0e0edd4f9e4d 119 E = 0;
trmontgomery 18:0e0edd4f9e4d 120 P = 0;
nnguyen99 13:3ae48dd67009 121 if(X){
trmontgomery 18:0e0edd4f9e4d 122 curr_state = 1;
trmontgomery 18:0e0edd4f9e4d 123 R = 0;
trmontgomery 18:0e0edd4f9e4d 124 }else if(S){
trmontgomery 18:0e0edd4f9e4d 125 curr_state = 2;
trmontgomery 18:0e0edd4f9e4d 126 R = 0;
nnguyen99 13:3ae48dd67009 127 }
trmontgomery 18:0e0edd4f9e4d 128 record();
nnguyen99 3:7486869c8027 129 break;
trmontgomery 18:0e0edd4f9e4d 130 case 4:
trmontgomery 18:0e0edd4f9e4d 131 pc.printf("PLAY\n");
trmontgomery 18:0e0edd4f9e4d 132 E = 0;
trmontgomery 18:0e0edd4f9e4d 133 R = 0;
nnguyen99 13:3ae48dd67009 134 if(X){
trmontgomery 18:0e0edd4f9e4d 135 curr_state = 1;
trmontgomery 18:0e0edd4f9e4d 136 P = 0;
trmontgomery 18:0e0edd4f9e4d 137 }else if(S){
trmontgomery 18:0e0edd4f9e4d 138 curr_state = 2;
trmontgomery 18:0e0edd4f9e4d 139 P = 0;
nnguyen99 13:3ae48dd67009 140 }
trmontgomery 18:0e0edd4f9e4d 141 play();
trmontgomery 18:0e0edd4f9e4d 142 break;
trmontgomery 18:0e0edd4f9e4d 143 case 5:
trmontgomery 18:0e0edd4f9e4d 144 pc.printf("ERASE\n");
trmontgomery 18:0e0edd4f9e4d 145 S = 0;
trmontgomery 18:0e0edd4f9e4d 146 P = 0;
trmontgomery 18:0e0edd4f9e4d 147 R = 0;
trmontgomery 18:0e0edd4f9e4d 148 if(X){
trmontgomery 18:0e0edd4f9e4d 149 curr_state = 1;
trmontgomery 18:0e0edd4f9e4d 150 E = 0;
trmontgomery 18:0e0edd4f9e4d 151 }
trmontgomery 18:0e0edd4f9e4d 152 erase();
trmontgomery 18:0e0edd4f9e4d 153 break;
nnguyen99 3:7486869c8027 154 }
nnguyen99 3:7486869c8027 155 }
nnguyen99 3:7486869c8027 156 }
trmontgomery 4:1790aa9234a3 157
trmontgomery 4:1790aa9234a3 158 int main() {
trmontgomery 16:62976c3c029e 159 myled1 = 1;
trmontgomery 16:62976c3c029e 160 //hardware_init();
trmontgomery 16:62976c3c029e 161 //state_machine_mgr();
trmontgomery 16:62976c3c029e 162 move_motors();
trmontgomery 4:1790aa9234a3 163 }