Files
Arduino-Volume-Controller/src/main.cpp

208 lines
3.6 KiB
C++

#include <Arduino.h>
const int USER_STEPS = 2;
const int STAFF_STEPS = 16;
int maxVolume = 64;
int userVolume = 64;
int potPosition = 64;
int oldUserVolume = userVolume;
void volumeUp();
void volumeDown();
void setup()
{
pinMode(11, OUTPUT); // Green
pinMode(12, OUTPUT); // Red LED (D4)
pinMode(LED_BUILTIN, OUTPUT); // Green LED
pinMode(2, INPUT); // SW1
pinMode(4, INPUT); // SW2
// RF Receiver
pinMode(A0, INPUT); // Remote Button D
pinMode(A1, INPUT); // Remote Button C
pinMode(A2, INPUT); // Remote Button B
pinMode(A3, INPUT); // Remote Button A
pinMode(10, OUTPUT); // D10 - CS
pinMode(9, OUTPUT); // D9 - U/D
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
for (int i = 0; i < 64; i++)
{
volumeUp();
}
}
void loop()
{
switch (maxVolume)
{
case 64:
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(LED_BUILTIN, LOW);
break;
case 48:
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(LED_BUILTIN, LOW);
break;
case 32:
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(LED_BUILTIN, HIGH);
break;
case 16:
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
break;
}
// SW1 - Staff Volume Up
if (!digitalRead(2))
{
if (maxVolume < 100)
{
maxVolume += STAFF_STEPS;
delay(300);
}
}
// SW2 - Staff Volume Down
if (!digitalRead(4))
{
if (maxVolume > STAFF_STEPS)
{
maxVolume -= STAFF_STEPS;
if (userVolume > maxVolume)
{
for (int i = 0; i < (userVolume - maxVolume); i++)
{
volumeDown();
potPosition--;
}
userVolume = maxVolume;
oldUserVolume = userVolume;
}
delay(300);
}
}
// Remote D - Mute
if (digitalRead(A0))
{
// Check if we are in a muted state
if (oldUserVolume > userVolume)
{
if (oldUserVolume > maxVolume)
{
userVolume = maxVolume;
}
else
{
userVolume = oldUserVolume;
}
}
else
{
oldUserVolume = userVolume;
userVolume = 0;
}
delay(300);
}
// Remote A - Significantly Lower Volume
if (digitalRead(A3))
{
if (oldUserVolume > userVolume)
{
if (oldUserVolume > maxVolume)
{
userVolume = maxVolume;
}
else
{
userVolume = oldUserVolume;
}
}
else
{
oldUserVolume = userVolume;
userVolume = 15;
}
delay(300);
}
// Remote B - Volume Up
if (digitalRead(A2) && !(oldUserVolume > userVolume))
{
if ((userVolume + USER_STEPS) > maxVolume)
{
userVolume = maxVolume;
oldUserVolume = userVolume;
}
else
{
userVolume += USER_STEPS;
oldUserVolume = userVolume;
}
delay(300);
}
// Remote C - Volume Down
if (digitalRead(A1) && !(oldUserVolume > userVolume))
{
if ((userVolume - USER_STEPS) < 0)
{
userVolume = 0;
oldUserVolume = userVolume;
}
else
{
userVolume -= USER_STEPS;
oldUserVolume = userVolume;
}
delay(300);
}
}
void volumeUp()
{
digitalWrite(9, HIGH);
delay(1);
digitalWrite(10, LOW);
delay(1);
digitalWrite(9, LOW);
delay(1);
digitalWrite(9, HIGH);
delay(1);
digitalWrite(10, HIGH);
delay(1);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
}
void volumeDown()
{
digitalWrite(9, LOW);
delay(1);
digitalWrite(10, LOW);
delay(1);
digitalWrite(9, HIGH);
delay(1);
digitalWrite(9, LOW);
delay(1);
digitalWrite(10, HIGH);
}