Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:36358c0a184c
diff -r 000000000000 -r 36358c0a184c main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Aug 12 21:39:58 2016 +0000 @@ -0,0 +1,206 @@ +#include "mbed_beat_factory.h" +/************************************* Lab3 Mbed beat factory ***************************/ +/* */ +/* File: main.cpp */ +/* Author: Ziad Eldebri */ +/* Date Created: 8/6/2016 */ +/* Description: Receives song data from a python GUI and subsequently plays it. It */ +/* additionally provides the GUI with live song bar updates */ +/* */ +/****************************************************************************************/ +/********************** +* Setup Portion * +**********************/ + +Serial pc(USBTX, USBRX); +PwmOut Speaker(PTE31); +commStruct comm; +songStruct song; +BusOut test(LED_RED,LED_GREEN); + +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} ; +//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}; + +/************************************* serial_wait_packet ***************************/ +/* */ +/* File: main.cpp */ +/* Author: Ziad Eldebri */ +/* Date Created: 8/6/2016 */ +/* Description: Receives song data from a python GUI and subsequently plays it. It */ +/* additionally provides the GUI with live song bar updates */ +/* */ +/****************************************************************************************/ + +char serial_wait_packet() +{ + while( !pc.readable()) {}; + return pc.getc(); +} + + +/************************************* get_serial_data ***************************/ +/* */ +/* File: main.cpp */ +/* Author: Ziad Eldebri */ +/* Date Created: 8/6/2016 */ +/* Description: Receives song data from a python GUI and subsequently plays it. It */ +/* additionally provides the GUI with live song bar updates */ +/* */ +/****************************************************************************************/ + + +int get_serial_data() +{ + + int byt_count= 0; + int data_count = 0; + + /* Clear the the data array in the comm struct */ + for( int i = 0; i < 3; i++ ) { + for( int j = 0; j <3; j++ ) { + comm.data[ i ][ j ] = 0; + } + } + + + + + if(serial_wait_packet() == '$') { + comm.packetType = pc.getc(); + + for(;;) { + + char data = pc.getc(); + + if(data == '$' ) { + return 0; + } else if(data == '\n') { + comm.data[data_count][byt_count]= '\n'; + return byt_count ; + } else { + comm.data[data_count][byt_count]= data; + byt_count++; + } + + } + } + + return 0; +} + +/************************************* extract_from_packet ***************************/ +/* */ +/* File: main.cpp */ +/* Author: Ziad Eldebri */ +/* Date Created: 8/6/2016 */ +/* Description: Receives song data from a python GUI and subsequently plays it. It */ +/* additionally provides the GUI with live song bar updates */ +/* */ +/****************************************************************************************/ + +void extract_from_packet() +{ + /* Switch to specified packet */ + switch( comm.packetType ) { + + /* New Song Packet */ + case 'N': + initializeSong(); + break; + + /* Tempo Packet */ + case 'T': + song.tempo = atoi( comm.data[0] ); + break; + + /* Song length packet */ + case 'L': + song.notes = atoi( comm.data[0] ); + break; + + /* Song data packet */ + case 'S': + song.note[ song.currentNote ] = atoi(comm.data[ 0 ]); + song.currentNote++; + break; + + /* Play song packet */ + case 'P': + playSong(); + break; + + } + +} + +void initializeSong( void ) +{ + for( int i = 0; i < 128; i++ ) { + song.note[i] = 0; + } + song.tempo = 120; + song.notes = 0; + song.currentNote = 0; +} + + +void playSong( void ) +{ + + + for( int i = 0; i < song.notes; i++ ) { + /* Send the current bar we're on to the gui */ + pc.printf("%d\n",i); + + /* Set the frequency of the PWM for the specified note */ + if(song.note[i] == 24) { + Speaker.period(0); + Speaker = 0; + } else { + Speaker.period( ((float)1/freq[song.note[i]]) ); + + Speaker = 0.5; + + /* Wait a specific amount of time based on the tempo */ + wait_ms(((float)((float)60/(float)song.tempo)*(float)1000.0)); + test = ~ test; + } + } + + Speaker.period(0); + Speaker = 0; + /* Turn off speaker */ + + /* Print an end of packet byte 0xFF */ + pc.printf("255\n"); + +} + + + + + + + + + + + + + + +int main() +{ + test =3; + while (true) { + + if( get_serial_data()> 0) { + + extract_from_packet(); + test = 0; + } + + + } + +}