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()的调用。
4、总结
到目前为止就基本完成了网络收音机的程序设计,相关代码已开源到gitee。
本帖最后由 墨文@ 于 2022-3-25 10:46 编辑
按键的驱动方式有点高大上,不同于一般单片机的开发方式。需要理解一下。
引用: 墨文@ 发表于 2022-3-30 15:32 按键的驱动有点类似于杂项驱动。
你回复楼上@serialworld 的时候,直接点他下面的回复,要不他收不到提醒
引用: nmg 发表于 2022-3-31 14:45 眼见就要提交作品的节奏?行动速度刚刚的 会不会成为第一个完成作品的人儿呢
不会,后面准备看看能不能弄出点新花样。