Using DAC to play a melody

Dependencies:   Tone mbed

Fork of 1620_App_Board_UART_getc by Craig Evans

Revision:
1:9840610e5ff2
Parent:
0:8ccb53688328
--- 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]);
-                
-            }
-            
-        }
-        
-
-    }
 }