Using DAC to play a melody

Dependencies:   Tone mbed

Fork of 1620_App_Board_UART_getc by Craig Evans

Files at this revision

API Documentation at this revision

Comitter:
eencae
Date:
Mon Mar 13 19:51:01 2017 +0000
Parent:
0:8ccb53688328
Commit message:
Initial commit.;

Changed in this revision

ShiftReg.lib Show diff for this revision Revisions of this file
Tone.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 8ccb53688328 -r 9840610e5ff2 ShiftReg.lib
--- a/ShiftReg.lib	Fri Mar 03 15:10:39 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/eencae/code/ShiftReg/#33b34e0ed72c
diff -r 8ccb53688328 -r 9840610e5ff2 Tone.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Tone.lib	Mon Mar 13 19:51:01 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/eencae/code/Tone/#836cdf67dbdb
diff -r 8ccb53688328 -r 9840610e5ff2 main.cpp
--- a/main.cpp	Fri Mar 03 15:10:39 2017 +0000
+++ b/main.cpp	Mon Mar 13 19:51:01 2017 +0000
@@ -1,48 +1,78 @@
 /* ELEC1620 Application Board Example
 
-Example of using getc to receive data from the PC to control
-the application board
+Example of the Tone library to interface with the DAC
 
-(c) Dr Craig A. Evans, University of Leeds, Feb 2017
+(c) Dr Craig A. Evans, University of Leeds, March 2017
 
 */
 
 #include "mbed.h"
-#include "ShiftReg.h"  // include ShiftReg library
+#include "Tone.h"
+
+Tone dac(p18);
+
+// Super Mario Theme Tune
+const int note_array[] = {
+    NOTE_E7, NOTE_E7, 0, NOTE_E7,
+    0, NOTE_C7, NOTE_E7, 0,
+    NOTE_G7, 0, 0,  0,
+    NOTE_G6, 0, 0, 0,
+
+    NOTE_C7, 0, 0, NOTE_G6,
+    0, 0, NOTE_E6, 0,
+    0, NOTE_A6, 0, NOTE_B6,
+    0, NOTE_AS6, NOTE_A6, 0,
+
+    NOTE_G6, NOTE_E7, NOTE_G7,
+    NOTE_A7, 0, NOTE_F7, NOTE_G7,
+    0, NOTE_E7, 0,NOTE_C7,
+    NOTE_D7, NOTE_B6, 0, 0,
+
+    NOTE_C7, 0, 0, NOTE_G6,
+    0, 0, NOTE_E6, 0,
+    0, NOTE_A6, 0, NOTE_B6,
+    0, NOTE_AS6, NOTE_A6, 0,
 
-ShiftReg shift;  // create ShiftReg object
-Serial pc(USBTX,USBRX);  
+    NOTE_G6, NOTE_E7, NOTE_G7,
+    NOTE_A7, 0, NOTE_F7, NOTE_G7,
+    0, NOTE_E7, 0,NOTE_C7,
+    NOTE_D7, NOTE_B6, 0, 0
+};
+
+// 8 corresponds to 1/8
+const int duration_array[] = {
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+
+    6,6,6,
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+
+    6,6,6,
+    8,8,8,8,
+    8,8,8,8,
+    8,8,8,8,
+};
 
 int main()
 {
-    // values for 0 - 9 in hex
-    int seven_seg_array [] = {
-        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67
-    };
-
-    // write 0 to 7-seg to turn it off
-    shift.write(0x00);
-
-    while(1) {
+    dac.init();
+    
+    int n = sizeof(note_array)/sizeof(int);
+    // tell it the number of notes, arrays, BPM and whether to repeat
+    dac.play_melody(n,note_array,duration_array,120.0,true);
 
-        // readable tells us if a character is waiting to be read
-        if ( pc.readable() ) {
-            // if one is there, then read in using getc
-            char c = pc.getc();    
-            
-            // check if it is a digit that has been received - note ' ' for char
-            if (c >= '0' && c <= '9') {
-                // the received char is in ASCII so convert to int by substracting
-                // the ASCII value of '0'
-                int value = c - '0';
-                
-                // make that value appear on the 7-seg display
-                shift.write(seven_seg_array [value]);
-                
-            }
-            
-        }
-        
-
-    }
 }