Arduino-DAC8812_encoder-sketch
Arduino-DAC8812_encoder-sketch
h"
// Pin 10 = CS
// Pin 11 = Serial data out
// Pin 13 = CLK
// Pin 8 = DACResetPin
void setup() {
// set the slaveSelectPin as an output:
pinMode (slaveSelectPin, OUTPUT);
// Set DAC reset pin high to disable that feature
pinMode (DACResetPin, OUTPUT);
digitalWrite(DACResetPin, HIGH);
// Set up pins for encoder:
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
pinMode (encoderPowerPin, OUTPUT);
pinMode (encoderGroundPin, OUTPUT);
digitalWrite(encoderPowerPin,HIGH);
digitalWrite(encoderGroundPin,LOW);
// Serial
Serial.begin (9600);
// Sleep
delay(1000);
Serial.println ("Starting SPI..");
SPI.begin();
Serial.println ("Setting volume to 0..");
DACWrite(addr_decode, 0);
}
///////////////////////////////////////////////////////////////////////////////////
///////////
int WriteAndPrintLevel(){
Serial.print ("dB: ");
Serial.print (dbLevel);
Serial.print (" / DAC Level: ");
Serial.println (dac_level);
DACWrite(addr_decode, dac_level);
}
int VolumeUp() {
if (dbLevel < (0-dbIncrement)) {
dbLevel = dbLevel + dbIncrement;
dac_level = 65536*(pow(10, (dbLevel/20)));
WriteAndPrintLevel();
}
}
int VolumeDown() {
if (dbLevel > -102.5) {
dbLevel = dbLevel - dbIncrement;
dac_level = 65536*(pow(10, (dbLevel/20)));
WriteAndPrintLevel();
}
}
///////////////////////////////
// Main loop
////////////////////////////////
void loop() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
VolumeUp();
} else {
VolumeDown();
}
}
encoder0PinALast = n;
}
///////////////////////////////
// Function to set DAC level
////////////////////////////////
void DACWrite(int addr_decode, unsigned int level) {
digitalWrite(slaveSelectPin,LOW);
SPI.transfer(addr_decode);
byte highByte = level >> 8;
unsigned int lowBytetemp = level << 8;
byte lowByte = lowBytetemp >> 8;
SPI.transfer(highByte);
SPI.transfer(lowByte);
digitalWrite(slaveSelectPin,HIGH);
}