#define PIN_DIN1 2
#define PIN_DIN2 3
#define PIN_DIN3 4
#define PIN_DIN4 5
void setup()
{
Serial.begin(9600);
pinMode (PIN_DIN1, INPUT_PULLUP);
pinMode (PIN_DIN2, INPUT_PULLUP);
pinMode (PIN_DIN3, INPUT_PULLUP);
pinMode (PIN_DIN4, INPUT_PULLUP);
}
void loop()
{
const byte numInputs = 4;
static unsigned long debounceTime;
static unsigned long clickTime[numInputs];
static bool stateOld[numInputs];
bool stateNew[numInputs];
static bool press[numInputs]; // long press
if (millis() - debounceTime >= 50)
{
debounceTime = millis(); // update every 50mS
stateNew[0] = !digitalRead(PIN_DIN1); // true for press
stateNew[1] = !digitalRead(PIN_DIN2); // true for press
stateNew[2] = !digitalRead(PIN_DIN3); // true for press
stateNew[3] = !digitalRead(PIN_DIN4); // true for press
for (byte x = 0; x < numInputs; x++) {
if (stateOld[x] != stateNew[x]) // press or release
{
stateOld[x] = stateNew[x];
if (stateNew[x] == true) // if new state is pressed
{
clickTime[x] = millis();
press[x] = true;
} else if (press[x] == true) // 50mS later, released
{
press[x] = false;
Serial.print("pressed short ");
Serial.println(x);
}
}
// 1000mS after press
if (press[x] == true && millis() - clickTime[x] >= 1000 )
{
press[x] = false;
Serial.print("pressed long ");
Serial.println(x);
}
}
}
}