GDK3 模拟按键响应

目标

一个 GDK3 就相当于物联网中的一个设备,这个设备必须能够与用户交互,用户的行为可能是一个无线信号,或者一个物理按键。GDK3 要能够响应这些信号。

思路

把一根引脚(比如 PB4)设置成输入,用一根杜邦线将其连接其他引脚,用以模拟用户输入;向串口打印一段信息表示 GDK3 的响应。

开发过程

1. 引入 gem3 项目源码,我们在 gem3 项目的基础上开发。

把 gdk3sdk(https://gedu.oss-cn-beijing.aliyuncs.com/gdk3/gdk3sdk.zip)中的 gem3 目录拷贝一份,并更名为 gebutton,并把该目录中所有文件名中有 gem3 的地方全部改成 gebutton,以及 makefile 中第二行的 Name 也要改成 gebutton。

按照 GDK3 上手系列之三,编译烧录文件,确保原先的代码没有任何错误。

2. 确保串口打印能够正常工作。

参见 GDK3 上手系列之四,如果不能正常工作,在 gebutton 中加入如下代码:

#define BUFSIZE  1024
char myprintf_buf[BUFSIZE];

/*
* redirect the printing to COM
*/
void my_printf(const char* fmt, ...)
{
    va_list args;
    int n;

    va_start(args, fmt);
    n = vsnprintf(myprintf_buf, BUFSIZE, fmt, args);
    va_end(args);
    int i = 0;
    for(i = 0; i < n; i++)
    {
        fputc(myprintf_buf[i],0);
    }
}

需添加头文件 stdarg.h。

3. 把引脚 PB4 设置成用于输入信号。

在 GPIO_Toggle_INIT 函数中添加以下代码:

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

4. 添加响应函数。

我们每隔 100ms 读取 PB4 引脚的数值,如果有值,就打印一段信息,表示收到了用户的输入。以下是一段示例代码:

int gd_checkpb4(int checkpb4)
{
    int delay = 100;
    int counter = 0;

    while(checkpb4){
        Delay_Ms(delay);
        if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_4))
        {
            my_printf("I received a message.\r\n");
        }
    }
}

5. 调用相应函数。

在 main 函数中把 gd_blink 注释掉,同时添加以下代码:

int checkpb4 = 1;
gd_checkpb4(checkpb4);

6. 参照 GDK3 上手系列之三,编译和烧录文件。

7. 参照 GDK3 上手系列之四,观测串口打印信息。

用一根杜邦线连接 PB4 和挥码枪上的 3V3 引脚,GDK3 就会打印一段信息,如下图所示:

作者:李宜桐  创建时间:2024-05-20 15:30
最后编辑:李宜桐  更新时间:2024-05-24 18:52