不能做嵌套函数,有什么办法吗?

时间:2017-04-18 03:13:27

标签: c++ c arduino nested

我正在使用Arduino IDE,它不允许嵌套函数,或者在声明函数之前调用函数(它不会跳转到找到它)。 在我的代码中,我需要一个或另一个.. 此外,使它成为一个大功能是行不通的,因为当我检查回早期的传感器时,我必须写下如果是,如果没有一遍又一遍地做什么。 在这里,我试图感知光,如果有光,则转到PIR传感器,如果没有,再次运行光传感器。现在如果PIR在3.5秒内检测到两次动作,检查颜色,如果没有,检查光线。 现在,颜色会感知颜色并对其进行分类(r g或b)。现在它再次检查PIR,如果有移动,它再次检查颜色并再次检查pir。现在,如果pir没有感知到移动,它就会发送到连续的行......

我在使用它们之前声明了一些功能(打印线),但其中一些不是因为我陷入了循环。 当我检查光线时,如果它是正的,我运行PIR,所以我需要在ligth之前声明pir功能。但在pir,如果它是负的(没有运动),我运行光传感器,这意味着我应该在pir之前声明光传感器。 我陷入了那个循环......

    List<List<King>> conflicts = kings.stream()
                                      .flatMap(k1 -> subStream(kings, k1) 
                                               .map(k2 -> Arrays.asList(k1, k2)))
                                      .filter(kingPair -> threatensEachother(kingPair))
                                      .collect(Collectors.toList());
    }


private static Stream<King> subStream(List<King> kings, King k1) {
    return kings.subList(kings.indexOf(k1) + 1, kings.size()).stream();
}

private static boolean threatensEachother(List<King> kingPair) {
      List<Square> k1Squares = getThreatenedSquares(kingPair.get(0).getLocation());
      List<Square> k2Squares = getThreatenedSquares(kingPair.get(1).getLocation());
    return sqauresOverlap(k1Squares, k2Squares);
}

private static boolean squaresOverlap(List<Squares> k1Squares, List<Squares> k2Squares) {
    return k1Squares.stream()
                    .anyMatch(k1Square -> k2Squares.contains(k1Square).
}

1 个答案:

答案 0 :(得分:0)

您可以在定义函数之前声明它:

void setup();

然后你可以打电话给它:

setup();

...稍后在文件中你可以写出它的定义:

void setup() { 
    // implementation here
}
相关问题