A library for the WTV020SD sound breakout board
Dependents: Nucleo_SoundBoardTest Robot Progetto_finale Progetto_finale_noLCD ... more
soundboard.cpp@2:d6b7b90b4387, 2014-11-24 (annotated)
- Committer:
- ejteb
- Date:
- Mon Nov 24 20:09:32 2014 +0000
- Revision:
- 2:d6b7b90b4387
- Parent:
- 0:03560ce39755
With playPerhapsAsync(int)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ejteb | 0:03560ce39755 | 1 | #include "soundboard.h" |
ejteb | 0:03560ce39755 | 2 | |
ejteb | 0:03560ce39755 | 3 | |
ejteb | 0:03560ce39755 | 4 | |
ejteb | 0:03560ce39755 | 5 | soundboard::soundboard(PinName resetPin, PinName clockPin, PinName dataPin, PinName busyPin) : _resetPin(resetPin), _clockPin(clockPin), _dataPin(dataPin), _busyPin(busyPin) |
ejteb | 0:03560ce39755 | 6 | { |
ejteb | 0:03560ce39755 | 7 | reset(); |
ejteb | 0:03560ce39755 | 8 | } |
ejteb | 0:03560ce39755 | 9 | |
ejteb | 0:03560ce39755 | 10 | void soundboard::reset() |
ejteb | 0:03560ce39755 | 11 | { |
ejteb | 0:03560ce39755 | 12 | _clockPin = 0; |
ejteb | 0:03560ce39755 | 13 | _resetPin = 1; |
ejteb | 0:03560ce39755 | 14 | //Reset pulse. |
ejteb | 0:03560ce39755 | 15 | _resetPin = 0; |
ejteb | 0:03560ce39755 | 16 | wait_ms(5); |
ejteb | 0:03560ce39755 | 17 | _resetPin = 1; |
ejteb | 0:03560ce39755 | 18 | //Reset idle to start bit. |
ejteb | 0:03560ce39755 | 19 | _clockPin = 1; |
ejteb | 0:03560ce39755 | 20 | wait_ms(300); |
ejteb | 0:03560ce39755 | 21 | } |
ejteb | 0:03560ce39755 | 22 | void soundboard::play(int trackNum) |
ejteb | 0:03560ce39755 | 23 | { |
ejteb | 0:03560ce39755 | 24 | sendCommand(trackNum); |
ejteb | 0:03560ce39755 | 25 | while(_busyPin==1); |
ejteb | 0:03560ce39755 | 26 | } |
ejteb | 0:03560ce39755 | 27 | void soundboard::playAsync(int trackNum ) |
ejteb | 0:03560ce39755 | 28 | { |
ejteb | 0:03560ce39755 | 29 | sendCommand(trackNum); |
ejteb | 0:03560ce39755 | 30 | } |
ejteb | 0:03560ce39755 | 31 | void soundboard::stop(void) |
ejteb | 0:03560ce39755 | 32 | { |
ejteb | 0:03560ce39755 | 33 | sendCommand(STOP); |
ejteb | 0:03560ce39755 | 34 | } |
ejteb | 0:03560ce39755 | 35 | void soundboard::pause(void) |
ejteb | 0:03560ce39755 | 36 | { |
ejteb | 0:03560ce39755 | 37 | sendCommand(PLAY_PAUSE); |
ejteb | 0:03560ce39755 | 38 | } |
ejteb | 0:03560ce39755 | 39 | void soundboard::setVolume(int Volume) |
ejteb | 0:03560ce39755 | 40 | { |
ejteb | 0:03560ce39755 | 41 | sendCommand(Volume); |
ejteb | 0:03560ce39755 | 42 | } |
ejteb | 0:03560ce39755 | 43 | void soundboard::sendCommand(unsigned int cmd) |
ejteb | 0:03560ce39755 | 44 | { |
ejteb | 0:03560ce39755 | 45 | _clockPin = 0; |
ejteb | 0:03560ce39755 | 46 | wait_ms(2); |
ejteb | 0:03560ce39755 | 47 | for (unsigned int mask = 0x8000; mask>0; mask>>=1) |
ejteb | 0:03560ce39755 | 48 | { |
ejteb | 0:03560ce39755 | 49 | _clockPin=0; |
ejteb | 0:03560ce39755 | 50 | wait_us(50); |
ejteb | 0:03560ce39755 | 51 | if(cmd&mask) |
ejteb | 0:03560ce39755 | 52 | { |
ejteb | 0:03560ce39755 | 53 | _dataPin = 1; |
ejteb | 0:03560ce39755 | 54 | } |
ejteb | 0:03560ce39755 | 55 | else |
ejteb | 0:03560ce39755 | 56 | { |
ejteb | 0:03560ce39755 | 57 | _dataPin = 0; |
ejteb | 0:03560ce39755 | 58 | } |
ejteb | 0:03560ce39755 | 59 | wait_us(50); |
ejteb | 0:03560ce39755 | 60 | _clockPin=1; |
ejteb | 0:03560ce39755 | 61 | wait_us(100); |
ejteb | 0:03560ce39755 | 62 | if(mask>0x0001) |
ejteb | 0:03560ce39755 | 63 | { |
ejteb | 0:03560ce39755 | 64 | wait_ms(2); |
ejteb | 0:03560ce39755 | 65 | } |
ejteb | 0:03560ce39755 | 66 | } |
ejteb | 0:03560ce39755 | 67 | wait_ms(20); |
ejteb | 0:03560ce39755 | 68 | } |
ejteb | 2:d6b7b90b4387 | 69 | void soundboard::playPerhapsAsync(int trackNum) |
ejteb | 2:d6b7b90b4387 | 70 | { |
ejteb | 2:d6b7b90b4387 | 71 | if(!_busyPin) |
ejteb | 2:d6b7b90b4387 | 72 | { |
ejteb | 2:d6b7b90b4387 | 73 | playAsync(trackNum); |
ejteb | 2:d6b7b90b4387 | 74 | } |
ejteb | 2:d6b7b90b4387 | 75 | } |