Master Code (Doctor) pub

Dependencies:   mbed

Fork of Serial_Communication by Arthur Semjonov

Revision:
0:757da73b539a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Feb 18 01:19:44 2014 +0000
@@ -0,0 +1,139 @@
+#include "mbed.h"
+#include "music.h"
+#include "TARDIS_ARCHIVE.h"
+
+/********************************************************/
+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==============*/
+I2C doctor_tardis (p9, p10);           //mosi/miso/sck of the Doctor
+/********************************************************/
+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[]= {D3, E3, F3, G3,
+                    F3 ,E3, D3, E3, D3
+                   };
+float beat[]= {.7,.7,.7,0.3,.7,.7,.7,0.3,0.3, 0.3};
+/***************************************************************************************/
+
+int main()
+{
+    while(1) {
+        
+        if (joyUP) {
+            playTheDoctor();
+            wait(0.01);
+        } else if (joyDOWN) {
+            playTheCompanion();
+            wait(0.01);
+        } else if (joyMID) {
+            songOfMyPeople(frequency, beat);
+            //breakConnection(); //Dalek attack
+            wait(0.01);
+        }
+        wait (0.01);
+    }
+}
+//========================================================================================================================================
+//========================================================================================================================================
+//========================================================================================================================================
+
+
+void playTheCompanion()
+{
+    doctor_tardis.start();
+    doctor_tardis.write(addr|0x01);
+    while(doctor_tardis.read(addr)!=0) {
+        rec_note = doctor_tardis.read(addr);
+        pc.printf("\n\rReceived note = '%d'", rec_note);
+        speaker.period(1/(2*notes[rec_note])); // set PWM period
+        speaker=0.5;
+    }
+    doctor_tardis.stop();
+    return;
+}
+
+void playTheDoctor()
+{
+    doctor_tardis.start();
+    doctor_tardis.write(addr);
+
+    for (int i=0; i<=8; i++) {
+        send_note = frequency[i];
+        doctor_tardis.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
+            doctor_tardis.stop();
+            wait(2);     //delay for inferior humans
+            return;
+        } else if(joyDOWN) {
+            doctor_tardis.stop();
+            return;
+        }
+    }
+    doctor_tardis.stop();
+}
+
+void playTheSlave(int frequency)
+{
+    float frqNote = notes[frequency];
+    pc.printf("\n\rFrq of the note = '%f", frequency, "\n\rFrq of the note = '%f'", frqNote);
+    speaker.period(1/(2*frqNote)); // set PWM period
+    speaker=0.5;
+}
+
+/*--------------Play the song of the Doctor--------------*/
+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);
+    }
+}
+/*--------------Play the song of the Companions--------------*/
+
+void songOfYourPeople(int frequency)
+{
+
+}
+
+
+/** Look up the frequency of the note from music.h file
+ *  @param frq[], array of the song
+ *  @param k, location of the note in the array
+ */
+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