:
//
#define KEY_INP 0 //
#define TIME_DEBOUNCE 30 //
#define TIME_LONG_PRESS 800 //
#define BUTTON_ACTIVE 950 //
enum {not_press, short_press, long_press}; //
//
#define B1S 1
#define B1L 254
#define B2S 2
#define B2L 253
#define B3S 4
#define B3L 251
#define B4S 8
#define B4L 247
#define B5S 16
#define B5L 239
#define B6S 32
#define B6L 223
#define B7S 64
#define B7L 191
#define B8S 128
#define B8L 127
uint8_t push_button = 0; //
void setup() {
Serial.begin(115200);
}
void loop() {
key_status(); //
switch (push_button) {
case B1S: Serial.println("B1S"); break;
case B1L: Serial.println("B1L"); break;
case B2S: Serial.println("B2S"); break;
case B2L: Serial.println("B2L"); break;
case B3S: Serial.println("B3S"); break;
case B3L: Serial.println("B3L"); break;
case B4S: Serial.println("B4S"); break;
case B4L: Serial.println("B4L"); break;
case B5S: Serial.println("B5S"); break;
case B5L: Serial.println("B5L"); break;
case B6S: Serial.println("B6S"); break;
case B6L: Serial.println("B6L"); break;
case B7S: Serial.println("B7S"); break;
case B7L: Serial.println("B7L"); break;
case B8S: Serial.println("B8S"); break;
case B8L: Serial.println("B8L"); break;
}
push_button = 0;
}
void key_status(void) {
static uint8_t button_state;
static int16_t button;
static uint32_t count;
if ((analogRead(KEY_INP) < BUTTON_ACTIVE) && (button_state == not_press)) {
count = millis();
button_state = short_press;
button = analogRead(KEY_INP)/100;
}
if ((button == (analogRead(KEY_INP)/100)) && (button_state != not_press) &&
((millis() - count) > TIME_LONG_PRESS)) {
if (button_state != long_press) push_button = ~(1 << button);
button_state = long_press;
}
if ((analogRead(KEY_INP) > BUTTON_ACTIVE) && (button_state != not_press) &&
((millis() - count) > TIME_DEBOUNCE)) {
count = millis();
if (button_state != long_press) push_button = 1 << button;
button_state = not_press;
}
}