const uint16_t LUT[] = {30, 60, 90, 120};//extend as required
const int8_t LUTLen = sizeof(LUT) / sizeof(LUT[0]);
const int keypadAI = A0;
int8_t button = -1;
int8_t previous = -1;
void setup() {
Serial.begin(115200);
}
void loop() {
button = checkscan();
if (button != -1 && button != previous) {
Serial.println(button);
previous = button;
}
}
int checkscan() {//returns pad number(0-n), or -1
int retval = -1; //we return this if nothing pressed
int rawval = analogRead(keypadAI);
for (int i = 0; i < LUTLen; i++) {
if (rawval < LUT[i]) { //if true, we've got one
retval = i;
delay(50); //purely artificial, to prevent excess scrolling of SM
break;
}
} //end of scan, either have button number or -1
//implement your own debounce logic, if it's required
return retval;
}