Library for 3.2'' uLcd Picaso Display4D system Picaso Serial Environment Command Set web: http://www.4dsystems.com.au/product/20/67/Processors_Graphics/PICASO/

Committer:
adelino
Date:
Sun Apr 05 13:54:48 2015 +0000
Revision:
1:a74e42cf52b2
PicasoLib version 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adelino 1:a74e42cf52b2 1 #include "mbed.h"
adelino 1:a74e42cf52b2 2 #include "Buzzer.h"
adelino 1:a74e42cf52b2 3
adelino 1:a74e42cf52b2 4 const int tab_A[]= {NOTE_A3,NOTE_A4,NOTE_A5,NOTE_A6,NOTE_A7};
adelino 1:a74e42cf52b2 5
adelino 1:a74e42cf52b2 6 const int tab_AS[]= {NOTE_AS3,NOTE_AS4,NOTE_AS5,NOTE_AS6,NOTE_AS7};
adelino 1:a74e42cf52b2 7
adelino 1:a74e42cf52b2 8 const int tab_B[]= {NOTE_B3,NOTE_B4,NOTE_B5,NOTE_B6,NOTE_B7};
adelino 1:a74e42cf52b2 9
adelino 1:a74e42cf52b2 10 const int tab_BS[]= {NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C6,NOTE_C7};
adelino 1:a74e42cf52b2 11
adelino 1:a74e42cf52b2 12 const int tab_C[]= {NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C6,NOTE_C7};
adelino 1:a74e42cf52b2 13
adelino 1:a74e42cf52b2 14 const int tab_CS[]= {NOTE_CS3,NOTE_CS4,NOTE_CS5,NOTE_CS6,NOTE_CS7};
adelino 1:a74e42cf52b2 15
adelino 1:a74e42cf52b2 16 const int tab_D[]= {NOTE_D3,NOTE_D4,NOTE_D5,NOTE_D6,NOTE_D7};
adelino 1:a74e42cf52b2 17
adelino 1:a74e42cf52b2 18 const int tab_DS[]= {NOTE_DS3,NOTE_DS4,NOTE_DS5,NOTE_DS6,NOTE_DS7};
adelino 1:a74e42cf52b2 19
adelino 1:a74e42cf52b2 20 const int tab_E[]= {NOTE_E3,NOTE_E4,NOTE_E5,NOTE_E6,NOTE_E7};
adelino 1:a74e42cf52b2 21
adelino 1:a74e42cf52b2 22 const int tab_ES[]= {NOTE_F3,NOTE_F4,NOTE_F5,NOTE_F6,NOTE_F7};
adelino 1:a74e42cf52b2 23
adelino 1:a74e42cf52b2 24 const int tab_F[]= {NOTE_F3,NOTE_F4,NOTE_F5,NOTE_F6,NOTE_F7};
adelino 1:a74e42cf52b2 25
adelino 1:a74e42cf52b2 26 const int tab_FS[]= {NOTE_FS3,NOTE_FS4,NOTE_FS5,NOTE_FS6,NOTE_FS7};
adelino 1:a74e42cf52b2 27
adelino 1:a74e42cf52b2 28 const int tab_G[]= {NOTE_G3,NOTE_G4,NOTE_G5,NOTE_G6,NOTE_G7};
adelino 1:a74e42cf52b2 29
adelino 1:a74e42cf52b2 30 const int tab_GS[]= {NOTE_GS3,NOTE_GS4,NOTE_GS5,NOTE_GS6,NOTE_GS7};
adelino 1:a74e42cf52b2 31
adelino 1:a74e42cf52b2 32 #define isDigit(n) (n>='0' && n <= '9')
adelino 1:a74e42cf52b2 33
adelino 1:a74e42cf52b2 34 //------------------------------
adelino 1:a74e42cf52b2 35 Note::Note(char _note,bool _isSharp,char _octave,int _duration):
adelino 1:a74e42cf52b2 36 myNoteChar(_note),myIsSharp(_isSharp),myOctave(_octave),myDuration(_duration)
adelino 1:a74e42cf52b2 37 {
adelino 1:a74e42cf52b2 38 myPeriod_us=calculatePeriod_us();
adelino 1:a74e42cf52b2 39 }
adelino 1:a74e42cf52b2 40 //--------------------------------
adelino 1:a74e42cf52b2 41 Note::Note(char* str,int _duration):myDuration(_duration)
adelino 1:a74e42cf52b2 42 {
adelino 1:a74e42cf52b2 43 parse(str);
adelino 1:a74e42cf52b2 44 myPeriod_us=calculatePeriod_us();
adelino 1:a74e42cf52b2 45 }
adelino 1:a74e42cf52b2 46 //--------------------------------
adelino 1:a74e42cf52b2 47 void Note::parse(const char* _str)
adelino 1:a74e42cf52b2 48 {
adelino 1:a74e42cf52b2 49 int i=0;
adelino 1:a74e42cf52b2 50
adelino 1:a74e42cf52b2 51 for(i=0; i<3; i++) {
adelino 1:a74e42cf52b2 52 switch(_str[i]) {
adelino 1:a74e42cf52b2 53 //
adelino 1:a74e42cf52b2 54 case 'R':
adelino 1:a74e42cf52b2 55 myNoteChar='R';
adelino 1:a74e42cf52b2 56 break;
adelino 1:a74e42cf52b2 57
adelino 1:a74e42cf52b2 58 case 'r':
adelino 1:a74e42cf52b2 59 myNoteChar='R';
adelino 1:a74e42cf52b2 60 break;
adelino 1:a74e42cf52b2 61
adelino 1:a74e42cf52b2 62 //
adelino 1:a74e42cf52b2 63 case 'A':
adelino 1:a74e42cf52b2 64 myNoteChar='A';
adelino 1:a74e42cf52b2 65 break;
adelino 1:a74e42cf52b2 66 case 'a':
adelino 1:a74e42cf52b2 67 myNoteChar='A';
adelino 1:a74e42cf52b2 68 break;
adelino 1:a74e42cf52b2 69 //
adelino 1:a74e42cf52b2 70 //
adelino 1:a74e42cf52b2 71 case 'B':
adelino 1:a74e42cf52b2 72 myNoteChar='B';
adelino 1:a74e42cf52b2 73 break;
adelino 1:a74e42cf52b2 74 //
adelino 1:a74e42cf52b2 75 case 'b':
adelino 1:a74e42cf52b2 76 myNoteChar='B';
adelino 1:a74e42cf52b2 77 break;
adelino 1:a74e42cf52b2 78 //
adelino 1:a74e42cf52b2 79 case 'C':
adelino 1:a74e42cf52b2 80 myNoteChar='C';
adelino 1:a74e42cf52b2 81 break;
adelino 1:a74e42cf52b2 82 case 'c':
adelino 1:a74e42cf52b2 83 myNoteChar='C';
adelino 1:a74e42cf52b2 84 break;
adelino 1:a74e42cf52b2 85 //
adelino 1:a74e42cf52b2 86 case 'D':
adelino 1:a74e42cf52b2 87 myNoteChar='D';
adelino 1:a74e42cf52b2 88 break;
adelino 1:a74e42cf52b2 89 case 'd':
adelino 1:a74e42cf52b2 90 myNoteChar='D';
adelino 1:a74e42cf52b2 91 break;
adelino 1:a74e42cf52b2 92 //
adelino 1:a74e42cf52b2 93 //
adelino 1:a74e42cf52b2 94 case 'E':
adelino 1:a74e42cf52b2 95 myNoteChar='E';
adelino 1:a74e42cf52b2 96 break;
adelino 1:a74e42cf52b2 97 //
adelino 1:a74e42cf52b2 98 case 'e':
adelino 1:a74e42cf52b2 99 myNoteChar='E';
adelino 1:a74e42cf52b2 100 break;
adelino 1:a74e42cf52b2 101 //
adelino 1:a74e42cf52b2 102 case 'F':
adelino 1:a74e42cf52b2 103 myNoteChar='F';
adelino 1:a74e42cf52b2 104 break;
adelino 1:a74e42cf52b2 105 //
adelino 1:a74e42cf52b2 106 case 'f':
adelino 1:a74e42cf52b2 107 myNoteChar='F';
adelino 1:a74e42cf52b2 108 break;
adelino 1:a74e42cf52b2 109 //
adelino 1:a74e42cf52b2 110 case 'G':
adelino 1:a74e42cf52b2 111 myNoteChar='G';
adelino 1:a74e42cf52b2 112 break;
adelino 1:a74e42cf52b2 113 //
adelino 1:a74e42cf52b2 114 case 'g':
adelino 1:a74e42cf52b2 115 myNoteChar='G';
adelino 1:a74e42cf52b2 116 break;
adelino 1:a74e42cf52b2 117 //
adelino 1:a74e42cf52b2 118 case '%':
adelino 1:a74e42cf52b2 119 myIsSharp=false;
adelino 1:a74e42cf52b2 120 break;
adelino 1:a74e42cf52b2 121 //
adelino 1:a74e42cf52b2 122 //
adelino 1:a74e42cf52b2 123 case '#':
adelino 1:a74e42cf52b2 124 myIsSharp=true;
adelino 1:a74e42cf52b2 125 break;
adelino 1:a74e42cf52b2 126 //
adelino 1:a74e42cf52b2 127 //
adelino 1:a74e42cf52b2 128 case '3':
adelino 1:a74e42cf52b2 129 myOctave=3;
adelino 1:a74e42cf52b2 130 break;
adelino 1:a74e42cf52b2 131 //
adelino 1:a74e42cf52b2 132 //
adelino 1:a74e42cf52b2 133 case '4':
adelino 1:a74e42cf52b2 134 myOctave=4;
adelino 1:a74e42cf52b2 135 break;
adelino 1:a74e42cf52b2 136 //
adelino 1:a74e42cf52b2 137 //
adelino 1:a74e42cf52b2 138 case '5':
adelino 1:a74e42cf52b2 139 myOctave=5;
adelino 1:a74e42cf52b2 140 break;
adelino 1:a74e42cf52b2 141 //
adelino 1:a74e42cf52b2 142 //
adelino 1:a74e42cf52b2 143 case '6':
adelino 1:a74e42cf52b2 144 myOctave=6;
adelino 1:a74e42cf52b2 145 break;
adelino 1:a74e42cf52b2 146 //
adelino 1:a74e42cf52b2 147 //
adelino 1:a74e42cf52b2 148 case '7':
adelino 1:a74e42cf52b2 149 myOctave=7;
adelino 1:a74e42cf52b2 150 break;
adelino 1:a74e42cf52b2 151
adelino 1:a74e42cf52b2 152 default:
adelino 1:a74e42cf52b2 153 myNoteChar='R';
adelino 1:a74e42cf52b2 154 break;
adelino 1:a74e42cf52b2 155 }
adelino 1:a74e42cf52b2 156 //
adelino 1:a74e42cf52b2 157 }
adelino 1:a74e42cf52b2 158 //
adelino 1:a74e42cf52b2 159
adelino 1:a74e42cf52b2 160 }
adelino 1:a74e42cf52b2 161 //--------------------------------
adelino 1:a74e42cf52b2 162 int Note::calculatePeriod_us(void)
adelino 1:a74e42cf52b2 163 {
adelino 1:a74e42cf52b2 164 switch(myNoteChar) {
adelino 1:a74e42cf52b2 165 //
adelino 1:a74e42cf52b2 166 case 'p':
adelino 1:a74e42cf52b2 167 return NOTE_R;
adelino 1:a74e42cf52b2 168 //
adelino 1:a74e42cf52b2 169 case 'R':
adelino 1:a74e42cf52b2 170 return NOTE_R;
adelino 1:a74e42cf52b2 171 //
adelino 1:a74e42cf52b2 172 case 'r':
adelino 1:a74e42cf52b2 173 return NOTE_R;
adelino 1:a74e42cf52b2 174 //
adelino 1:a74e42cf52b2 175 case 'A':
adelino 1:a74e42cf52b2 176 //
adelino 1:a74e42cf52b2 177 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 178 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 179 return tab_A[myOctave-3];
adelino 1:a74e42cf52b2 180 } else {
adelino 1:a74e42cf52b2 181 return tab_AS[myOctave-3];
adelino 1:a74e42cf52b2 182 }
adelino 1:a74e42cf52b2 183 }
adelino 1:a74e42cf52b2 184 break;
adelino 1:a74e42cf52b2 185 //
adelino 1:a74e42cf52b2 186 case 'a':
adelino 1:a74e42cf52b2 187 //
adelino 1:a74e42cf52b2 188 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 189 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 190 return tab_A[myOctave-3];
adelino 1:a74e42cf52b2 191 } else {
adelino 1:a74e42cf52b2 192 return tab_AS[myOctave-3];
adelino 1:a74e42cf52b2 193 }
adelino 1:a74e42cf52b2 194 }
adelino 1:a74e42cf52b2 195 break;
adelino 1:a74e42cf52b2 196 //
adelino 1:a74e42cf52b2 197 case 'B':
adelino 1:a74e42cf52b2 198 //
adelino 1:a74e42cf52b2 199 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 200 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 201 return tab_B[myOctave-3];
adelino 1:a74e42cf52b2 202 } else {
adelino 1:a74e42cf52b2 203 return tab_BS[myOctave-3];
adelino 1:a74e42cf52b2 204 }
adelino 1:a74e42cf52b2 205 }
adelino 1:a74e42cf52b2 206 break;
adelino 1:a74e42cf52b2 207 //
adelino 1:a74e42cf52b2 208 case 'b':
adelino 1:a74e42cf52b2 209 //
adelino 1:a74e42cf52b2 210 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 211 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 212 return tab_B[myOctave-3];
adelino 1:a74e42cf52b2 213 } else {
adelino 1:a74e42cf52b2 214 return tab_BS[myOctave-3];
adelino 1:a74e42cf52b2 215 }
adelino 1:a74e42cf52b2 216 }
adelino 1:a74e42cf52b2 217 break;
adelino 1:a74e42cf52b2 218 //
adelino 1:a74e42cf52b2 219 case 'C':
adelino 1:a74e42cf52b2 220 //
adelino 1:a74e42cf52b2 221 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 222 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 223 return tab_C[myOctave-3];
adelino 1:a74e42cf52b2 224 } else {
adelino 1:a74e42cf52b2 225 return tab_CS[myOctave-3];
adelino 1:a74e42cf52b2 226 }
adelino 1:a74e42cf52b2 227 }
adelino 1:a74e42cf52b2 228 break;
adelino 1:a74e42cf52b2 229 //
adelino 1:a74e42cf52b2 230 case 'c':
adelino 1:a74e42cf52b2 231 //
adelino 1:a74e42cf52b2 232 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 233 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 234 return tab_C[myOctave-3];
adelino 1:a74e42cf52b2 235 } else {
adelino 1:a74e42cf52b2 236 return tab_CS[myOctave-3];
adelino 1:a74e42cf52b2 237 }
adelino 1:a74e42cf52b2 238 }
adelino 1:a74e42cf52b2 239 break;
adelino 1:a74e42cf52b2 240 //
adelino 1:a74e42cf52b2 241 //
adelino 1:a74e42cf52b2 242 case 'D':
adelino 1:a74e42cf52b2 243 //
adelino 1:a74e42cf52b2 244 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 245 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 246 return tab_D[myOctave-3];
adelino 1:a74e42cf52b2 247 } else {
adelino 1:a74e42cf52b2 248 return tab_DS[myOctave-3];
adelino 1:a74e42cf52b2 249 }
adelino 1:a74e42cf52b2 250 }
adelino 1:a74e42cf52b2 251 break;
adelino 1:a74e42cf52b2 252 //
adelino 1:a74e42cf52b2 253 case 'd':
adelino 1:a74e42cf52b2 254 //
adelino 1:a74e42cf52b2 255 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 256 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 257 return tab_D[myOctave-3];
adelino 1:a74e42cf52b2 258 } else {
adelino 1:a74e42cf52b2 259 return tab_DS[myOctave-3];
adelino 1:a74e42cf52b2 260 }
adelino 1:a74e42cf52b2 261 }
adelino 1:a74e42cf52b2 262 break;
adelino 1:a74e42cf52b2 263 //
adelino 1:a74e42cf52b2 264 case 'E':
adelino 1:a74e42cf52b2 265 //
adelino 1:a74e42cf52b2 266 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 267 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 268 return tab_E[myOctave-3];
adelino 1:a74e42cf52b2 269 } else {
adelino 1:a74e42cf52b2 270 return tab_ES[myOctave-3];
adelino 1:a74e42cf52b2 271 }
adelino 1:a74e42cf52b2 272 }
adelino 1:a74e42cf52b2 273 break;
adelino 1:a74e42cf52b2 274 //
adelino 1:a74e42cf52b2 275 case 'e':
adelino 1:a74e42cf52b2 276 //
adelino 1:a74e42cf52b2 277 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 278 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 279 return tab_E[myOctave-3];
adelino 1:a74e42cf52b2 280 } else {
adelino 1:a74e42cf52b2 281 return tab_ES[myOctave-3];
adelino 1:a74e42cf52b2 282 }
adelino 1:a74e42cf52b2 283 }
adelino 1:a74e42cf52b2 284 break;
adelino 1:a74e42cf52b2 285 //
adelino 1:a74e42cf52b2 286 case 'F':
adelino 1:a74e42cf52b2 287 //
adelino 1:a74e42cf52b2 288 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 289 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 290 return tab_F[myOctave-3];
adelino 1:a74e42cf52b2 291 } else {
adelino 1:a74e42cf52b2 292 return tab_FS[myOctave-3];
adelino 1:a74e42cf52b2 293 }
adelino 1:a74e42cf52b2 294 }
adelino 1:a74e42cf52b2 295 break;
adelino 1:a74e42cf52b2 296 //
adelino 1:a74e42cf52b2 297 case 'f':
adelino 1:a74e42cf52b2 298 //
adelino 1:a74e42cf52b2 299 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 300 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 301 return tab_F[myOctave-3];
adelino 1:a74e42cf52b2 302 } else {
adelino 1:a74e42cf52b2 303 return tab_FS[myOctave-3];
adelino 1:a74e42cf52b2 304 }
adelino 1:a74e42cf52b2 305 }
adelino 1:a74e42cf52b2 306 break;
adelino 1:a74e42cf52b2 307 //
adelino 1:a74e42cf52b2 308 case 'G':
adelino 1:a74e42cf52b2 309 //
adelino 1:a74e42cf52b2 310 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 311 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 312 return tab_G[myOctave-3];
adelino 1:a74e42cf52b2 313 } else {
adelino 1:a74e42cf52b2 314 return tab_GS[myOctave-3];
adelino 1:a74e42cf52b2 315 }
adelino 1:a74e42cf52b2 316 }
adelino 1:a74e42cf52b2 317 break;
adelino 1:a74e42cf52b2 318 //
adelino 1:a74e42cf52b2 319 case 'g':
adelino 1:a74e42cf52b2 320 //
adelino 1:a74e42cf52b2 321 if(myOctave >=3 && myOctave <=7) {
adelino 1:a74e42cf52b2 322 if(myIsSharp==false) {
adelino 1:a74e42cf52b2 323 return tab_G[myOctave-3];
adelino 1:a74e42cf52b2 324 } else {
adelino 1:a74e42cf52b2 325 return tab_GS[myOctave-3];
adelino 1:a74e42cf52b2 326 }
adelino 1:a74e42cf52b2 327 }
adelino 1:a74e42cf52b2 328 break;
adelino 1:a74e42cf52b2 329 //
adelino 1:a74e42cf52b2 330 default:
adelino 1:a74e42cf52b2 331 break;
adelino 1:a74e42cf52b2 332 }
adelino 1:a74e42cf52b2 333
adelino 1:a74e42cf52b2 334 return 0;
adelino 1:a74e42cf52b2 335 }
adelino 1:a74e42cf52b2 336 //--------------------------------
adelino 1:a74e42cf52b2 337 int Note::getNotePeriod_us(void) const
adelino 1:a74e42cf52b2 338 {
adelino 1:a74e42cf52b2 339 return this->myPeriod_us;
adelino 1:a74e42cf52b2 340 }
adelino 1:a74e42cf52b2 341 //---------------------------------
adelino 1:a74e42cf52b2 342 bool Note::getIsSharp(void) const
adelino 1:a74e42cf52b2 343 {
adelino 1:a74e42cf52b2 344 return this->myIsSharp;
adelino 1:a74e42cf52b2 345 }
adelino 1:a74e42cf52b2 346 //----------------------------------
adelino 1:a74e42cf52b2 347 char Note::getNoteChar(void) const
adelino 1:a74e42cf52b2 348 {
adelino 1:a74e42cf52b2 349 return this-> myNoteChar;
adelino 1:a74e42cf52b2 350 }
adelino 1:a74e42cf52b2 351 //----------------------------------
adelino 1:a74e42cf52b2 352 char Note::getOctave(void) const
adelino 1:a74e42cf52b2 353 {
adelino 1:a74e42cf52b2 354 return this->myOctave;
adelino 1:a74e42cf52b2 355 }
adelino 1:a74e42cf52b2 356 //---------------------------------
adelino 1:a74e42cf52b2 357 int Note::getDuration(void) const
adelino 1:a74e42cf52b2 358 {
adelino 1:a74e42cf52b2 359 return this->myDuration;
adelino 1:a74e42cf52b2 360 }
adelino 1:a74e42cf52b2 361 //----------------------------------
adelino 1:a74e42cf52b2 362 void Note::toString(char* buffer)
adelino 1:a74e42cf52b2 363 {
adelino 1:a74e42cf52b2 364
adelino 1:a74e42cf52b2 365 buffer[0]= myNoteChar;
adelino 1:a74e42cf52b2 366 if(myIsSharp)
adelino 1:a74e42cf52b2 367 buffer[1]='#';
adelino 1:a74e42cf52b2 368 else
adelino 1:a74e42cf52b2 369 buffer[1]='%';
adelino 1:a74e42cf52b2 370
adelino 1:a74e42cf52b2 371 buffer[2]=myOctave+'0';
adelino 1:a74e42cf52b2 372
adelino 1:a74e42cf52b2 373 buffer[3]='\0';
adelino 1:a74e42cf52b2 374
adelino 1:a74e42cf52b2 375 }
adelino 1:a74e42cf52b2 376 //-----------------------------------
adelino 1:a74e42cf52b2 377
adelino 1:a74e42cf52b2 378
adelino 1:a74e42cf52b2 379 Buzzer::Buzzer(PinName _pwmOut):PwmOut(_pwmOut)
adelino 1:a74e42cf52b2 380 {
adelino 1:a74e42cf52b2 381 this->period_us(1);
adelino 1:a74e42cf52b2 382 this->pulsewidth_us(0);
adelino 1:a74e42cf52b2 383 }
adelino 1:a74e42cf52b2 384 //-----------------------------------
adelino 1:a74e42cf52b2 385 void Buzzer::tone(const Note* _note)
adelino 1:a74e42cf52b2 386 {
adelino 1:a74e42cf52b2 387 int mperiod = _note->getNotePeriod_us();
adelino 1:a74e42cf52b2 388
adelino 1:a74e42cf52b2 389 int dure=_note->getDuration();
adelino 1:a74e42cf52b2 390
adelino 1:a74e42cf52b2 391 this->period_us(mperiod);
adelino 1:a74e42cf52b2 392 this->pulsewidth_us(mperiod/2);
adelino 1:a74e42cf52b2 393
adelino 1:a74e42cf52b2 394 wait_ms(dure);
adelino 1:a74e42cf52b2 395 this->pulsewidth_us(0);
adelino 1:a74e42cf52b2 396
adelino 1:a74e42cf52b2 397
adelino 1:a74e42cf52b2 398 wait_ms(dure);
adelino 1:a74e42cf52b2 399
adelino 1:a74e42cf52b2 400 }
adelino 1:a74e42cf52b2 401 //-------------------------------------
adelino 1:a74e42cf52b2 402 Buzzer::~Buzzer()
adelino 1:a74e42cf52b2 403 {
adelino 1:a74e42cf52b2 404 }
adelino 1:a74e42cf52b2 405 //--------------------------------------
adelino 1:a74e42cf52b2 406 Music::Music(const char* p)
adelino 1:a74e42cf52b2 407 {
adelino 1:a74e42cf52b2 408 char defautDuree=4;
adelino 1:a74e42cf52b2 409 char defautOctave=6;
adelino 1:a74e42cf52b2 410 int bmp=63;
adelino 1:a74e42cf52b2 411
adelino 1:a74e42cf52b2 412 int ronde=0;
adelino 1:a74e42cf52b2 413 int dura=0;
adelino 1:a74e42cf52b2 414 int num=0;
adelino 1:a74e42cf52b2 415
adelino 1:a74e42cf52b2 416 char _note;
adelino 1:a74e42cf52b2 417 bool _issharp=false;
adelino 1:a74e42cf52b2 418 char _octave=0;
adelino 1:a74e42cf52b2 419
adelino 1:a74e42cf52b2 420 char newOctave=0;
adelino 1:a74e42cf52b2 421 //
adelino 1:a74e42cf52b2 422 while(*p != ':')
adelino 1:a74e42cf52b2 423 p++; //le titre
adelino 1:a74e42cf52b2 424
adelino 1:a74e42cf52b2 425 p++; //skip :
adelino 1:a74e42cf52b2 426
adelino 1:a74e42cf52b2 427 //defaut duration
adelino 1:a74e42cf52b2 428 if(*p=='d') {
adelino 1:a74e42cf52b2 429 p++;
adelino 1:a74e42cf52b2 430 p++; //skip d=
adelino 1:a74e42cf52b2 431
adelino 1:a74e42cf52b2 432
adelino 1:a74e42cf52b2 433 while(isDigit(*p)) {
adelino 1:a74e42cf52b2 434 num=(num*10)+(*p++-'0');
adelino 1:a74e42cf52b2 435 }
adelino 1:a74e42cf52b2 436 //
adelino 1:a74e42cf52b2 437 if(num >0)
adelino 1:a74e42cf52b2 438 defautDuree=num;
adelino 1:a74e42cf52b2 439 p++; //skip ,
adelino 1:a74e42cf52b2 440 }
adelino 1:a74e42cf52b2 441 //
adelino 1:a74e42cf52b2 442 if(*p=='o') {
adelino 1:a74e42cf52b2 443 p++;
adelino 1:a74e42cf52b2 444 p++; //skip o=
adelino 1:a74e42cf52b2 445
adelino 1:a74e42cf52b2 446 num=*p++ -'0';
adelino 1:a74e42cf52b2 447
adelino 1:a74e42cf52b2 448 if(num >=3 && num <=7)
adelino 1:a74e42cf52b2 449 defautOctave=num;
adelino 1:a74e42cf52b2 450
adelino 1:a74e42cf52b2 451 p++; //skip ,
adelino 1:a74e42cf52b2 452
adelino 1:a74e42cf52b2 453 }
adelino 1:a74e42cf52b2 454 //
adelino 1:a74e42cf52b2 455 if(*p =='b') {
adelino 1:a74e42cf52b2 456 p++;
adelino 1:a74e42cf52b2 457 p++; //skip b=
adelino 1:a74e42cf52b2 458 num=0;
adelino 1:a74e42cf52b2 459
adelino 1:a74e42cf52b2 460 while(isDigit(*p)) {
adelino 1:a74e42cf52b2 461 num=num*10+(*p++ -'0');
adelino 1:a74e42cf52b2 462 }
adelino 1:a74e42cf52b2 463 bmp=num;
adelino 1:a74e42cf52b2 464 p++; //skip :
adelino 1:a74e42cf52b2 465 }
adelino 1:a74e42cf52b2 466 //
adelino 1:a74e42cf52b2 467 ronde=(60*500/bmp)*4; // in ms
adelino 1:a74e42cf52b2 468
adelino 1:a74e42cf52b2 469 //les notes
adelino 1:a74e42cf52b2 470 while(*p) {
adelino 1:a74e42cf52b2 471 //ge t duration if available
adelino 1:a74e42cf52b2 472 num=0;
adelino 1:a74e42cf52b2 473 while(isDigit(*p)) {
adelino 1:a74e42cf52b2 474 num=(num*10)+(*p++ -'0');
adelino 1:a74e42cf52b2 475 }
adelino 1:a74e42cf52b2 476 if(num)
adelino 1:a74e42cf52b2 477 dura=ronde/num;
adelino 1:a74e42cf52b2 478 else
adelino 1:a74e42cf52b2 479 dura=ronde/defautDuree;
adelino 1:a74e42cf52b2 480 //la note
adelino 1:a74e42cf52b2 481 _note=*p;
adelino 1:a74e42cf52b2 482
adelino 1:a74e42cf52b2 483 p++;
adelino 1:a74e42cf52b2 484 //issharp
adelino 1:a74e42cf52b2 485 if(*p=='#') {
adelino 1:a74e42cf52b2 486 _issharp=true;
adelino 1:a74e42cf52b2 487 p++;
adelino 1:a74e42cf52b2 488 } else {
adelino 1:a74e42cf52b2 489 _issharp=false;
adelino 1:a74e42cf52b2 490
adelino 1:a74e42cf52b2 491 }
adelino 1:a74e42cf52b2 492 //un point ?
adelino 1:a74e42cf52b2 493 if(*p=='.') {
adelino 1:a74e42cf52b2 494 dura+=dura/2;
adelino 1:a74e42cf52b2 495 p++;
adelino 1:a74e42cf52b2 496 }
adelino 1:a74e42cf52b2 497 //
adelino 1:a74e42cf52b2 498 //nouvelle octave
adelino 1:a74e42cf52b2 499 if(isDigit(*p)) {
adelino 1:a74e42cf52b2 500 newOctave =*p - '0';
adelino 1:a74e42cf52b2 501 p++;
adelino 1:a74e42cf52b2 502 }
adelino 1:a74e42cf52b2 503
adelino 1:a74e42cf52b2 504 if(newOctave >0)
adelino 1:a74e42cf52b2 505 _octave=newOctave;
adelino 1:a74e42cf52b2 506
adelino 1:a74e42cf52b2 507 else {
adelino 1:a74e42cf52b2 508 _octave=defautOctave;
adelino 1:a74e42cf52b2 509 }
adelino 1:a74e42cf52b2 510
adelino 1:a74e42cf52b2 511 //
adelino 1:a74e42cf52b2 512 if(*p==',')
adelino 1:a74e42cf52b2 513 {
adelino 1:a74e42cf52b2 514 p++;
adelino 1:a74e42cf52b2 515 myTabNotes.push_back(new Note(_note,_issharp,_octave,dura));
adelino 1:a74e42cf52b2 516 }
adelino 1:a74e42cf52b2 517
adelino 1:a74e42cf52b2 518
adelino 1:a74e42cf52b2 519
adelino 1:a74e42cf52b2 520
adelino 1:a74e42cf52b2 521 }
adelino 1:a74e42cf52b2 522 }
adelino 1:a74e42cf52b2 523 //--------------------------------------
adelino 1:a74e42cf52b2 524 int Music::getNumbersNotes(void) const
adelino 1:a74e42cf52b2 525 {
adelino 1:a74e42cf52b2 526 return this->myTabNotes.size();
adelino 1:a74e42cf52b2 527 }
adelino 1:a74e42cf52b2 528
adelino 1:a74e42cf52b2 529 //--------------------------------------
adelino 1:a74e42cf52b2 530 void Music::play(Buzzer* _buzzer)
adelino 1:a74e42cf52b2 531 {
adelino 1:a74e42cf52b2 532 /*
adelino 1:a74e42cf52b2 533 char buffer[10];
adelino 1:a74e42cf52b2 534 int duration=0;
adelino 1:a74e42cf52b2 535
adelino 1:a74e42cf52b2 536 for(int i=0; i< myTabNotes.size(); i++) {
adelino 1:a74e42cf52b2 537 myTabNotes[i]->toString(buffer);
adelino 1:a74e42cf52b2 538 duration=myTabNotes[i]->getDuration();
adelino 1:a74e42cf52b2 539
adelino 1:a74e42cf52b2 540 pc.printf(" %s:%d \n\r",buffer,duration);
adelino 1:a74e42cf52b2 541 }
adelino 1:a74e42cf52b2 542 */
adelino 1:a74e42cf52b2 543
adelino 1:a74e42cf52b2 544 for(int i=0; i< myTabNotes.size(); i++) {
adelino 1:a74e42cf52b2 545 _buzzer->tone(myTabNotes[i]);
adelino 1:a74e42cf52b2 546 }
adelino 1:a74e42cf52b2 547
adelino 1:a74e42cf52b2 548
adelino 1:a74e42cf52b2 549 }
adelino 1:a74e42cf52b2 550 //--------------------------------------
adelino 1:a74e42cf52b2 551 Music::~Music()
adelino 1:a74e42cf52b2 552 {
adelino 1:a74e42cf52b2 553 for(int i=0; i< myTabNotes.size(); i++) {
adelino 1:a74e42cf52b2 554 delete(myTabNotes[i]);
adelino 1:a74e42cf52b2 555 myTabNotes[i]=0;
adelino 1:a74e42cf52b2 556 }
adelino 1:a74e42cf52b2 557 }
adelino 1:a74e42cf52b2 558 //--------------------------------------
adelino 1:a74e42cf52b2 559
adelino 1:a74e42cf52b2 560
adelino 1:a74e42cf52b2 561