A library for the WTV020SD sound breakout board

Dependents:   Nucleo_SoundBoardTest Robot Progetto_finale Progetto_finale_noLCD ... more

soundboard.cpp

Committer:
ejteb
Date:
2014-11-24
Revision:
2:d6b7b90b4387
Parent:
0:03560ce39755

File content as of revision 2:d6b7b90b4387:

#include "soundboard.h"



soundboard::soundboard(PinName resetPin, PinName clockPin, PinName dataPin, PinName busyPin) : _resetPin(resetPin), _clockPin(clockPin), _dataPin(dataPin), _busyPin(busyPin)
{
    reset();
}

void soundboard::reset()
{
    _clockPin = 0;
    _resetPin = 1;
    //Reset pulse.
    _resetPin = 0;
    wait_ms(5);
    _resetPin = 1;
    //Reset idle to start bit. 
    _clockPin = 1;
    wait_ms(300);
}
void soundboard::play(int trackNum)
{
    sendCommand(trackNum);
    while(_busyPin==1);
}
void soundboard::playAsync(int trackNum )
{
    sendCommand(trackNum);
}
void soundboard::stop(void)
{
    sendCommand(STOP);
}
void soundboard::pause(void)
{
    sendCommand(PLAY_PAUSE);
}
void soundboard::setVolume(int Volume)
{
    sendCommand(Volume);
}
void soundboard::sendCommand(unsigned int cmd)
{
    _clockPin = 0;
    wait_ms(2);
    for (unsigned int mask = 0x8000; mask>0; mask>>=1)
    {
        _clockPin=0;
        wait_us(50);
        if(cmd&mask)
        {
            _dataPin = 1;
        }
        else
        {
            _dataPin = 0;
        }
        wait_us(50);
        _clockPin=1;
        wait_us(100);
        if(mask>0x0001)
        {
            wait_ms(2);
        }
    }
    wait_ms(20);
}
void soundboard::playPerhapsAsync(int trackNum)
{
    if(!_busyPin)
    {
        playAsync(trackNum);
    }
}