3

我正在尝试将 struct 与 Arduino 一起使用,我是初学者,我不知道如何在 struct 中声明一个数组并使用它(int pin[5]int vecinos[6])。

typedef struct
{
  int id;
  int pin[5];
  int tiempoCero;
  int tiempoApagado;
  int estado;
  int vecinos[6];
} zonas;

zonas zona[5];
4

3 回答 3

8

你的声明没问题。但是您需要了解 Arduino IDE 会自动为您生成函数原型。不幸的是,IDE 做得很差。它在声明之前将生成的原型排序到顶部。因此,您不能在任何函数定义中使用它们。除非您阻止 IDE 自动生成原型。

我找到了三种方法来实现这一点:

  1. 将您的函数放入命名空间,即使在 INO 文件中,您也可以完全控制。
  2. 将您的函数移动到包含文件中
  3. 将您的函数包装到一个宏中,这样 IDE 就不再将其识别为一个函数。例如像TRICK17 宏

对于小文件,我首选的解决方案是#1。你的草图将是

namespace whatever {
    typedef struct 
    {
      int id;
      int pin[5];
      int tiempoCero;
      int tiempoApagado;
      int estado;
      int vecinos[6];
    } zonas;

    function example(zonas z) {
        ...
    }
}

void setup() { 
    ... 
}
void loop() { 
    whatever::zonas z;
    ...
    whatever::example(z);
}

对于一个广泛的例子看这里。

于 2013-10-11T06:05:21.723 回答
3

我建议避免直接在 .ino 文件中进行编码,除非它真的是几行。对于其他任何事情,只需创建单独的 .h 和 .c/.cpp 文件。这也将允许通过在 PC 上编译和运行来测试所有/部分代码。

通常我有一个简单的 project.cpp 文件,我会在其中创建一个 project.ino 符号链接。然后在单独的 .cpp/.h 文件对中编写所有代码,包括从 setup() 和 loop() 调用的入口点。

于 2015-01-14T10:15:30.400 回答
-1

你声明的方式很好。为了访问 pin 数组(对于 vecinos 也是如此):

for (int i = 0; i < 5; i++) {
  zona[0].pin[i] = i;
}
于 2013-10-10T23:59:03.023 回答