Arthur Semjonov
/
Serial_Communication_Slave
Slave serial com
Fork of Serial_Communication_Slave by
Diff: main.cpp
- Revision:
- 2:b7eee254a06e
- Parent:
- 1:a1067f80d074
--- a/main.cpp Tue Feb 18 16:38:12 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -#include "mbed.h" -#include "TARDIS_ARCHIVE.h" -DigitalOut l(LED1), l2(LED2), l3(LED3), l4(LED4); -/********************************************************/ -AnalogIn pitch(p19); //Potentiometer sets up the pitch of the song -AnalogIn tempo(p20); //Potentiometer to set tempo of the song -DigitalIn joyUP(p15); //Play song of the Doctor (Master) -DigitalIn joyDOWN(p12); //Play song of the Companion (Slave) -DigitalIn joyMID(p14); //Stop playing either master or Slave song. -PwmOut speaker(p26); //Speaker on the mbed - -/*============SERIAL COMMUNICATION==============*/ -I2CSlave companion(p9, p10); //mosi/miso/sck of the Slave -/********************************************************/ -Serial pc(USBTX, USBRX); -int send_note; //word we will send -int rec_note; //value received from master -const int addr = 0x52; - -/************************************|I Am the Doctor|**********************************/ -float frequency[]= {//JJ song -}; -float beat[]= {//JJ beat -}; -/***************************************************************************************/ - -/*companion.write(switch_word); //load up word to send -//test for I2C, and act accordingly -int i = companion.receive(); -if (i == 3) -{ -//companion is addressed, Master will write - recd_val= companion.read();*/ - - -int main() -{ - companion.address(addr); - while(1) { - - if (joyUP) { - playTheDoctor(); - wait(0.01); - } else if (joyDOWN) { - playTheNote(); - wait(0.01); - } else if (joyMID) { - songOfMyPeople(frequency, beat); - wait(0.01); - } - wait (0.01); - } -} -//======================================================================================================================================== -//======================================================================================================================================== -//======================================================================================================================================== - -/********************************************************************* -******************************THE COMPANION*************************** -********************************aka slave***************************** -**********************************************************************/ -/*TODO: 1) Figure out what stop() returns, if any - 2) Add print statements to see what is getting sent/received - Bonus) Implement potentiameters for tempo and pitch */ -void playTheNote() -{ - for (int i=0; i<=8; i++) { - send_note = frequency[i]; - companion.write(send_note); - - float value = lookupNoteFrq(frequency, i); - speaker.period(1/(2*value)); // set PWM period - speaker=0.5; - wait(0.4*beat[i]); - - if (joyMID) { - speaker = 0; //reset speaker duty cycle - companion.write(-1); - wait(2); //delay for inferior humans - return; - } else if(joyDOWN) { - speaker = 0; - companion.stop(); - return; - } - } - speaker = 0; - companion.stop(); - - - - - -} - -/********************************************************************* -******************************THE DOCTOR****************************** -********************************aka master**************************** -**********************************************************************/ -/*TODO: 1) Make sure while loop condition is doing what it suppose to - 2) Initialize receive note, and play it - 3) Implement interrupts - 4) Stopping conditions - Bonus) Potentiometers for pitch and tempo -*/ -void playTheDoctor() -{ - - while(companion.receive()!=0) { - send_note = companion.receive(); - playTheNote(rec_note); - if (joyMID) { - speaker = 0; //reset speaker duty cycle - companion.stop(); //force end condition for both master and companion - wait(2); //delay for inferior humans - return; - } else if(joyUP) { - speaker = 0; //read joyUp value. - companion.stop(); //force end condition due to interuppt - return; - } - } - speaker = 0; - companion.stop();//force end condition - return; - - -} -/*===================================================================*/ -//===================Goon Squad of helper functions==================// -void playTheNote(int k) -{ - float frqNote = notes[k]; - pc.printf("\n\rFrq of the companion note = '%f", k, - "\n\rFrq of the companion note = '%f'", frqNote); - speaker.period(1/(2*frqNote)); // set PWM period - speaker=0.5; - return; -} - -/*====================Original Demo====================================*/ -void songOfMyPeople(float frequency[], float beat[]) -{ - while(1) { //run infinetly unless interupted - for (int i=0; i<=8; i++) { - float value = lookupNoteFrq(frequency, i); - speaker.period(1/(2*value)); // set PWM period - speaker=0.5; // set duty cycle - wait(0.4*beat[i]); - if (joyMID) { - speaker = 0; //reset speaker duty cycle - wait(2); //delay for inferior humans - return; - } - } - speaker = 0; - wait(0.25); - } -} - -/*===================================================================*/ -float lookupNoteFrq(float frq[], int k) -{ - int location_of_note = frequency[k]; - pc.printf("\n\rLocation of the note = '%d'", location_of_note); - - float vNote = notes[location_of_note]; - pc.printf("\n\rFrq of the note = '%f'", vNote); - return vNote; -} \ No newline at end of file