Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "SPI.h"
- // Pin 10 = CS
- // Pin 11 = Serial data out
- // Pin 13 = CLK
- // Pin 8 = DACResetPin
- const int slaveSelectPin = 10;
- const int DACResetPin = 8;
- int timedelay = 500;
- double dbLevel = -30;
- double dbIncrement = 0.5;
- unsigned int dac_level;
- // Address code 3 = Both A and B DACs
- int addr_decode = 3;
- // Encoder stuff
- const int encoderPowerPin = 4;
- const int encoderGroundPin = 5;
- int encoder0PinA = 6;
- int encoder0PinB = 7;
- int encoder0Pos = 0;
- int encoder0PinALast = LOW;
- int n = LOW;
- 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement