背景
结合之前的工程,接入双按键模块 U025,一个红色按键和一个蓝色按键。模块的外观和原理图如下图所示:

连接
按键模块和开发板的连接如下;

代码实现
按键管脚定义
/**
* @brief
* boot按键 -- 管脚0
* 红色按键 -- 管脚12
* 绿色按键 -- 管脚11
* @defgroup BTN_PIN_GROUP
* @{
*/
#define BTN_BOOT_PIN 0
#define BTN_RED_PIN 12
#define BTN_BLUE_PIN 11
/**
* @}
*/按键初始化
/**
* @brief 按键硬件初始化、对象初始化
*/
void btn_init(void)
{
pinMode(BTN_BOOT_PIN, INPUT_PULLUP); /* 按键硬件初始化,输入上拉模式 */
btn_boot_obj.attach(BTN_BOOT_PIN); /* 按键对象绑定到硬件 */
btn_boot_obj.interval(10); /* 设置按键消抖时间 */
/* 红色按键 */
pinMode(BTN_RED_PIN, INPUT_PULLUP);
btn_red_obj.attach(BTN_RED_PIN);
btn_red_obj.interval(5);
/* 蓝色按键 */
pinMode(BTN_BLUE_PIN, INPUT_PULLUP);
btn_blue_obj.attach(BTN_BLUE_PIN);
btn_blue_obj.interval(5);
}按键扫描及处理
在 loop() 中调用按键扫描函数 btn_process() ,根据按下按键的不同,调用 screen_button_status() 在屏幕显示不同的内容。
/**
* @brief 在主循环中调用此函数
*
* @param
*/
void btn_process(void)
{
/* 在此更新所有的按键状态 */
btn_boot_obj.update();
btn_red_obj.update();
btn_blue_obj.update();
if (btn_boot_obj.changed()) { /* 按键状态变化了,包含按下和释放事件 */
if (btn_boot_obj.read()) { /* 高电平表示按键释放 */
led_status = !led_status;
screen_button_status(BTN_BOOT_PIN, false);
} else { /* 低电平表示按键按下 */
screen_button_status(BTN_BOOT_PIN, true);
}
}
digitalWrite(LED_PIN, led_status);
/* 红色按键状态检测 */
if (btn_red_obj.changed()) {
Serial.println("btn red changed");
if (btn_red_obj.fell()) { /* HIGH-->LOW,按下 */
Serial.println("btn red PRESSED");
screen_button_status(BTN_RED_PIN, true);
} else if (btn_red_obj.rose()) { /* LOW-->HIGH, 释放*/
Serial.println("btn red RELEASED");
screen_button_status(BTN_RED_PIN, false);
} else {
Serial.println("btn red UNKNOWN");
}
}
/* 蓝色按键状态检测 */
if (btn_blue_obj.changed()) {
Serial.println("btn blue changed");
if (btn_blue_obj.fell()) { /* HIGH-->LOW,按下 */
Serial.println("btn blue PRESSED");
screen_button_status(BTN_BLUE_PIN, true);
} else if (btn_blue_obj.rose()) { /* LOW-->HIGH, 释放*/
Serial.println("btn blue RELEASED");
screen_button_status(BTN_BLUE_PIN, false);
} else {
Serial.println("btn blue UNKNOWN");
}
}
}
/**
* @brief 根据按下的按键状态在屏幕上显示不同的内容
*
* @param btn_pin see @ref BTN_PIN_GROUP
* @param isPressed
*/
void screen_button_status(int btn_pin, bool isPressed)
{
canvas.fillScreen(ST77XX_BLACK);
canvas.setCursor(0, 25);
switch (btn_pin) {
case BTN_BOOT_PIN:
canvas.setTextColor(ST77XX_BLUE);
canvas.print("Button: ");
canvas.setTextColor(ST77XX_YELLOW);
if(isPressed) {
canvas.println("Pressed");
} else {
canvas.println("Released");
}
break;
case BTN_RED_PIN:
canvas.setTextColor(ST77XX_RED);
canvas.println("Hello EEPW & DigiKey");
canvas.println("CoderX9527");
canvas.println(String(__DATE__));
break;
case BTN_BLUE_PIN:
canvas.setTextColor(ST77XX_BLUE);
canvas.println("ESP32S3:");
canvas.println("WiFi: 2.4GHz 802.11 b/g/n");
canvas.println("Bluetooth 5(LE)");
break;
default:
break;
}
display.drawRGBBitmap(0, 0, canvas.getBuffer(), LCD_WIDTH, LCD_HEIGHT);
}演示
1. BOOT 按键显示文字

2. 红色按键显示文字
红色按键按下显示文字内容如下:
Hello EEPW & DigiKey CoderX9527 Nov 9 2024

3. 蓝色按键显示文字
蓝色按键按下显示文字内容如下:
ESP32S3: WiFi: 2.4GHz 802.11 b/g/n Bluetooth 5(LE)

4. 视频演示
见B站演示视频:
EEPW-DIY-电子测光笔-任务3-屏幕显示文字_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Z6UoYQEhU/?vd_source=8f2bbf56b70c541bec2ea0b9f102ebee
我要赚赏金
