64 lines
1.5 KiB
Plaintext
64 lines
1.5 KiB
Plaintext
void processAddressButtons()
|
|
{
|
|
boolean curAddrUp = 0;
|
|
boolean curAddrDown = 0;
|
|
boolean curAddrFast = 0;
|
|
|
|
// Get the active high current button state
|
|
if (digitalRead(ADDR_UP_BUTTON) == LOW) {
|
|
curAddrUp = 1;
|
|
}
|
|
if (digitalRead(ADDR_DOWN_BUTTON) == LOW) {
|
|
curAddrDown = 1;
|
|
}
|
|
if (digitalRead(ADDR_FAST_BUTTON) == LOW) {
|
|
curAddrFast = 1;
|
|
}
|
|
|
|
// Process AddrUp
|
|
AddrUpPressed = curAddrUp & prevAddrUp & ~AddrUpDown;
|
|
AddrUpDown = curAddrUp & prevAddrUp;
|
|
prevAddrUp = curAddrUp;
|
|
|
|
// Process AddrDown
|
|
AddrDownPressed = curAddrDown & prevAddrDown & ~AddrDownDown;
|
|
AddrDownDown = curAddrDown & prevAddrDown;
|
|
prevAddrDown = curAddrDown;
|
|
|
|
// Process AddrFast (we don't need the "just pressed" detection here)
|
|
AddrFastDown = curAddrFast & prevAddrFast;
|
|
prevAddrFast = curAddrFast;
|
|
|
|
// Pressing both AddrUp and AddrDown resets us to 1
|
|
if (AddrUpDown & AddrDownDown) {
|
|
dmxaddress = 1+3;
|
|
} else {
|
|
// Process AddrUp (either bump it once or every time we execute this routine for fast mode)
|
|
if (AddrUpPressed || (AddrUpDown & AddrFastDown)) {
|
|
// AddrUp just pressed
|
|
IncAddr();
|
|
}
|
|
|
|
// Process AddrDown
|
|
else if (AddrDownPressed || (AddrDownDown & AddrFastDown)) {
|
|
// AddrDown just pressed
|
|
DecAddr();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Inc/Dec Addr routines limit and account for the +3 offset in our dmxaddress variable
|
|
void IncAddr()
|
|
{
|
|
if (dmxaddress < 512+3-7) {
|
|
dmxaddress++;
|
|
}
|
|
}
|
|
|
|
void DecAddr()
|
|
{
|
|
if (dmxaddress > 1+3) {
|
|
dmxaddress--;
|
|
}
|
|
}
|