


#include "M5Chain.h"
#define RXD_PIN GPIO_NUM_5 // 47 for the other side of Chain DualKey
#define TXD_PIN GPIO_NUM_6 // 48 for the other side of Chain DualKey
Chain M5Chain;
device_list_t *device_list = NULL;
uint16_t device_count = 0;
uint8_t opr_status = 0;
uint8_t button_status;
chain_button_press_type_t button_press_type;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("===========================");
Serial.println("M5Stack Chain Key Test");
M5Chain.begin(&Serial2, 115200, RXD_PIN, TXD_PIN);
M5Chain.getDeviceNum(&device_count);
device_list = (device_list_t *)malloc(sizeof(device_list_t));
device_list->count = device_count;
device_list->devices = (device_info_t *)malloc(sizeof(device_info_t) * device_count);
M5Chain.getDeviceList(device_list);
if (device_list->devices[0].device_type == CHAIN_KEY_TYPE_CODE) {
Serial.println("ID[1] is Chain Key");
} else {
Serial.println("ID[1] is NOT Chain Key");
return;
}
// Device ID, double-click interval (100MS/200MS/.../900MS/1000MS), long-press interval (3S/4S/.../9S/10S), operation status
M5Chain.setKeyButtonTriggerInterval(1, BUTTON_DOUBLE_CLICK_TIME_500MS, BUTTON_LONG_PRESS_TIME_5S, &opr_status);
Serial.println("Set double and long press intervals\n");
delay(1000);
}
void loop() {
M5Chain.getKeyButtonStatus(1, &button_status); // Device ID
// Serial.print("button_status: ");
// Serial.println(button_status);
while (M5Chain.getKeyButtonPressStatus(1, &button_press_type)) { // Device ID
switch (button_press_type) {
case CHAIN_BUTTON_PRESS_SINGLE:
Serial.println("Single pressed");
break;
case CHAIN_BUTTON_PRESS_DOUBLE:
Serial.println("Double pressed");
break;
case CHAIN_BUTTON_PRESS_LONG:
Serial.println("Long pressed");
break;
}
}
}Use the Chain Bridge connector to connect the main controller Chain DualKey and Chain Key. Pay attention to the direction when connecting — the triangular arrow should point outward from the main controller Chain DualKey, as shown below:
Compile and upload the above program to the device, then open the serial monitor. The program will detect button press events (single press, double press, long press) and output related messages:
You can also modify the BUTTON_DOUBLE_CLICK_TIME_500MS and BUTTON_LONG_PRESS_TIME_5S settings in the program to adjust the trigger intervals for double-click and long-press events.