[经验分享] 基于平头哥RSIC-V RVB2601的网络收音机设计(4)

墨文@   2022-3-25 10:45 楼主

1、概述

前面已经完成了对播放链接的获取,音乐的搜索和界面显示等功能,整个界面的切换需要使用到按键进行操作,由于开发板上面只有两个按键,而所实现的功能又比较多,因此需要定义单一按键和组合按键的形式来实现具体的操作。

 

 

2、按键功能的实现

 

 

RVB2601按键功能主要通过向系统进行注册按键事件,当有按键调用的时候系统会回调button_event(int evt_id, void *priv)函数来完成对按键的处理。

 

 

在注册按键的时候首先调用button_init();

 

 

然后再调用button_add_gpio(1,PA11,LOW_LEVEL);添加PA11按键,同时配置按键的触发电平为低电平。

 

 

同时再使用button_evt_t buttons[]来设置具体的按键参数,包括按键触发类型,按键的id和按键按下的时间等。

 

 

最后使用button_add_event(,,,)完成对按键事件的添加。

 

 

具体的代码如下

 

 

//按键初始化
void app_button_init(void)
{
    button_init();
    button_add_gpio(0, PA11, LOW_LEVEL);//按键1
    button_add_gpio(1, PA12, LOW_LEVEL);//按键2
    
    button_evt_t buttons[] = {
        {
            .event_id = BUTTON_PRESS_DOWN,
            .button_id = 0,
            .press_time = 0,
        },
    };
    
    button_add_event(0, buttons, sizeof(buttons)/sizeof(button_evt_t), button_event, "BUTTON1_PRESS_DOWN"); //用户事件号为0,事件为按键(0)按下
    

    buttons[0].event_id = BUTTON_PRESS_DOUBLE;
    buttons[0].button_id = 0;
    button_add_event(1, buttons, sizeof(buttons)/sizeof(button_evt_t), button_event, "BUTTON_PRESS_DOUBLE1");//用户事件号为2,事件为按键(0)双击

//添加按键事件2
    buttons[0].event_id = BUTTON_PRESS_DOWN;
    buttons[0].press_time = 0;
    buttons[0].button_id = 1,
    button_add_event(2, buttons, sizeof(buttons)/sizeof(button_evt_t), button_event, "BUTTON2_PRESS_DOWN"); //用户事件号为3,事件为按键(1)按下
    
    buttons[0].event_id = BUTTON_PRESS_DOUBLE;
    buttons[0].button_id = 1,
    button_add_event(3, buttons, sizeof(buttons)/sizeof(button_evt_t), button_event, "BUTTON_PRESS_DOUBLE2");//用户事件号为4,事件为按键(1)双击

}

 

 

3、播放流水灯的添加

 

 

为了能够更加直观的看到播放器播放音乐的状态,我们还需要添加一个RGBled灯用来做播放时候流水灯的时候,当有音乐播放的时候,RGB灯就开始闪烁,当没有音乐播放的时候,RGB灯就停止闪烁。

 

 

具体的实现方法是在player.c中添加一个led_refresh()的调用。

 

 

image-20220325104301-1.png

 

 

​​​​​​​4、总结

 

 

到目前为止就基本完成了网络收音机的程序设计,相关代码已开源到gitee

 

 

本帖最后由 墨文@ 于 2022-3-25 10:46 编辑

回复评论 (6)

帖子格式好像变形了。

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-3-25 21:59

按键的驱动方式有点高大上,不同于一般单片机的开发方式。需要理解一下。

点赞  2022-3-26 07:50

按键的驱动有点类似于杂项驱动。

点赞  2022-3-30 15:32

5楼 nmg 

引用: 墨文@ 发表于 2022-3-30 15:32 按键的驱动有点类似于杂项驱动。

你回复楼上@serialworld 的时候,直接点他下面的回复,要不他收不到提醒

点赞  2022-3-31 14:44

6楼 nmg 

眼见就要提交作品的节奏?行动速度刚刚的

会不会成为第一个完成作品的人儿呢

点赞  2022-3-31 14:45
引用: nmg 发表于 2022-3-31 14:45 眼见就要提交作品的节奏?行动速度刚刚的 会不会成为第一个完成作品的人儿呢

不会,后面准备看看能不能弄出点新花样。

点赞  2022-4-3 00:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复