
Arduino 上手教程
CoreMatrix 按键输入相关 API 与案例程序。
M5.update() 函数用于读取状态更新,并尽可能减少阻塞,否则可能无法及时获取按键变化状态。3.3.10-aM5CoreMatrix0.2.290.2.36KEY1、KEY2、KEY3 分别连接 M5PM1 的 G0、G1、G2,通过上拉电阻连接到 3V3_L1,按下时为低电平,M5Unified 将三个按键映射为 M5.BtnA、M5.BtnB、M5.BtnC。
#include <M5Unified.h>
static void drawButtons(const bool pressed[3])
{
M5.Display.startWrite();
M5.Display.fillScreen(TFT_BLACK);
for (int i = 0; i < 3; ++i) {
const int x = 1 + i * 5;
M5.Display.drawRect(x, 3, 4, 10, TFT_WHITE);
if (pressed[i]) {
M5.Display.fillRect(x + 1, 4, 2, 8, TFT_WHITE);
}
}
M5.Display.endWrite();
M5.Display.display();
}
void setup()
{
auto cfg = M5.config();
cfg.serial_baudrate = 115200;
M5.begin(cfg);
M5.Display.setColorDepth(8);
M5.Display.setRotation(1);
M5.Display.setBrightness(128);
const bool pressed[3] = {false, false, false};
drawButtons(pressed);
}
void loop()
{
M5.update();
const bool pressed[3] = {
M5.BtnA.isPressed(),
M5.BtnB.isPressed(),
M5.BtnC.isPressed(),
};
static bool lastPressed[3] = {false, false, false};
bool changed = false;
for (int i = 0; i < 3; ++i) {
if (pressed[i] != lastPressed[i]) {
changed = true;
lastPressed[i] = pressed[i];
}
}
if (changed) {
drawButtons(pressed);
}
if (M5.BtnA.wasPressed()) Serial.println("KEY1 pressed");
if (M5.BtnB.wasPressed()) Serial.println("KEY2 pressed");
if (M5.BtnC.wasPressed()) Serial.println("KEY3 pressed");
if (M5.BtnA.wasClicked()) Serial.println("KEY1 clicked");
if (M5.BtnB.wasClicked()) Serial.println("KEY2 clicked");
if (M5.BtnC.wasClicked()) Serial.println("KEY3 clicked");
delay(10);
}点阵屏显示三个空心方框,分别对应 KEY1、KEY2、KEY3。按住按键时对应方框被填充,串口监视器会输出按下和单击事件。
CoreMatrix 按键部分使用了 M5Unified 库中的 Button_Class,更多按键相关的 API 可以参考下方文档: