#include 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); }