Skip to content

Commit 007fac1

Browse files
authored
Merge pull request #4 from mysterywolf/master
升级到官方最新
2 parents 71df3ba + 9207f6b commit 007fac1

File tree

6 files changed

+151
-150
lines changed

6 files changed

+151
-150
lines changed

README.md

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,34 @@
33
## 简介
44
MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。
55

6-
MultiButton的作者是0x1abin, github地址: https://github.com/0x1abin/MultiButton. 该仓库只是移植到RTT在线包中并修复了一个原库bug.
6+
MultiButton的作者是0x1abin, github地址: https://github.com/0x1abin/MultiButton.
77

88
## 使用方法
99
1.先申请一个按键结构
1010

11-
```
11+
```c
1212
struct Button button1;
1313
```
1414
2.初始化按键对象,绑定按键的GPIO电平读取接口**read_button_pin()** ,后一个参数设置有效触发电平
1515

16-
```
16+
```c
1717
button_init(&button1, read_button_pin, 0);
1818
```
1919
3.注册按键事件
2020
21-
```
21+
```c
2222
button_attach(&button1, SINGLE_CLICK, Callback_SINGLE_CLICK_Handler);
2323
button_attach(&button1, DOUBLE_CLICK, Callback_DOUBLE_Click_Handler);
2424
...
2525
```
2626
4.启动按键
2727

28-
```
28+
```c
2929
button_start(&button1);
3030
```
3131
5.设置一个5ms间隔的定时器循环调用后台处理函数
3232
33-
```
33+
```c
3434
while(1) {
3535
...
3636
if(timer_ticks == 5) {
@@ -45,7 +45,7 @@ while(1) {
4545

4646
MultiButton 使用C语言实现,基于面向对象方式设计思路,每个按键对象单独用一份数据结构管理:
4747

48-
```
48+
```c
4949
struct Button {
5050
uint16_t ticks;
5151
uint8_t repeat: 4;
@@ -71,22 +71,31 @@ PRESS_UP | 按键弹起,每次松开都触发
7171
PRESS_REPEAT | 重复按下触发,变量repeat计数连击次数
7272
SINGLE_CLICK | 单击按键事件
7373
DOUBLE_CLICK | 双击按键事件
74-
LONG_RRESS_START | 达到长按时间阈值时触发一次
74+
LONG_PRESS_START | 达到长按时间阈值时触发一次
7575
LONG_PRESS_HOLD | 长按期间一直触发
7676

7777

7878
## Examples
7979

80-
```
80+
```c
8181
#include "button.h"
8282

8383
struct Button btn1;
8484

85-
int read_button1_GPIO()
85+
uint8_t read_button1_GPIO()
8686
{
8787
return HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
8888
}
8989

90+
void BTN1_PRESS_DOWN_Handler(void* btn)
91+
{
92+
//do something...
93+
}
94+
void BTN1_PRESS_UP_Handler(void* btn)
95+
{
96+
//do something...
97+
}
98+
9099
int main()
91100
{
92101
button_init(&btn1, read_button1_GPIO, 0);
@@ -95,7 +104,7 @@ int main()
95104
button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler);
96105
button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);
97106
button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);
98-
button_attach(&btn1, LONG_RRESS_START, BTN1_LONG_RRESS_START_Handler);
107+
button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);
99108
button_attach(&btn2, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);
100109
button_start(&btn1);
101110

@@ -107,16 +116,11 @@ int main()
107116
{}
108117
}
109118

110-
void BTN1_PRESS_DOWN_Handler(void* btn)
111-
{
112-
//do something...
113-
}
114-
115-
void BTN1_PRESS_UP_Handler(void* btn)
116-
{
117-
//do something...
118-
}
119-
120119
...
121120
```
122121
122+
123+
124+
## 状态图
125+
126+
![states.png](states.png)

examples/event_async.c

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,51 @@
1-
#include <rtthread.h>
2-
#include <rtdevice.h>
1+
#include <rtthread.h>
2+
#include <rtdevice.h>
33
#include "multi_button.h"
44

55
static struct button btn;
66

77
#define BUTTON_PIN (10)
88

9-
static uint8_t button_read_pin(void)
9+
static uint8_t button_read_pin(void)
1010
{
11-
return rt_pin_read(BUTTON_PIN);
11+
return rt_pin_read(BUTTON_PIN);
1212
}
1313

1414
void button_callback(void *btn)
1515
{
16-
uint32_t btn_event_val;
17-
18-
btn_event_val = get_button_event((struct button *)btn);
19-
16+
uint32_t btn_event_val;
17+
18+
btn_event_val = get_button_event((struct button *)btn);
19+
2020
switch(btn_event_val)
2121
{
2222
case PRESS_DOWN:
23-
rt_kprintf("button press down\n");
24-
break;
23+
rt_kprintf("button press down\n");
24+
break;
2525

26-
case PRESS_UP:
26+
case PRESS_UP:
2727
rt_kprintf("button press up\n");
28-
break;
28+
break;
2929

30-
case PRESS_REPEAT:
30+
case PRESS_REPEAT:
3131
rt_kprintf("button press repeat\n");
32-
break;
32+
break;
3333

34-
case SINGLE_CLICK:
34+
case SINGLE_CLICK:
3535
rt_kprintf("button single click\n");
36-
break;
36+
break;
3737

38-
case DOUBLE_CLICK:
38+
case DOUBLE_CLICK:
3939
rt_kprintf("button double click\n");
40-
break;
40+
break;
4141

42-
case LONG_RRESS_START:
42+
case LONG_RRESS_START:
4343
rt_kprintf("button long press start\n");
44-
break;
44+
break;
4545

46-
case LONG_PRESS_HOLD:
46+
case LONG_PRESS_HOLD:
4747
rt_kprintf("button long press hold\n");
48-
break;
48+
break;
4949
}
5050
}
5151

@@ -54,25 +54,25 @@ void btn_thread_entry(void* p)
5454
while(1)
5555
{
5656
/* 5ms */
57-
rt_thread_delay(RT_TICK_PER_SECOND/200);
58-
button_ticks();
57+
rt_thread_delay(RT_TICK_PER_SECOND/200);
58+
button_ticks();
5959
}
6060
}
6161

6262
int multi_button_test(void)
6363
{
6464
rt_thread_t thread = RT_NULL;
65-
65+
6666
/* Create background ticks thread */
6767
thread = rt_thread_create("btn", btn_thread_entry, RT_NULL, 1024, 10, 10);
6868
if(thread == RT_NULL)
6969
{
70-
return RT_ERROR;
70+
return RT_ERROR;
7171
}
7272
rt_thread_startup(thread);
7373

7474
/* low level drive */
75-
rt_pin_mode (BUTTON_PIN, PIN_MODE_INPUT);
75+
rt_pin_mode (BUTTON_PIN, PIN_MODE_INPUT);
7676
button_init (&btn, button_read_pin, PIN_LOW);
7777
button_attach(&btn, PRESS_DOWN, button_callback);
7878
button_attach(&btn, PRESS_UP, button_callback);
@@ -83,6 +83,6 @@ int multi_button_test(void)
8383
button_attach(&btn, LONG_PRESS_HOLD, button_callback);
8484
button_start (&btn);
8585

86-
return RT_EOK;
86+
return RT_EOK;
8787
}
88-
INIT_APP_EXPORT(multi_button_test);
88+
INIT_APP_EXPORT(multi_button_test);

examples/event_inquire.c

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,60 @@
1-
#include <rtthread.h>
2-
#include <rtdevice.h>
1+
#include <rtthread.h>
2+
#include <rtdevice.h>
33
#include "multi_button.h"
44

55
static struct button btn;
66

77
#define BUTTON_PIN (10)
88

9-
static uint8_t button_read_pin(void)
9+
static uint8_t button_read_pin(void)
1010
{
11-
return rt_pin_read(BUTTON_PIN);
11+
return rt_pin_read(BUTTON_PIN);
1212
}
1313

1414
void btn_test_thread_entry(void *p)
1515
{
16-
uint32_t btn_event_val;
17-
16+
uint32_t btn_event_val;
17+
1818
while(1)
1919
{
20-
if(btn_event_val != get_button_event(&btn))
20+
if(btn_event_val != get_button_event(&btn))
2121
{
2222
btn_event_val = get_button_event(&btn);
2323

2424
switch(btn_event_val)
2525
{
2626
case PRESS_DOWN:
27-
rt_kprintf("button press down\n");
28-
break;
27+
rt_kprintf("button press down\n");
28+
break;
2929

30-
case PRESS_UP:
30+
case PRESS_UP:
3131
rt_kprintf("button press up\n");
32-
break;
32+
break;
3333

34-
case PRESS_REPEAT:
34+
case PRESS_REPEAT:
3535
rt_kprintf("button press repeat\n");
36-
break;
36+
break;
3737

38-
case SINGLE_CLICK:
38+
case SINGLE_CLICK:
3939
rt_kprintf("button single click\n");
40-
break;
40+
break;
4141

42-
case DOUBLE_CLICK:
42+
case DOUBLE_CLICK:
4343
rt_kprintf("button double click\n");
44-
break;
44+
break;
4545

46-
case LONG_RRESS_START:
46+
case LONG_RRESS_START:
4747
rt_kprintf("button long press start\n");
48-
break;
48+
break;
4949

50-
case LONG_PRESS_HOLD:
50+
case LONG_PRESS_HOLD:
5151
rt_kprintf("button long press hold\n");
52-
break;
52+
break;
5353
}
5454
}
55-
56-
button_ticks();
57-
rt_thread_delay(RT_TICK_PER_SECOND/200);
55+
56+
button_ticks();
57+
rt_thread_delay(RT_TICK_PER_SECOND/200);
5858
}
5959
}
6060

@@ -65,15 +65,15 @@ int multi_button_test(void)
6565
thread = rt_thread_create("btn_test", btn_test_thread_entry, RT_NULL, 1024, 15, 10);
6666
if(thread == RT_NULL)
6767
{
68-
return RT_ERROR;
68+
return RT_ERROR;
6969
}
7070
rt_thread_startup(thread);
7171

7272
/* low level drive */
73-
rt_pin_mode (BUTTON_PIN, PIN_MODE_INPUT);
73+
rt_pin_mode (BUTTON_PIN, PIN_MODE_INPUT);
7474
button_init (&btn, button_read_pin, PIN_LOW);
7575
button_start(&btn);
7676

77-
return RT_EOK;
77+
return RT_EOK;
7878
}
79-
INIT_APP_EXPORT(multi_button_test);
79+
INIT_APP_EXPORT(multi_button_test);

0 commit comments

Comments
 (0)