这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » DIY-电子测光表-基础任务3-屏幕显示文字

共1条 1/1 1 跳转至

DIY-电子测光表-基础任务3-屏幕显示文字

菜鸟
2024-11-19 15:53:58     打赏

背景

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

Pasted image 20241109153610--双按键原理图.png


连接

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

image.png

代码实现

按键管脚定义

/**
 * @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 按键显示文字


Pasted image 20241109154626-按键释放.png

2. 红色按键显示文字

红色按键按下显示文字内容如下:


Hello EEPW & DigiKey
CoderX9527
Nov 9 2024



Pasted image 20241109154649-红色按键按下.png


3. 蓝色按键显示文字

蓝色按键按下显示文字内容如下:


ESP32S3:
WiFi: 2.4GHz 802.11 b/g/n
Bluetooth 5(LE)



Pasted image 20241109154826-蓝色按键按下.png


4. 视频演示

见B站演示视频:


EEPW-DIY-电子测光笔-任务3-屏幕显示文字_哔哩哔哩_bilibili

https://www.bilibili.com/video/BV1Z6UoYQEhU/?vd_source=8f2bbf56b70c541bec2ea0b9f102ebee






关键词: 测光     屏幕     显示     按键    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]