#include <ZMEKeypad.h>
#define ROWS 1
#define COLS 4
BYTE rowPins[1] = {17};
BYTE columnPins[4] = {9, 10, 11, 12};
ZMEKeypad kpd = ZMEKeypad(columnPins, COLS, rowPins, ROWS);
#define CONTROL_GROUP1 1
#define CONTROL_GROUP2 2
#define SWITCH_ON 0xff
#define SWITCH_OFF 0
byte button_0_start_holding = TRUE;
byte button_1_start_holding = TRUE;
byte button_2_start_holding = TRUE;
byte button_3_start_holding = TRUE;
ZUNO_SETUP_ASSOCIATIONS(ZUNO_ASSOCIATION_GROUP_SET_VALUE_AND_DIM, ZUNO_ASSOCIATION_GROUP_SET_VALUE_AND_DIM);
ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING);
void setup() {
zunoSetupKeyScannerWU(4);
kpd.begin();
kpd.setHoldTime(50);
kpd.setDebounceTime(2);
}
void loop() {
byte actions[4];
byte go_to_sleep = FALSE;
byte button_0_active = FALSE;
byte button_1_active = FALSE;
byte button_2_active = FALSE;
byte button_3_active = FALSE;
byte num_touched_keys = kpd.scanKeys(actions);
if (num_touched_keys) {
bool hold = KEYPAD_IS_HOLDING(actions[0]);
switch (KEYPAD_KEYINDEX(actions[0])) {
case 0:
button_0_active = TRUE;
if (hold && button_0_start_holding) {
button_0_start_holding = FALSE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP1, TRUE, TRUE);
}
if (!hold) {
go_to_sleep = TRUE;
zunoSendToGroupSetValueCommand(CONTROL_GROUP1, SWITCH_OFF);
}
break;
case 1:
button_1_active = TRUE;
if (hold && button_1_start_holding) {
button_1_start_holding = FALSE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP1, FALSE, TRUE);
}
if (!hold) {
go_to_sleep = TRUE;
zunoSendToGroupSetValueCommand(CONTROL_GROUP1, SWITCH_ON);
}
break;
case 2:
button_2_active = TRUE;
if (hold && button_2_start_holding) {
button_2_start_holding = FALSE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP2, TRUE, TRUE);
}
if (!hold) {
go_to_sleep = TRUE;
zunoSendToGroupSetValueCommand(CONTROL_GROUP2, SWITCH_OFF);
}
break;
case 3:
button_3_active = TRUE;
if (hold && button_3_start_holding) {
button_3_start_holding = FALSE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP2, FALSE, TRUE);
}
if (!hold) {
go_to_sleep = TRUE;
zunoSendToGroupSetValueCommand(CONTROL_GROUP2, SWITCH_ON);
}
break;
}
}
if(!button_0_start_holding && !button_0_active) {
button_0_start_holding = TRUE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP1, TRUE, FALSE);
}
if(!button_1_start_holding && !button_1_active) {
button_1_start_holding = TRUE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP1, FALSE, FALSE);
}
if(!button_2_start_holding && !button_2_active) {
button_2_start_holding = TRUE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP2, TRUE, FALSE);
}
if(!button_3_start_holding && !button_3_active) {
button_3_start_holding = TRUE;
zunoSendToGroupDimmingCommand(CONTROL_GROUP2, FALSE, FALSE);
}
if (kpd.isIdled()) {
go_to_sleep = TRUE;
}
if (go_to_sleep) {
zunoSendDeviceToSleep();
}
}