ECE3872 HW/SW Project Code
Dependencies: mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1
main.cpp@25:7764baddb7bc, 2020-04-13 (annotated)
- Committer:
- trmontgomery
- Date:
- Mon Apr 13 21:32:00 2020 +0000
- Revision:
- 25:7764baddb7bc
- Parent:
- 18:0e0edd4f9e4d
- Child:
- 26:2063ee8419cc
trying to make a servo move back and forth. tried to use SongPlayer class to control servos.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nnguyen99 | 3:7486869c8027 | 1 | #include "mbed.h" |
nnguyen99 | 5:d34d14d33a89 | 2 | #include <iostream> |
trmontgomery | 25:7764baddb7bc | 3 | #include <vector> |
trmontgomery | 18:0e0edd4f9e4d | 4 | #include "speaker_out.h" |
trmontgomery | 16:62976c3c029e | 5 | #include "motor_ctl.h" |
trmontgomery | 25:7764baddb7bc | 6 | |
trmontgomery | 16:62976c3c029e | 7 | DigitalOut myled1(LED1); |
trmontgomery | 16:62976c3c029e | 8 | DigitalOut myled2(LED2); |
trmontgomery | 16:62976c3c029e | 9 | DigitalOut myled3(LED3); |
trmontgomery | 16:62976c3c029e | 10 | DigitalOut myled4(LED4); |
nnguyen99 | 10:f10105ec435f | 11 | |
nnguyen99 | 3:7486869c8027 | 12 | // State Machine control global variables |
nnguyen99 | 3:7486869c8027 | 13 | bool X; //reset |
nnguyen99 | 3:7486869c8027 | 14 | bool P; //play |
nnguyen99 | 3:7486869c8027 | 15 | bool S; //stop |
nnguyen99 | 3:7486869c8027 | 16 | bool R; //record |
nnguyen99 | 3:7486869c8027 | 17 | bool E; //erase |
nnguyen99 | 3:7486869c8027 | 18 | |
trmontgomery | 16:62976c3c029e | 19 | enum sm_state {sRESET, sSTOP, sRECORD, sPLAY, sERASE}; |
nnguyen99 | 3:7486869c8027 | 20 | |
trmontgomery | 25:7764baddb7bc | 21 | //SongPlayer music; |
trmontgomery | 25:7764baddb7bc | 22 | //Puppet puppet; |
trmontgomery | 25:7764baddb7bc | 23 | vector<float> song; //stores all notes recorded by user |
trmontgomery | 25:7764baddb7bc | 24 | |
nnguyen99 | 3:7486869c8027 | 25 | void reset(){ |
nnguyen99 | 3:7486869c8027 | 26 | /* reset state: |
nnguyen99 | 3:7486869c8027 | 27 | Initial state upon powering up the device |
nnguyen99 | 3:7486869c8027 | 28 | 1. Cease all motion |
nnguyen99 | 3:7486869c8027 | 29 | 2. Reset all motors to initial position |
nnguyen99 | 3:7486869c8027 | 30 | 3. Mutes all audio |
nnguyen99 | 3:7486869c8027 | 31 | 4. Goes to erase state if reset button is held down for at least 3 seconds |
nnguyen99 | 3:7486869c8027 | 32 | 5. Goes to stop state according to rotary switch input |
nnguyen99 | 3:7486869c8027 | 33 | 6. LED goes from green to red |
nnguyen99 | 3:7486869c8027 | 34 | NOTE: ONLY exits to stop or erase state |
nnguyen99 | 3:7486869c8027 | 35 | */ |
trmontgomery | 25:7764baddb7bc | 36 | //puppet.reset(); |
trmontgomery | 25:7764baddb7bc | 37 | //music.reset(); |
trmontgomery | 25:7764baddb7bc | 38 | //led = red; //use rgb red for this |
nnguyen99 | 3:7486869c8027 | 39 | } |
nnguyen99 | 3:7486869c8027 | 40 | void stop(){ |
nnguyen99 | 3:7486869c8027 | 41 | /* stop state: |
nnguyen99 | 3:7486869c8027 | 42 | Initiated by rotary switch |
nnguyen99 | 3:7486869c8027 | 43 | 1. Cease all motion |
nnguyen99 | 3:7486869c8027 | 44 | 2. Stop recording |
nnguyen99 | 3:7486869c8027 | 45 | 3. Mute all audio |
nnguyen99 | 3:7486869c8027 | 46 | */ |
trmontgomery | 25:7764baddb7bc | 47 | //puppet.stop(); |
trmontgomery | 25:7764baddb7bc | 48 | //music.stop(); |
nnguyen99 | 3:7486869c8027 | 49 | } |
nnguyen99 | 3:7486869c8027 | 50 | void record(){ |
nnguyen99 | 3:7486869c8027 | 51 | /* record state: |
nnguyen99 | 3:7486869c8027 | 52 | Initiated by rotary switch |
nnguyen99 | 3:7486869c8027 | 53 | 1. Cease all motion |
nnguyen99 | 3:7486869c8027 | 54 | 2. Begin recording ToF inputs (distance and time) |
nnguyen99 | 3:7486869c8027 | 55 | 3. Convert distances to corresponding audio frequencies |
nnguyen99 | 3:7486869c8027 | 56 | 4. Append to list of frequencies |
nnguyen99 | 3:7486869c8027 | 57 | 5. |
nnguyen99 | 3:7486869c8027 | 58 | */ |
trmontgomery | 25:7764baddb7bc | 59 | //music.record(); //need to play as recording happens |
nnguyen99 | 3:7486869c8027 | 60 | } |
nnguyen99 | 3:7486869c8027 | 61 | void play(){ |
nnguyen99 | 3:7486869c8027 | 62 | /* play state: |
nnguyen99 | 3:7486869c8027 | 63 | Initiated by rotary switch |
nnguyen99 | 3:7486869c8027 | 64 | 1. wait a few seconds |
nnguyen99 | 3:7486869c8027 | 65 | 2. begin reading list of frequencies while concurrently: |
nnguyen99 | 3:7486869c8027 | 66 | - moving servo motors accordingly |
nnguyen99 | 3:7486869c8027 | 67 | - playing corresponding sounds |
nnguyen99 | 3:7486869c8027 | 68 | */ |
trmontgomery | 25:7764baddb7bc | 69 | //puppet.dance(); |
trmontgomery | 25:7764baddb7bc | 70 | //music.play(); |
nnguyen99 | 3:7486869c8027 | 71 | } |
nnguyen99 | 3:7486869c8027 | 72 | void erase(){ |
nnguyen99 | 3:7486869c8027 | 73 | /* erase state: |
nnguyen99 | 3:7486869c8027 | 74 | erases entire audio recording |
nnguyen99 | 3:7486869c8027 | 75 | */ |
trmontgomery | 25:7764baddb7bc | 76 | //song.erase(); |
nnguyen99 | 3:7486869c8027 | 77 | } |
nnguyen99 | 3:7486869c8027 | 78 | |
trmontgomery | 4:1790aa9234a3 | 79 | void state_machine_mgr(){ |
trmontgomery | 18:0e0edd4f9e4d | 80 | char curr_state = 1; |
trmontgomery | 18:0e0edd4f9e4d | 81 | char key_input; |
trmontgomery | 18:0e0edd4f9e4d | 82 | X = 1; |
trmontgomery | 18:0e0edd4f9e4d | 83 | S = 0; |
trmontgomery | 18:0e0edd4f9e4d | 84 | R = 0; |
trmontgomery | 18:0e0edd4f9e4d | 85 | P = 0; |
trmontgomery | 18:0e0edd4f9e4d | 86 | E = 0; |
nnguyen99 | 3:7486869c8027 | 87 | while(1) { |
trmontgomery | 18:0e0edd4f9e4d | 88 | if (pc.readable()) { // if they have pressed a key |
trmontgomery | 18:0e0edd4f9e4d | 89 | key_input = pc.getc(); |
trmontgomery | 18:0e0edd4f9e4d | 90 | if(key_input == '1') X=1; //toggle reset |
trmontgomery | 18:0e0edd4f9e4d | 91 | if(key_input == '2') S=1; //toggle stop |
trmontgomery | 18:0e0edd4f9e4d | 92 | if(key_input == '3') R=1; //toogle record |
trmontgomery | 18:0e0edd4f9e4d | 93 | if(key_input == '4') P=1; //toggle play |
trmontgomery | 18:0e0edd4f9e4d | 94 | if(key_input == '5') E=1; //toggle erase |
trmontgomery | 18:0e0edd4f9e4d | 95 | } |
trmontgomery | 18:0e0edd4f9e4d | 96 | //pc.printf("X: %d\n",X); |
trmontgomery | 18:0e0edd4f9e4d | 97 | // pc.printf("S: %d\n",S); |
trmontgomery | 18:0e0edd4f9e4d | 98 | // pc.printf("R: %d\n",R); |
trmontgomery | 18:0e0edd4f9e4d | 99 | // pc.printf("P: %d\n",P); |
trmontgomery | 18:0e0edd4f9e4d | 100 | // pc.printf("E: %d\n",E); |
trmontgomery | 18:0e0edd4f9e4d | 101 | // pc.printf("Current State %d\n",curr_state); |
nnguyen99 | 3:7486869c8027 | 102 | switch(curr_state){ |
trmontgomery | 18:0e0edd4f9e4d | 103 | case 1: |
trmontgomery | 18:0e0edd4f9e4d | 104 | pc.printf("RESET\n"); |
trmontgomery | 18:0e0edd4f9e4d | 105 | P = 0; |
trmontgomery | 18:0e0edd4f9e4d | 106 | R = 0; |
trmontgomery | 18:0e0edd4f9e4d | 107 | if(E){ |
trmontgomery | 18:0e0edd4f9e4d | 108 | curr_state = 5; |
trmontgomery | 18:0e0edd4f9e4d | 109 | X = 0; |
trmontgomery | 18:0e0edd4f9e4d | 110 | }else if(S){ |
trmontgomery | 18:0e0edd4f9e4d | 111 | curr_state = 2; |
trmontgomery | 18:0e0edd4f9e4d | 112 | X = 0; |
trmontgomery | 18:0e0edd4f9e4d | 113 | } |
trmontgomery | 18:0e0edd4f9e4d | 114 | reset(); |
trmontgomery | 16:62976c3c029e | 115 | break; |
trmontgomery | 18:0e0edd4f9e4d | 116 | case 2: |
trmontgomery | 18:0e0edd4f9e4d | 117 | pc.printf("STOP\n"); |
trmontgomery | 18:0e0edd4f9e4d | 118 | E = 0; |
nnguyen99 | 13:3ae48dd67009 | 119 | if(X){ |
trmontgomery | 18:0e0edd4f9e4d | 120 | curr_state = 1; |
trmontgomery | 18:0e0edd4f9e4d | 121 | S = 0; |
trmontgomery | 18:0e0edd4f9e4d | 122 | }else if(R){ |
trmontgomery | 18:0e0edd4f9e4d | 123 | curr_state = 3; |
trmontgomery | 18:0e0edd4f9e4d | 124 | S = 0; |
trmontgomery | 18:0e0edd4f9e4d | 125 | }else if(P){ |
trmontgomery | 18:0e0edd4f9e4d | 126 | curr_state = 4; |
trmontgomery | 18:0e0edd4f9e4d | 127 | S = 0; |
nnguyen99 | 13:3ae48dd67009 | 128 | } |
trmontgomery | 18:0e0edd4f9e4d | 129 | stop(); |
nnguyen99 | 3:7486869c8027 | 130 | break; |
trmontgomery | 18:0e0edd4f9e4d | 131 | case 3: |
trmontgomery | 18:0e0edd4f9e4d | 132 | pc.printf("RECORD\n"); |
trmontgomery | 18:0e0edd4f9e4d | 133 | E = 0; |
trmontgomery | 18:0e0edd4f9e4d | 134 | P = 0; |
nnguyen99 | 13:3ae48dd67009 | 135 | if(X){ |
trmontgomery | 18:0e0edd4f9e4d | 136 | curr_state = 1; |
trmontgomery | 18:0e0edd4f9e4d | 137 | R = 0; |
trmontgomery | 18:0e0edd4f9e4d | 138 | }else if(S){ |
trmontgomery | 18:0e0edd4f9e4d | 139 | curr_state = 2; |
trmontgomery | 18:0e0edd4f9e4d | 140 | R = 0; |
nnguyen99 | 13:3ae48dd67009 | 141 | } |
trmontgomery | 18:0e0edd4f9e4d | 142 | record(); |
nnguyen99 | 3:7486869c8027 | 143 | break; |
trmontgomery | 18:0e0edd4f9e4d | 144 | case 4: |
trmontgomery | 18:0e0edd4f9e4d | 145 | pc.printf("PLAY\n"); |
trmontgomery | 18:0e0edd4f9e4d | 146 | E = 0; |
trmontgomery | 18:0e0edd4f9e4d | 147 | R = 0; |
nnguyen99 | 13:3ae48dd67009 | 148 | if(X){ |
trmontgomery | 18:0e0edd4f9e4d | 149 | curr_state = 1; |
trmontgomery | 18:0e0edd4f9e4d | 150 | P = 0; |
trmontgomery | 18:0e0edd4f9e4d | 151 | }else if(S){ |
trmontgomery | 18:0e0edd4f9e4d | 152 | curr_state = 2; |
trmontgomery | 18:0e0edd4f9e4d | 153 | P = 0; |
nnguyen99 | 13:3ae48dd67009 | 154 | } |
trmontgomery | 18:0e0edd4f9e4d | 155 | play(); |
trmontgomery | 18:0e0edd4f9e4d | 156 | break; |
trmontgomery | 18:0e0edd4f9e4d | 157 | case 5: |
trmontgomery | 18:0e0edd4f9e4d | 158 | pc.printf("ERASE\n"); |
trmontgomery | 18:0e0edd4f9e4d | 159 | S = 0; |
trmontgomery | 18:0e0edd4f9e4d | 160 | P = 0; |
trmontgomery | 18:0e0edd4f9e4d | 161 | R = 0; |
trmontgomery | 18:0e0edd4f9e4d | 162 | if(X){ |
trmontgomery | 18:0e0edd4f9e4d | 163 | curr_state = 1; |
trmontgomery | 18:0e0edd4f9e4d | 164 | E = 0; |
trmontgomery | 18:0e0edd4f9e4d | 165 | } |
trmontgomery | 18:0e0edd4f9e4d | 166 | erase(); |
trmontgomery | 18:0e0edd4f9e4d | 167 | break; |
nnguyen99 | 3:7486869c8027 | 168 | } |
nnguyen99 | 3:7486869c8027 | 169 | } |
nnguyen99 | 3:7486869c8027 | 170 | } |
trmontgomery | 4:1790aa9234a3 | 171 | |
trmontgomery | 4:1790aa9234a3 | 172 | int main() { |
trmontgomery | 16:62976c3c029e | 173 | //state_machine_mgr(); |
trmontgomery | 25:7764baddb7bc | 174 | puppet_move(); |
trmontgomery | 4:1790aa9234a3 | 175 | } |