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.
Fork of Serial_Communication by
Diff: main.cpp
- 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
