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/
Diff: Buzzer.h
- Revision:
- 1:a74e42cf52b2
diff -r 65fd8b1cbf86 -r a74e42cf52b2 Buzzer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Buzzer.h Sun Apr 05 13:54:48 2015 +0000 @@ -0,0 +1,210 @@ +#ifndef BUZZER_H +#define BUZZER_H +#include "mbed.h" +#include <vector> + +/** This is a simple sound library for mbed.I use the RTTTL format +http://en.wikipedia.org/wiki/Ring_Tone_Transfer_Language + +Example +@code +#include "Buzzer.h" + +char *song = "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6"; + +Buzzer buzzer(p21); + +Music* pMusic=0; //the song +Note la("A#4",50); //the sound + +int main() +{ + pMusic= new Music(song); + pMusic->play(&buzzer); + + buzzer.tone(&la); + delete(pMusic); +} +@endcode +*/ + +// notes definition +#define NOTE_R 0 + +//octave 3 +#define NOTE_C3 7644 +#define NOTE_CS3 7215 +#define NOTE_D3 6810 +#define NOTE_DS3 6428 +#define NOTE_E3 6067 +#define NOTE_F3 5727 +#define NOTE_FS3 5405 +#define NOTE_G3 5102 +#define NOTE_GS3 4815 +#define NOTE_A3 4545 +#define NOTE_AS3 4290 +#define NOTE_B3 4049 + +//octave 4 +#define NOTE_C4 3822 +#define NOTE_CS4 3607 +#define NOTE_D4 3405 +#define NOTE_DS4 3214 +#define NOTE_E4 3033 +#define NOTE_F4 2863 +#define NOTE_FS4 2702 +#define NOTE_G4 2551 +#define NOTE_GS4 2408 +#define NOTE_A4 2272 +#define NOTE_AS4 2145 +#define NOTE_B4 2024 + +//octave 5 +#define NOTE_C5 1911 +#define NOTE_CS5 1804 +#define NOTE_D5 1702 +#define NOTE_DS5 1607 +#define NOTE_E5 1516 +#define NOTE_F5 1432 +#define NOTE_FS5 1351 +#define NOTE_G5 1275 +#define NOTE_GS5 1204 +#define NOTE_A5 1136 +#define NOTE_AS5 1072 +#define NOTE_B5 1012 + +//octave 6 +#define NOTE_C6 956 +#define NOTE_CS6 903 +#define NOTE_D6 852 +#define NOTE_DS6 803 +#define NOTE_E6 759 +#define NOTE_F6 716 +#define NOTE_FS6 676 +#define NOTE_G6 638 +#define NOTE_GS6 602 +#define NOTE_A6 568 +#define NOTE_AS6 536 +#define NOTE_B6 506 + +//octave 7 +#define NOTE_C7 477 +#define NOTE_CS7 451 +#define NOTE_D7 426 +#define NOTE_DS7 402 +#define NOTE_E7 379 +#define NOTE_F7 358 +#define NOTE_FS7 338 +#define NOTE_G7 319 +#define NOTE_GS7 301 +#define NOTE_A7 284 +#define NOTE_AS7 268 +#define NOTE_B7 253 +//------------------------------ +class Note +{ +public: + /** Construct a Note (sound) object. + * + * @param _note the note in range (A,a,B,b,C,c,D,d,E,e,F,f) + * @param _isSharp exemple A4 or A#4 + * @param _duration the time duration + */ + + Note(char _note,bool _isSharp,char _octave,int _duration); + + /** Construct a Note (sound) object. + * + * @param str exemple "C%4" or "C#4" + * @param _duration the time duration + */ + + Note(char* str,int _duration);// exemple "C%4" or "C#4" + + +//setter + +//getter + + /// @returns the note period (PwmOutput) + int getNotePeriod_us(void)const ; + + /// @returns is Sharp + bool getIsSharp(void) const; + + /// @returns the note char + char getNoteChar(void) const; + + /// @returns the octave + char getOctave(void) const; + + /// @returns the duartion in ms + int getDuration(void) const; + + ///use in debugging + void toString(char* buffer); + + +protected: + + int calculatePeriod_us(void); + + void parse(const char* _str); + + char myNoteChar; + bool myIsSharp; + char myOctave; // 3->5 + int myPeriod_us; + int myDuration; + +}; +//---------------------------------- + + +class Buzzer:public PwmOut +{ +public: + /** Construct a Buzzer object. + * + * @param _pwmOut select the PwmOutput + */ + + Buzzer(PinName _pwmOut); + // + ~Buzzer(); + + /// The Buzzer tone a simple sound + void tone(const Note* _note); + + +protected: + +}; + + +//---------------------------------- +class Music +{ +public: + /** Construct a Music object. + * + * @param p the RTTTL song + */ + Music(const char* p); + + ~Music(); + + /// play the music + void play(Buzzer* _buzzer); + + /// @returns the music lenght + int getNumbersNotes(void) const; + +protected: + int nbNotes; + vector<Note*> myTabNotes; + + +}; + +#endif \ No newline at end of file