Play songs, Imperial march and Pirates

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers play_buzzer.cpp Source File

play_buzzer.cpp

Go to the documentation of this file.
00001 /**
00002 * @file play_buzzer.cpp
00003 * @brief this cpp file is where all the logic is handled.
00004 *
00005 * @author Nikolaj M. & Mathias R.
00006 *
00007 * @date 10/1/2019
00008 */
00009 //PROGRAM: play_buzzer
00010 
00011 ///INCLUDING HEADER FILE SO ALL FUNCTIONS AND VARIABLES 
00012 #include "play_buzzer.h"
00013 
00014 ///DEFINING ALL NOTES USED IN SONGS
00015 #define NOTE_C4  262
00016 #define NOTE_D4  294
00017 #define NOTE_E4  330
00018 #define NOTE_F4  349
00019 #define NOTE_G4  392
00020 #define NOTE_A4  440
00021 #define NOTE_B4  494
00022 #define NOTE_C5  523
00023 #define NOTE_D5  587
00024 #define NOTE_E5  659
00025 #define NOTE_F5  698
00026 #define NOTE_G5  784
00027 #define NOTE_A5  880
00028 #define NOTE_B5  988
00029 #define NOTE_0     1
00030 #define c 261
00031 #define d 294
00032 #define e 329
00033 #define f 349
00034 #define g 391
00035 #define gS 415
00036 #define a 440
00037 #define aS 455
00038 #define b 466
00039 #define cH 523
00040 #define cSH 554
00041 #define dH 587
00042 #define dSH 622
00043 #define eH 659
00044 #define fH 698
00045 #define fSH 740
00046 #define gH 784
00047 #define gSH 830
00048 #define aH 880
00049 
00050 ///NOTES IN SONG
00051 int pirates[] = { 
00052    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_0, 
00053    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_0, 
00054    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, NOTE_0,
00055    NOTE_A4, NOTE_G4, NOTE_A4, NOTE_0,
00056    
00057    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_0, 
00058    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_0, 
00059    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, NOTE_0,
00060    NOTE_A4, NOTE_G4, NOTE_A4, NOTE_0,
00061    
00062    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_0, 
00063    NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, NOTE_0, 
00064    NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, NOTE_0,
00065    NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, NOTE_0,
00066    
00067    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_0, 
00068    NOTE_D5, NOTE_E5, NOTE_A4, NOTE_0, 
00069    NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, NOTE_0,
00070    NOTE_C5, NOTE_A4, NOTE_B4, NOTE_0,
00071 
00072    NOTE_A4, NOTE_A4, 
00073 
00074    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_0, 
00075    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, NOTE_0,
00076    NOTE_A4, NOTE_G4, NOTE_A4, NOTE_0,
00077 
00078    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_0, 
00079    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_0, 
00080    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, NOTE_0,
00081    NOTE_A4, NOTE_G4, NOTE_A4, NOTE_0,
00082    
00083    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_0, 
00084    NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, NOTE_0, 
00085    NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, NOTE_0,
00086    NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, NOTE_0,
00087    
00088    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_0, 
00089    NOTE_D5, NOTE_E5, NOTE_A4, NOTE_0, 
00090    NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, NOTE_0,
00091    NOTE_C5, NOTE_A4, NOTE_B4, NOTE_0,
00092 
00093    NOTE_E5, NOTE_0, NOTE_0, NOTE_F5, NOTE_0, NOTE_0,
00094    NOTE_E5, NOTE_E5, NOTE_0, NOTE_G5, NOTE_0, NOTE_E5, NOTE_D5, NOTE_0, NOTE_0,
00095    NOTE_D5, NOTE_0, NOTE_0, NOTE_C5, NOTE_0, NOTE_0,
00096    NOTE_B4, NOTE_C5, NOTE_0, NOTE_B4, NOTE_0, NOTE_A4,
00097 
00098    NOTE_E5, NOTE_0, NOTE_0, NOTE_F5, NOTE_0, NOTE_0,
00099    NOTE_E5, NOTE_E5, NOTE_0, NOTE_G5, NOTE_0, NOTE_E5, NOTE_D5, NOTE_0, NOTE_0,
00100    NOTE_D5, NOTE_0, NOTE_0, NOTE_C5, NOTE_0, NOTE_0,
00101    NOTE_B4, NOTE_C5, NOTE_0, NOTE_B4, NOTE_0, NOTE_A4};
00102 
00103 ///LENGTH OF NOTES IN PIRATES SONG
00104 int piratestones[] = { 
00105   125, 125, 250, 125, 125, 
00106   125, 125, 250, 125, 125,
00107   125, 125, 250, 125, 125,
00108   125, 125, 375, 125, 
00109   
00110   125, 125, 250, 125, 125, 
00111   125, 125, 250, 125, 125,
00112   125, 125, 250, 125, 125,
00113   125, 125, 375, 125, 
00114   
00115   125, 125, 250, 125, 125, 
00116   125, 125, 250, 125, 125,
00117   125, 125, 250, 125, 125,
00118   125, 125, 125, 250, 125,
00119 
00120   125, 125, 250, 125, 125, 
00121   250, 125, 250, 125, 
00122   125, 125, 250, 125, 125,
00123   125, 125, 375, 375,
00124 
00125   250, 125,
00126 
00127   125, 125, 250, 125, 125,
00128   125, 125, 250, 125, 125,
00129   125, 125, 375, 125, 
00130   
00131   125, 125, 250, 125, 125, 
00132   125, 125, 250, 125, 125,
00133   125, 125, 250, 125, 125,
00134   125, 125, 375, 125, 
00135   
00136   125, 125, 250, 125, 125, 
00137   125, 125, 250, 125, 125,
00138   125, 125, 250, 125, 125,
00139   125, 125, 125, 250, 125,
00140 
00141   125, 125, 250, 125, 125, 
00142   250, 125, 250, 125, 
00143   125, 125, 250, 125, 125,
00144   125, 125, 375, 375,
00145   
00146   250, 125, 375, 250, 125, 375,
00147   125, 125, 125, 125, 125, 125, 125, 125, 375,
00148   250, 125, 375, 250, 125, 375,
00149   125, 125, 125, 125, 125, 500,
00150 
00151   250, 125, 375, 250, 125, 375,
00152   125, 125, 125, 125, 125, 125, 125, 125, 375,
00153   250, 125, 375, 250, 125, 375,
00154   125, 125, 125, 125, 125, 500};
00155  
00156 ///NOTES IN STARWARS SONG 
00157 int starwars[] = {
00158     a, a, a, f, cH,
00159     a, f, cH, a,
00160     eH, eH, eH, fH, cH,
00161     gS, f, cH, a,
00162     aH, a, a, aH, gSH, gH,
00163     fSH, fH, fSH,
00164 
00165     aS, dSH, dH, cSH,
00166     cH, b, cH,
00167 
00168     f, gS, f, a,
00169     cH, a, cH, eH,
00170     aH, a, a, aH, gSH, gH,
00171     fSH, fH, fSH,
00172 
00173     aS, dSH, dH, cSH,
00174     cH, b, cH,
00175 
00176     f, gS, f, cH,
00177     a, f, c, a};
00178 
00179 ///LENGTH OF NOTES IN STARWARS SONG
00180 int starwarstones[] = { 
00181     500, 500, 500, 350, 150,
00182     500, 350, 150, 1000,
00183     500, 500, 500, 350, 150,
00184     500, 350, 150, 1000,
00185     500, 350, 150, 500, 250, 250,
00186     125, 125, 250,
00187 
00188     250, 500, 250, 250,
00189     125, 125, 250,
00190 
00191     125, 500, 375, 125,
00192     500, 375, 125, 1000,
00193     500, 350, 150, 500, 250, 250,
00194     125, 125, 250,
00195 
00196     250, 500, 250, 250,
00197     125, 125, 250,
00198 
00199     250, 500, 375, 125,
00200     500, 375, 125, 1000};
00201 
00202 /**
00203 * This method will be used to set the output pin for the buzzer.
00204 * @author Nikolaj M. & Mathias R.
00205 * @param pin The pin that the buzzer is placed
00206 * @date 10/1/2019
00207 */  
00208 void play_buzzer::setPin(PinName pin){
00209     this->_pin=pin;
00210 }
00211 
00212 /**
00213 * This method will be used to return the output pin for the buzzer.
00214 * @author Nikolaj M. & Mathias R.
00215 * @return PinName The pin that the buzzer is placed
00216 * @date 10/1/2019
00217 */
00218 PinName play_buzzer::getPin(){
00219     return this->_pin;
00220 }
00221 
00222 /**
00223 * This is the constructor which sets the pin for the buzzer to play, and make the buzzer quiet.
00224 * @author Nikolaj M. & Mathias R.
00225 * @param pin The pin that the buzzer is placed
00226 * @date 10/1/2019
00227 */
00228 play_buzzer::play_buzzer(PinName pin) : _pwm(pin){
00229     play_buzzer::setPin(pin);
00230     _pwm.write(0.0);     // after creating it have to be off
00231 }
00232 
00233 
00234 /**
00235 * This method will stop buzzer from beeping.
00236 * @author Nikolaj M. & Mathias R.
00237 * @date 10/1/2019
00238 */
00239 void play_buzzer::nobeep() {
00240     _pwm.write(0.0);
00241 }
00242 
00243 /**
00244 * This method will make the buzzer beep, using notes as freq and tones as play length.
00245 * @author Nikolaj M. & Mathias R.
00246 * @param notes, tones Two arrays with frequency and play length consists of defined ints and ints
00247 * @date 10/1/2019
00248 */
00249 void play_buzzer::beep(int notes, int tones) { 
00250     _pwm.period(1.0/notes);
00251     _pwm.write(0.2);
00252     wait_ms(tones);
00253 }
00254 
00255 
00256 /**
00257 * This method will make the buzzer play the song, using a switch to determine which song to play with int.
00258 * @author Nikolaj M. & Mathias R.
00259 * @param song An int that choose song in the switch
00260 * @date 10/1/2019
00261 */
00262 int play_buzzer::play(int song)
00263 {
00264     int tones_num;
00265     int i;
00266     switch(song){
00267         case 1:
00268             tones_num = 66;
00269             for(i=0; i<tones_num; i++)
00270             {
00271                 beep(starwars[i], starwarstones[i]);
00272                 if( i == 27 || i == 34 || i == 51 || i == 58 )
00273                 {
00274                     wait_ms(250);
00275                 }
00276             }
00277             break;
00278         case 2:
00279             tones_num = 203;
00280             for(i=0; i<tones_num; i++)
00281             {
00282                 int noteDuration = piratestones[i];
00283                 if(piratestones[i] != NOTE_0){
00284                     beep(pirates[i], piratestones[i]); 
00285                 }
00286                     int pauseBetweenNotes = noteDuration * 0.5;
00287                     wait_ms(pauseBetweenNotes);
00288             }
00289             break;
00290     }
00291     return 1;
00292 }