Here you have a sample from the PAM8803 library:
Pam8803.h:
/*
Pam8803.h - Library to control a PAM8803 amplifier module.
Created by Diego J. Arevalo, November 18, 2012.
Released into the public domain.
*/
#ifndef Pam8803_h
#define Pam8803_h
class Pam8803
{
public:
Pam8803(int resetPin, int volumeUpPin, int volumeDownPin);
void reset();
int volumeUp();
int volumeDown();
int setVolumeInHalf();
private:
int _gainSetting;
int _resetPin;
int _volumeUpPin;
int _volumeDownPin;
void setGainSetting(int volumePin);
};
#endif
Pam8803.cpp:
/*
Pam8803.cpp - Library to control a PAM8803 amplifier module.
Created by Diego J. Arevalo, November 18, 2012.
Released into the public domain.
*/
#include "Arduino.h"
#include "Pam8803.h"
const int MIN_GAIN_SETTING = 1;
const int POWER_ON_GAIN_SETTING = 13;
const int MAX_GAIN_SETTING = 64;
Pam8803::Pam8803(int resetPin, int volumeUpPin, int volumeDownPin){
_gainSetting=POWER_ON_GAIN_SETTING;
_resetPin=resetPin;
_volumeUpPin=volumeUpPin;
_volumeDownPin=volumeDownPin;
pinMode(_resetPin, OUTPUT);
pinMode(_volumeUpPin, OUTPUT);
pinMode(_volumeDownPin, OUTPUT);
digitalWrite(_resetPin, LOW);
digitalWrite(_volumeUpPin, HIGH);
digitalWrite(_volumeDownPin, HIGH);
}
void Pam8803::reset(){
digitalWrite(_resetPin, LOW);
digitalWrite(_resetPin, HIGH);
}
int Pam8803::volumeUp(){
if (_gainSetting<MAX_GAIN_SETTING){
setGainSetting(_volumeUpPin);
_gainSetting++;
}
return _gainSetting;
}
int Pam8803::volumeDown(){
if (_gainSetting>MIN_GAIN_SETTING){
setGainSetting(_volumeDownPin);
_gainSetting--;
}
return _gainSetting;
}
int Pam8803::setVolumeInHalf(){
if (_gainSetting <= MAX_GAIN_SETTING/2) {
while (_gainSetting <= MAX_GAIN_SETTING/2) {
volumeUp();
}
}
else{
while (_gainSetting >= MAX_GAIN_SETTING/2) {
volumeDown();
}
}
return _gainSetting;
}
void Pam8803::setGainSetting(int volumePin){
digitalWrite(volumePin, LOW);
delay(30*3.5);
digitalWrite(volumePin, HIGH);
};
and It is working. void setVolumeInHalf is quite useful. Actually using my 8,9 and 10 pin for the amp.
Final library posted here:
http://arduino.cc/forum/index.php/topic,133013.new.html#new