ECE3872 HW/SW Project Code

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

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?

UserRevisionLine numberNew 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 }