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

2019-12-27 18:42发布

本帖最后由 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事件
代码:

eBox_STM32F1.zip (13.93 MB, 下载次数: 54) 2017-7-9 13:26 上传 点击文件名下载附件

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。