本帖最后由 shentqlf 于 2017-7-9 13:32 编辑
EventGpio方法将GPIO更高级别的集成实现了事件驱动
配合EventManager方法,让Gpio更好用
使用方法
1、编写IO触发的事件函数,即IO被触发后要执行的用户程序- void neg()
- {
- uart1.println("neg");
- }
- void pos()
- {
- uart1.println("pos");
- }
- void high()
- {
- uart1.println("high");
- }
- void click()
- {
- uart1.println("click");
- }
- void release()
- {
- uart1.println("release");
- }
- void long_press()
- {
- uart1.println("long");
- }
- void click1()
- {
- uart1.println("click1");
- }
- void release1()
- {
- uart1.println("release1");
- }
- void long_press1()
- {
- uart1.println("long1");
- }
复制代码
2、创建对应引脚的对象和事件管理器
- EventGpio event_io_1(&PA8,0,0,0,0,click,release,0);
- EventGpio event_io_2(&PB1,0,0,0,neg,click1,release1,long_press1);
- EventManager io_manager;
复制代码
3、初始化IO对象,并将IO对象添加到管理器中
- void setup()
- {
- ebox_init();
- uart1.begin(115200);
- event_io_1.begin(1);
- event_io_2.begin(1);
- io_manager.add(&event_io_1);
- io_manager.add(&event_io_2);
- }
复制代码
4、在main函数中调用管理器的进程,如果有操作系统可以将此进程放至系统任务中,每隔1ms或者10ms执行一次。- int main(void)
- {
- setup();
- while(1)
- {
- io_manager.process();
- delay_ms(1);
- }
- }
复制代码
5、当用户触发IO后管理器会按照对象所绑定的事件进行处理。
讲解
●event_high():高电平事件,当IO处于高电平的时候所有需要执行的事件
●event_low(): 低电平事件,当IO处于低电平的时候所有需要执行的事件
●event_pos_edge():上升沿事件,当IO出现上升沿时候所有需要执行的事件
●event_nag_edge():下降沿事件,当IO出现下降沿时候所有需要执行的事件
将IO当做按键来使用的时候,用户需要使用一下三种功能,上面的边沿事件也可以代替,但是唯一的缺点是他更底层化,不同的按键上下啦电路会导致混乱。而且不支持长按功能。
●event_click():按键按下事
●event_release():按键松开事件
●event_long_press():按键长按事件,用户需要注意的是,
如果用户给长按事件绑定了事件,click事件会将失去作用,只能和release配合,
具体的行为如下:
1、按下按键并松开:执行release事件。
2、长按2000ms:执行long_press事件,不执行release事件
代码:
eBox_STM32F1.zip
(13.93 MB, 下载次数: 54)
2017-7-9 13:26 上传
点击文件名下载附件
我说的不是双击,而是在长按事件发生后,继续按着键,会不会每隔一段时间产生一个事件,我自己叫这个事件为“连击”。。。
谢谢分享。
这个可以有~~~~
一周热门 更多>