Arthur Semjonov
/
Serial_Communication_Slave
Slave serial com
Fork of Serial_Communication_Slave by
main.cpp
- Committer:
- ArthurSemjonov
- Date:
- 2014-02-18
- Revision:
- 1:a1067f80d074
- Parent:
- 0:3457fac208b7
File content as of revision 1:a1067f80d074:
#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; }