循环判断每个按键的状态
#include <Wire.h>
#define PRINT_KEY_STATE(key) \
if (g_matrix_keyboard.Pressed(emakefun::MatrixKeyboard::kKey##key)) { \
Serial.println(F("key " #key " pressed")); \
} else if (g_matrix_keyboard.Pressing(emakefun::MatrixKeyboard::kKey##key)) { \
Serial.println(F("key " #key " pressing")); \
} else if (g_matrix_keyboard.Released(emakefun::MatrixKeyboard::kKey##key)) { \
Serial.println(F("key " #key " released")); \
}
namespace {
#if defined(ESP32)
constexpr gpio_num_t kI2cPinSda = GPIO_NUM_21;
constexpr gpio_num_t kI2cPinScl = GPIO_NUM_22;
#endif
}
void setup() {
Serial.begin(115200);
#if defined(ESP32)
Wire.begin(kI2cPinSda, kI2cPinScl);
#else
Wire.begin();
#endif
const auto result = g_matrix_keyboard.Initialize();
Serial.println(F("matrix keyboard initialization successful"));
} else {
Serial.print(F("Error: matrix keyboard initialization failed: "));
Serial.println(static_cast<uint32_t>(result));
while (true);
}
}
void loop() {
g_matrix_keyboard.Tick();
PRINT_KEY_STATE(0);
PRINT_KEY_STATE(1);
PRINT_KEY_STATE(2);
PRINT_KEY_STATE(3);
PRINT_KEY_STATE(4);
PRINT_KEY_STATE(5);
PRINT_KEY_STATE(6);
PRINT_KEY_STATE(7);
PRINT_KEY_STATE(8);
PRINT_KEY_STATE(9);
PRINT_KEY_STATE(A);
PRINT_KEY_STATE(B);
PRINT_KEY_STATE(C);
PRINT_KEY_STATE(D);
PRINT_KEY_STATE(Asterisk);
PRINT_KEY_STATE(NumberSign);
}
MatrixKeyboard是用于矩阵键盘模块的驱动类。
static constexpr uint8_t kDefaultI2cAddress
默认I2C地址。