Leong Kum Loong (NYP) / tone_h

Dependents:   Tone_Example

Revision:
0:2b4c66b3f6aa
Child:
1:3b00679c208a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tone.cpp	Sun Nov 19 06:08:29 2017 +0000
@@ -0,0 +1,381 @@
+#include "mbed.h"
+#include "tone.h"
+/*
+    tone.h
+    Written by Leong Kum Loong.
+    19 Nov 2017, REV. 0
+    
+    All routines and functions in this library are written by me solely with the purpose
+    of implementing an identical "tone" library that was introduced by Arduino IDE.
+    The mario_example routine "notes" are reference to the work of Gregory Kielian
+    an Electrical Engineer at Google ATAP Skunkworks via Avalon
+    from his Mario.ino sketch for Arduino.
+*/
+
+PwmOut speaker(p26);
+
+void tone(int frequency, int duration_ms){
+    float period = (float)1/(float)frequency;
+    speaker.period(period);
+    speaker.pulsewidth(period/(float)(2));
+    wait_ms(duration_ms);   //If tone sounds weird, try modify delay here.
+    speaker = 0;
+}
+
+static void delay(int millis){
+    wait_ms(millis * 0.7);  //If play speed sounds weird, try modify delay here.
+}
+
+void mario_example() {        
+        tone(660,100);
+        delay(150);
+        tone(660,100);
+        delay(300);
+        tone(660,100);
+        delay(300);
+        tone(510,100);
+        delay(100);
+        tone(660,100);
+        delay(300);
+        tone(770,100);
+        delay(550);
+        tone(380,100);
+        delay(575);
+
+        tone(510,100);
+        delay(450);
+        tone(380,100);
+        delay(400);
+        tone(320,100);
+        delay(500);
+        tone(440,100);
+        delay(300);
+        tone(480,80);
+        delay(330);
+        tone(450,100);
+        delay(150);
+        tone(430,100);
+        delay(300);
+        tone(380,100);
+        delay(200);
+        tone(660,80);
+        delay(200);
+        tone(760,50);
+        delay(150);
+        tone(860,100);
+        delay(300);
+        tone(700,80);
+        delay(150);
+        tone(760,50);
+        delay(350);
+        tone(660,80);
+        delay(300);
+        tone(520,80);
+        delay(150);
+        tone(580,80);
+        delay(150);
+        tone(480,80);
+        delay(500);
+
+        tone(510,100);
+        delay(450);
+        tone(380,100);
+        delay(400);
+        tone(320,100);
+        delay(500);
+        tone(440,100);
+        delay(300);
+        tone(480,80);
+        delay(330);
+        tone(450,100);
+        delay(150);
+        tone(430,100);
+        delay(300);
+        tone(380,100);
+        delay(200);
+        tone(660,80);
+        delay(200);
+        tone(760,50);
+        delay(150);
+        tone(860,100);
+        delay(300);
+        tone(700,80);
+        delay(150);
+        tone(760,50);
+        delay(350);
+        tone(660,80);
+        delay(300);
+        tone(520,80);
+        delay(150);
+        tone(580,80);
+        delay(150);
+        tone(480,80);
+        delay(500);
+
+        tone(500,100);
+        delay(300);
+
+        tone(760,100);
+        delay(100);
+        tone(720,100);
+        delay(150);
+        tone(680,100);
+        delay(150);
+        tone(620,150);
+        delay(300);
+
+        tone(650,150);
+        delay(300);
+        tone(380,100);
+        delay(150);
+        tone(430,100);
+        delay(150);
+
+        tone(500,100);
+        delay(300);
+        tone(430,100);
+        delay(150);
+        tone(500,100);
+        delay(100);
+        tone(570,100);
+        delay(220);
+
+        tone(500,100);
+        delay(300);
+
+        tone(760,100);
+        delay(100);
+        tone(720,100);
+        delay(150);
+        tone(680,100);
+        delay(150);
+        tone(620,150);
+        delay(300);
+
+        tone(650,200);
+        delay(300);
+
+        tone(1020,80);
+        delay(300);
+        tone(1020,80);
+        delay(150);
+        tone(1020,80);
+        delay(300);
+
+        tone(380,100);
+        delay(300);
+        tone(500,100);
+        delay(300);
+
+        tone(760,100);
+        delay(100);
+        tone(720,100);
+        delay(150);
+        tone(680,100);
+        delay(150);
+        tone(620,150);
+        delay(300);
+
+        tone(650,150);
+        delay(300);
+        tone(380,100);
+        delay(150);
+        tone(430,100);
+        delay(150);
+
+        tone(500,100);
+        delay(300);
+        tone(430,100);
+        delay(150);
+        tone(500,100);
+        delay(100);
+        tone(570,100);
+        delay(420);
+
+        tone(585,100);
+        delay(450);
+
+        tone(550,100);
+        delay(420);
+
+        tone(500,100);
+        delay(360);
+
+        tone(380,100);
+        delay(300);
+        tone(500,100);
+        delay(300);
+        tone(500,100);
+        delay(150);
+        tone(500,100);
+        delay(300);
+
+        tone(500,100);
+        delay(300);
+
+        tone(760,100);
+        delay(100);
+        tone(720,100);
+        delay(150);
+        tone(680,100);
+        delay(150);
+        tone(620,150);
+        delay(300);
+
+        tone(650,150);
+        delay(300);
+        tone(380,100);
+        delay(150);
+        tone(430,100);
+        delay(150);
+
+        tone(500,100);
+        delay(300);
+        tone(430,100);
+        delay(150);
+        tone(500,100);
+        delay(100);
+        tone(570,100);
+        delay(220);
+
+        tone(500,100);
+        delay(300);
+
+        tone(760,100);
+        delay(100);
+        tone(720,100);
+        delay(150);
+        tone(680,100);
+        delay(150);
+        tone(620,150);
+        delay(300);
+
+        tone(650,200);
+        delay(300);
+
+        tone(1020,80);
+        delay(300);
+        tone(1020,80);
+        delay(150);
+        tone(1020,80);
+        delay(300);
+
+        tone(380,100);
+        delay(300);
+        tone(500,100);
+        delay(300);
+
+        tone(760,100);
+        delay(100);
+        tone(720,100);
+        delay(150);
+        tone(680,100);
+        delay(150);
+        tone(620,150);
+        delay(300);
+
+        tone(650,150);
+        delay(300);
+        tone(380,100);
+        delay(150);
+        tone(430,100);
+        delay(150);
+
+        tone(500,100);
+        delay(300);
+        tone(430,100);
+        delay(150);
+        tone(500,100);
+        delay(100);
+        tone(570,100);
+        delay(420);
+
+        tone(585,100);
+        delay(450);
+
+        tone(550,100);
+        delay(420);
+
+        tone(500,100);
+        delay(360);
+
+        tone(380,100);
+        delay(300);
+        tone(500,100);
+        delay(300);
+        tone(500,100);
+        delay(150);
+        tone(500,100);
+        delay(300);
+
+        tone(500,60);
+        delay(150);
+        tone(500,80);
+        delay(300);
+        tone(500,60);
+        delay(350);
+        tone(500,80);
+        delay(150);
+        tone(580,80);
+        delay(350);
+        tone(660,80);
+        delay(150);
+        tone(500,80);
+        delay(300);
+        tone(430,80);
+        delay(150);
+        tone(380,80);
+        delay(600);
+
+        tone(500,60);
+        delay(150);
+        tone(500,80);
+        delay(300);
+        tone(500,60);
+        delay(350);
+        tone(500,80);
+        delay(150);
+        tone(580,80);
+        delay(150);
+        tone(660,80);
+        delay(550);
+
+        tone(870,80);
+        delay(325);
+        tone(760,80);
+        delay(600);
+
+        tone(500,60);
+        delay(150);
+        tone(500,80);
+        delay(300);
+        tone(500,60);
+        delay(350);
+        tone(500,80);
+        delay(150);
+        tone(580,80);
+        delay(350);
+        tone(660,80);
+        delay(150);
+        tone(500,80);
+        delay(300);
+        tone(430,80);
+        delay(150);
+        tone(380,80);
+        delay(600);
+
+        tone(660,100);
+        delay(150);
+        tone(660,100);
+        delay(300);
+        tone(660,100);
+        delay(300);
+        tone(510,100);
+        delay(100);
+        tone(660,100);
+        delay(300);
+        tone(770,100);
+        delay(550);
+        tone(380,100);
+        delay(575);
+}