Leong Kum Loong (NYP) / tone_h

Dependents:   Tone_Example

tone.cpp

Committer:
reesey
Date:
2017-11-20
Revision:
3:9ddabd24f48c
Parent:
2:7f2974b69b48

File content as of revision 3:9ddabd24f48c:

#include "mbed.h"
#include "tone.h"
/*
    tone.h
    Written by Leong Kum Loong.
    20 Nov 2017, REV. 2
    
    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.
    
    Example reference from Github
    ===============================
    The mario_example routine "notes" are reference to the work of Gregory Kielian.
    The starwars_example routine "notes" are reference to the work of nicksort.
*/

PwmOut speaker(p26);

void tone(int frequency, int duration_ms){
    float period = (float)1/(float)frequency;
    speaker.period(period);
    speaker.pulsewidth(period/(float)(2));
    if(duration_ms){
        wait_ms(duration_ms);
        speaker = 0;
    }
}

void noTone(){
    speaker = 0;
}

//Mario theme section.
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);
}
 
  
//Star wars theme section.
int c = 261, d = 294, e = 329, f = 349, g = 391, gS = 415, a = 440, aS = 455, b = 466, cH = 523;
int cSH = 554, dH = 587, dSH = 622, eH = 659, fH = 698, fSH = 740, gH = 784, gSH = 830, aH = 880;

void firstSection(){
    tone(a, 500);
    tone(a, 500);    
    tone(a, 500);
    tone(f, 350);
    tone(cH, 150);  
    tone(a, 500);
    tone(f, 350);
    tone(cH, 150);
    tone(a, 650);
    wait_ms(500);
 
    tone(eH, 500);
    tone(eH, 500);
    tone(eH, 500);  
    tone(fH, 350);
    tone(cH, 150);
    tone(gS, 500);
    tone(f, 350);
    tone(cH, 150);
    tone(a, 650);
    wait_ms(500);
}
 
void secondSection(){
    tone(aH, 500);
    tone(a, 300);
    tone(a, 150);
    tone(aH, 500);
    tone(gSH, 325);
    tone(gH, 175);
    tone(fSH, 125);
    tone(fH, 125);
    tone(fSH, 250);
    wait_ms(325);
 
    tone(aS, 250);
    tone(dSH, 500);
    tone(dH, 325);  
    tone(cSH, 175);  
    tone(cH, 125);  
    tone(b, 125);  
    tone(cH, 250);  
    wait_ms(350);
}

void starwars_example(){
    firstSection();
    
    secondSection();
 
    //Variant 1
    tone(f, 250);  
    tone(gS, 500);  
    tone(f, 350);  
    tone(a, 125);
    tone(cH, 500);
    tone(a, 375);  
    tone(cH, 125);
    tone(eH, 650);
    wait_ms(500);
 
    secondSection();
 
    //Variant 2
    tone(f, 250);  
    tone(gS, 500);  
    tone(f, 375);  
    tone(cH, 125);
    tone(a, 500);  
    tone(f, 375);  
    tone(cH, 125);
    tone(a, 650);
    wait_ms(650);
}