搜索
bottom↓
回复: 9

【eBox生态圈】IO事件驱动,支持边沿触发,软件滤波,按键模式

[复制链接]

出0入17汤圆

发表于 2017-7-9 13:26:16 | 显示全部楼层 |阅读模式
本帖最后由 shentqlf 于 2017-7-9 13:32 编辑

EventGpio方法将GPIO更高级别的集成实现了事件驱动
配合EventManager方法,让Gpio更好用

使用方法
1、编写IO触发的事件函数,即IO被触发后要执行的用户程序
  1. void neg()
  2. {
  3.     uart1.println("neg");
  4. }
  5. void pos()
  6. {
  7.     uart1.println("pos");
  8. }
  9. void high()
  10. {
  11.     uart1.println("high");
  12. }
  13. void click()
  14. {
  15.     uart1.println("click");
  16. }
  17. void release()
  18. {
  19.     uart1.println("release");
  20. }
  21. void long_press()
  22. {
  23.     uart1.println("long");
  24. }
  25. void click1()
  26. {
  27.     uart1.println("click1");
  28. }
  29. void release1()
  30. {
  31.     uart1.println("release1");
  32. }
  33. void long_press1()
  34. {
  35.     uart1.println("long1");
  36. }
复制代码


2、创建对应引脚的对象和事件管理器

  1. EventGpio event_io_1(&PA8,0,0,0,0,click,release,0);
  2. EventGpio event_io_2(&PB1,0,0,0,neg,click1,release1,long_press1);
  3. EventManager io_manager;
复制代码


3、初始化IO对象,并将IO对象添加到管理器中

  1. void setup()
  2. {
  3.     ebox_init();
  4.     uart1.begin(115200);
  5.     event_io_1.begin(1);
  6.     event_io_2.begin(1);
  7.     io_manager.add(&event_io_1);
  8.     io_manager.add(&event_io_2);
  9. }
复制代码


4、在main函数中调用管理器的进程,如果有操作系统可以将此进程放至系统任务中,每隔1ms或者10ms执行一次。
  1. int main(void)
  2. {
  3.     setup();

  4.     while(1)
  5.     {
  6.         io_manager.process();
  7.         delay_ms(1);
  8.     }
  9. }
复制代码


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事件
代码:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-7-9 16:14:46 | 显示全部楼层
有更新了,给力!

出0入17汤圆

 楼主| 发表于 2017-7-9 16:24:44 | 显示全部楼层
cdlxzlp 发表于 2017-7-9 16:14
有更新了,给力!

更新经常有,但是没办实时通知,大家只能经常关注eBox的GitHub和论坛了

出0入0汤圆

发表于 2017-7-9 18:34:30 来自手机 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2017-7-10 09:46:16 | 显示全部楼层
噜噜噜噜噜              

出0入8汤圆

发表于 2017-7-10 10:16:29 | 显示全部楼层
楼主按键模式里还有一个常用的状态是“连击”,在你楼主位的描述中好像没体现出来,支持否?

出0入17汤圆

 楼主| 发表于 2017-7-10 10:23:11 | 显示全部楼层
Jmhh247 发表于 2017-7-10 10:16
楼主按键模式里还有一个常用的状态是“连击”,在你楼主位的描述中好像没体现出来,支持否? ...

双击没有支持,只是支持了长按

出0入8汤圆

发表于 2017-7-10 10:29:30 | 显示全部楼层
哈哈,尴尬啊,我没有表达清楚

我说的不是双击,而是在长按事件发生后,继续按着键,会不会每隔一段时间产生一个事件,我自己叫这个事件为“连击”。。。

出0入0汤圆

发表于 2017-7-10 10:45:32 | 显示全部楼层
有时间看看楼主代码。
谢谢分享。

出0入17汤圆

 楼主| 发表于 2017-7-10 10:51:51 | 显示全部楼层
Jmhh247 发表于 2017-7-10 10:29
哈哈,尴尬啊,我没有表达清楚

我说的不是双击,而是在长按事件发生后,继续按着键,会不会每隔 ...

这个可以有~~~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 06:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表