A library for the WTV020SD sound breakout board

Dependents:   Nucleo_SoundBoardTest Robot Progetto_finale Progetto_finale_noLCD ... more

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?

UserRevisionLine numberNew 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 }