Lab_interaccio/2011/dmx_readout/Addressing.pde
2025-02-25 21:29:42 +01:00

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--;
}
}