ECE 111 At Oregon State University / Mbed 2 deprecated Lab3_GUI

Dependencies:   mbed

Committer:
ziadeldebri
Date:
Fri Aug 12 21:39:58 2016 +0000
Revision:
0:36358c0a184c
ECE111

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ziadeldebri 0:36358c0a184c 1 #include "mbed_beat_factory.h"
ziadeldebri 0:36358c0a184c 2 /************************************* Lab3 Mbed beat factory ***************************/
ziadeldebri 0:36358c0a184c 3 /* */
ziadeldebri 0:36358c0a184c 4 /* File: main.cpp */
ziadeldebri 0:36358c0a184c 5 /* Author: Ziad Eldebri */
ziadeldebri 0:36358c0a184c 6 /* Date Created: 8/6/2016 */
ziadeldebri 0:36358c0a184c 7 /* Description: Receives song data from a python GUI and subsequently plays it. It */
ziadeldebri 0:36358c0a184c 8 /* additionally provides the GUI with live song bar updates */
ziadeldebri 0:36358c0a184c 9 /* */
ziadeldebri 0:36358c0a184c 10 /****************************************************************************************/
ziadeldebri 0:36358c0a184c 11 /**********************
ziadeldebri 0:36358c0a184c 12 * Setup Portion *
ziadeldebri 0:36358c0a184c 13 **********************/
ziadeldebri 0:36358c0a184c 14
ziadeldebri 0:36358c0a184c 15 Serial pc(USBTX, USBRX);
ziadeldebri 0:36358c0a184c 16 PwmOut Speaker(PTE31);
ziadeldebri 0:36358c0a184c 17 commStruct comm;
ziadeldebri 0:36358c0a184c 18 songStruct song;
ziadeldebri 0:36358c0a184c 19 BusOut test(LED_RED,LED_GREEN);
ziadeldebri 0:36358c0a184c 20
ziadeldebri 0:36358c0a184c 21 int freq[25] = {220,233,246,261,277,293,311,329,349,369,392,415,440,466,493,523,554,587,622,659,698,740,784,831,0} ;
ziadeldebri 0:36358c0a184c 22 //int freq[25] = {220,233,261,277,293,220,233,261,277,293,220,233,261,277,293,220,233,261,277,293,220,233,261,277,293};
ziadeldebri 0:36358c0a184c 23
ziadeldebri 0:36358c0a184c 24 /************************************* serial_wait_packet ***************************/
ziadeldebri 0:36358c0a184c 25 /* */
ziadeldebri 0:36358c0a184c 26 /* File: main.cpp */
ziadeldebri 0:36358c0a184c 27 /* Author: Ziad Eldebri */
ziadeldebri 0:36358c0a184c 28 /* Date Created: 8/6/2016 */
ziadeldebri 0:36358c0a184c 29 /* Description: Receives song data from a python GUI and subsequently plays it. It */
ziadeldebri 0:36358c0a184c 30 /* additionally provides the GUI with live song bar updates */
ziadeldebri 0:36358c0a184c 31 /* */
ziadeldebri 0:36358c0a184c 32 /****************************************************************************************/
ziadeldebri 0:36358c0a184c 33
ziadeldebri 0:36358c0a184c 34 char serial_wait_packet()
ziadeldebri 0:36358c0a184c 35 {
ziadeldebri 0:36358c0a184c 36 while( !pc.readable()) {};
ziadeldebri 0:36358c0a184c 37 return pc.getc();
ziadeldebri 0:36358c0a184c 38 }
ziadeldebri 0:36358c0a184c 39
ziadeldebri 0:36358c0a184c 40
ziadeldebri 0:36358c0a184c 41 /************************************* get_serial_data ***************************/
ziadeldebri 0:36358c0a184c 42 /* */
ziadeldebri 0:36358c0a184c 43 /* File: main.cpp */
ziadeldebri 0:36358c0a184c 44 /* Author: Ziad Eldebri */
ziadeldebri 0:36358c0a184c 45 /* Date Created: 8/6/2016 */
ziadeldebri 0:36358c0a184c 46 /* Description: Receives song data from a python GUI and subsequently plays it. It */
ziadeldebri 0:36358c0a184c 47 /* additionally provides the GUI with live song bar updates */
ziadeldebri 0:36358c0a184c 48 /* */
ziadeldebri 0:36358c0a184c 49 /****************************************************************************************/
ziadeldebri 0:36358c0a184c 50
ziadeldebri 0:36358c0a184c 51
ziadeldebri 0:36358c0a184c 52 int get_serial_data()
ziadeldebri 0:36358c0a184c 53 {
ziadeldebri 0:36358c0a184c 54
ziadeldebri 0:36358c0a184c 55 int byt_count= 0;
ziadeldebri 0:36358c0a184c 56 int data_count = 0;
ziadeldebri 0:36358c0a184c 57
ziadeldebri 0:36358c0a184c 58 /* Clear the the data array in the comm struct */
ziadeldebri 0:36358c0a184c 59 for( int i = 0; i < 3; i++ ) {
ziadeldebri 0:36358c0a184c 60 for( int j = 0; j <3; j++ ) {
ziadeldebri 0:36358c0a184c 61 comm.data[ i ][ j ] = 0;
ziadeldebri 0:36358c0a184c 62 }
ziadeldebri 0:36358c0a184c 63 }
ziadeldebri 0:36358c0a184c 64
ziadeldebri 0:36358c0a184c 65
ziadeldebri 0:36358c0a184c 66
ziadeldebri 0:36358c0a184c 67
ziadeldebri 0:36358c0a184c 68 if(serial_wait_packet() == '$') {
ziadeldebri 0:36358c0a184c 69 comm.packetType = pc.getc();
ziadeldebri 0:36358c0a184c 70
ziadeldebri 0:36358c0a184c 71 for(;;) {
ziadeldebri 0:36358c0a184c 72
ziadeldebri 0:36358c0a184c 73 char data = pc.getc();
ziadeldebri 0:36358c0a184c 74
ziadeldebri 0:36358c0a184c 75 if(data == '$' ) {
ziadeldebri 0:36358c0a184c 76 return 0;
ziadeldebri 0:36358c0a184c 77 } else if(data == '\n') {
ziadeldebri 0:36358c0a184c 78 comm.data[data_count][byt_count]= '\n';
ziadeldebri 0:36358c0a184c 79 return byt_count ;
ziadeldebri 0:36358c0a184c 80 } else {
ziadeldebri 0:36358c0a184c 81 comm.data[data_count][byt_count]= data;
ziadeldebri 0:36358c0a184c 82 byt_count++;
ziadeldebri 0:36358c0a184c 83 }
ziadeldebri 0:36358c0a184c 84
ziadeldebri 0:36358c0a184c 85 }
ziadeldebri 0:36358c0a184c 86 }
ziadeldebri 0:36358c0a184c 87
ziadeldebri 0:36358c0a184c 88 return 0;
ziadeldebri 0:36358c0a184c 89 }
ziadeldebri 0:36358c0a184c 90
ziadeldebri 0:36358c0a184c 91 /************************************* extract_from_packet ***************************/
ziadeldebri 0:36358c0a184c 92 /* */
ziadeldebri 0:36358c0a184c 93 /* File: main.cpp */
ziadeldebri 0:36358c0a184c 94 /* Author: Ziad Eldebri */
ziadeldebri 0:36358c0a184c 95 /* Date Created: 8/6/2016 */
ziadeldebri 0:36358c0a184c 96 /* Description: Receives song data from a python GUI and subsequently plays it. It */
ziadeldebri 0:36358c0a184c 97 /* additionally provides the GUI with live song bar updates */
ziadeldebri 0:36358c0a184c 98 /* */
ziadeldebri 0:36358c0a184c 99 /****************************************************************************************/
ziadeldebri 0:36358c0a184c 100
ziadeldebri 0:36358c0a184c 101 void extract_from_packet()
ziadeldebri 0:36358c0a184c 102 {
ziadeldebri 0:36358c0a184c 103 /* Switch to specified packet */
ziadeldebri 0:36358c0a184c 104 switch( comm.packetType ) {
ziadeldebri 0:36358c0a184c 105
ziadeldebri 0:36358c0a184c 106 /* New Song Packet */
ziadeldebri 0:36358c0a184c 107 case 'N':
ziadeldebri 0:36358c0a184c 108 initializeSong();
ziadeldebri 0:36358c0a184c 109 break;
ziadeldebri 0:36358c0a184c 110
ziadeldebri 0:36358c0a184c 111 /* Tempo Packet */
ziadeldebri 0:36358c0a184c 112 case 'T':
ziadeldebri 0:36358c0a184c 113 song.tempo = atoi( comm.data[0] );
ziadeldebri 0:36358c0a184c 114 break;
ziadeldebri 0:36358c0a184c 115
ziadeldebri 0:36358c0a184c 116 /* Song length packet */
ziadeldebri 0:36358c0a184c 117 case 'L':
ziadeldebri 0:36358c0a184c 118 song.notes = atoi( comm.data[0] );
ziadeldebri 0:36358c0a184c 119 break;
ziadeldebri 0:36358c0a184c 120
ziadeldebri 0:36358c0a184c 121 /* Song data packet */
ziadeldebri 0:36358c0a184c 122 case 'S':
ziadeldebri 0:36358c0a184c 123 song.note[ song.currentNote ] = atoi(comm.data[ 0 ]);
ziadeldebri 0:36358c0a184c 124 song.currentNote++;
ziadeldebri 0:36358c0a184c 125 break;
ziadeldebri 0:36358c0a184c 126
ziadeldebri 0:36358c0a184c 127 /* Play song packet */
ziadeldebri 0:36358c0a184c 128 case 'P':
ziadeldebri 0:36358c0a184c 129 playSong();
ziadeldebri 0:36358c0a184c 130 break;
ziadeldebri 0:36358c0a184c 131
ziadeldebri 0:36358c0a184c 132 }
ziadeldebri 0:36358c0a184c 133
ziadeldebri 0:36358c0a184c 134 }
ziadeldebri 0:36358c0a184c 135
ziadeldebri 0:36358c0a184c 136 void initializeSong( void )
ziadeldebri 0:36358c0a184c 137 {
ziadeldebri 0:36358c0a184c 138 for( int i = 0; i < 128; i++ ) {
ziadeldebri 0:36358c0a184c 139 song.note[i] = 0;
ziadeldebri 0:36358c0a184c 140 }
ziadeldebri 0:36358c0a184c 141 song.tempo = 120;
ziadeldebri 0:36358c0a184c 142 song.notes = 0;
ziadeldebri 0:36358c0a184c 143 song.currentNote = 0;
ziadeldebri 0:36358c0a184c 144 }
ziadeldebri 0:36358c0a184c 145
ziadeldebri 0:36358c0a184c 146
ziadeldebri 0:36358c0a184c 147 void playSong( void )
ziadeldebri 0:36358c0a184c 148 {
ziadeldebri 0:36358c0a184c 149
ziadeldebri 0:36358c0a184c 150
ziadeldebri 0:36358c0a184c 151 for( int i = 0; i < song.notes; i++ ) {
ziadeldebri 0:36358c0a184c 152 /* Send the current bar we're on to the gui */
ziadeldebri 0:36358c0a184c 153 pc.printf("%d\n",i);
ziadeldebri 0:36358c0a184c 154
ziadeldebri 0:36358c0a184c 155 /* Set the frequency of the PWM for the specified note */
ziadeldebri 0:36358c0a184c 156 if(song.note[i] == 24) {
ziadeldebri 0:36358c0a184c 157 Speaker.period(0);
ziadeldebri 0:36358c0a184c 158 Speaker = 0;
ziadeldebri 0:36358c0a184c 159 } else {
ziadeldebri 0:36358c0a184c 160 Speaker.period( ((float)1/freq[song.note[i]]) );
ziadeldebri 0:36358c0a184c 161
ziadeldebri 0:36358c0a184c 162 Speaker = 0.5;
ziadeldebri 0:36358c0a184c 163
ziadeldebri 0:36358c0a184c 164 /* Wait a specific amount of time based on the tempo */
ziadeldebri 0:36358c0a184c 165 wait_ms(((float)((float)60/(float)song.tempo)*(float)1000.0));
ziadeldebri 0:36358c0a184c 166 test = ~ test;
ziadeldebri 0:36358c0a184c 167 }
ziadeldebri 0:36358c0a184c 168 }
ziadeldebri 0:36358c0a184c 169
ziadeldebri 0:36358c0a184c 170 Speaker.period(0);
ziadeldebri 0:36358c0a184c 171 Speaker = 0;
ziadeldebri 0:36358c0a184c 172 /* Turn off speaker */
ziadeldebri 0:36358c0a184c 173
ziadeldebri 0:36358c0a184c 174 /* Print an end of packet byte 0xFF */
ziadeldebri 0:36358c0a184c 175 pc.printf("255\n");
ziadeldebri 0:36358c0a184c 176
ziadeldebri 0:36358c0a184c 177 }
ziadeldebri 0:36358c0a184c 178
ziadeldebri 0:36358c0a184c 179
ziadeldebri 0:36358c0a184c 180
ziadeldebri 0:36358c0a184c 181
ziadeldebri 0:36358c0a184c 182
ziadeldebri 0:36358c0a184c 183
ziadeldebri 0:36358c0a184c 184
ziadeldebri 0:36358c0a184c 185
ziadeldebri 0:36358c0a184c 186
ziadeldebri 0:36358c0a184c 187
ziadeldebri 0:36358c0a184c 188
ziadeldebri 0:36358c0a184c 189
ziadeldebri 0:36358c0a184c 190
ziadeldebri 0:36358c0a184c 191
ziadeldebri 0:36358c0a184c 192 int main()
ziadeldebri 0:36358c0a184c 193 {
ziadeldebri 0:36358c0a184c 194 test =3;
ziadeldebri 0:36358c0a184c 195 while (true) {
ziadeldebri 0:36358c0a184c 196
ziadeldebri 0:36358c0a184c 197 if( get_serial_data()> 0) {
ziadeldebri 0:36358c0a184c 198
ziadeldebri 0:36358c0a184c 199 extract_from_packet();
ziadeldebri 0:36358c0a184c 200 test = 0;
ziadeldebri 0:36358c0a184c 201 }
ziadeldebri 0:36358c0a184c 202
ziadeldebri 0:36358c0a184c 203
ziadeldebri 0:36358c0a184c 204 }
ziadeldebri 0:36358c0a184c 205
ziadeldebri 0:36358c0a184c 206 }