如果给定函数 1 中的参数为真,则尝试调用函数作为回调

问题描述

我目前正在从事一个涉及 Arduino Pro Micro 的小型副项目。目标是对某些按钮输入模式进行有效检测。我已经编写了按钮初始化和检测给定模式所需的所有功能。结果当前是由数组组成的字符串,最多可容纳四个输入。

短、长、短的按钮输入如下所示:Sp:Lp:Sp:Np。 (Np = 没有按下)。

因为我是面向对象的,所以我想添加这样的新潜在模式,并直接包含一个指向回调函数的指针作为参数:

Button1.addInputPattern(1,"Lp:sp:Lp:Np",*INSERT FUNCTION TO BE RUN IF PATTERN IS TRUE HERE*);

我在 .h 文件中的声明可能如下所示:

void addInputPattern(int patternNmbr,String pattern,callbackfunction functionToRun);

我也尝试像这样定义“回调函数”:

typedef void (*callbackFunction)(void);

我的最终目标是实现这样的功能

Button1.addInputPattern(1,mySys.resetServos);

.. 如果模式为真,将调用对象 mySys 的函数“resetServer”。 目前,我的模式检测如下所示:

case 5: // Check if one of the defined cases are true
      for (int i = 1; i <= 4; i++){
        if(inputResult == allPatterns[i]){ // Iterate through all four possible patterns
          patternDetected[i] = "True";
          patternFound = 1;
          FSM_state = 7;
        }
      }
      if(patternFound == 0){
        FSM_state = 6;
      }
      break;

此时,我的临时解决方案是这样的:

if(Button1.patternDetected[1] == "True"){
Serial.println("Yuchee!");
Button1.patternDetected[1] = "False";}

我已经尝试寻找更好的解决方案,但由于缺乏 OOP、回调函数和睡眠方面的经验,这使得这比我预期的要困难一些。 编辑:我的问题是:如何实现这个回调函数?它还必须调整模式编号:所以模式 Nr。 1 将不得不调用函数 1,模式 Nr。 2 应该调用函数 2,依此类推。

也许有更好的方法解决这个问题?

对此甚至想法的任何帮助都非常感谢!

如果需要,我也可以在这里发布我的整个代码(乱七八糟)。 干杯!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)