208 lines
3.6 KiB
C++
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);
|
|
} |