Play songs, Imperial march and Pirates
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Sun Jul 31 2022 20:18:16 by
1.7.2