使用Arduino定制枚举类型声明

时间:2013-07-22 19:59:17

标签: c types arduino avr

我在Arduino中使用自定义枚举类型时遇到了一些麻烦。

我已阅读elsewhere由于Arduino IDE预处理,使用头文件是自定义类型声明所必需的。所以,我已经做到了,但我还是无法使用我的自定义类型。这是我的主要arduino文件(beacon.ino)中代码的相关部分

#include <beacon.h>

State state;

在beacon.h中:

typedef enum {
  menu,
  output_on,
  val_edit
} State;

但是,当我尝试编译时,我收到以下错误:

beacon:20: error: 'State' does not name a type

我认为我编写或包含头文件的方式有问题。但是什么?

1 个答案:

答案 0 :(得分:3)

beacon.h应如下:

/* filename: .\Arduino\libraries\beacon\beacon.h */

typedef enum State{  // <-- the use of typedef is optional
  menu,
  output_on,
  val_edit
};

/* filename: .\Arduino\beacon\beacon.ino */
#include <beacon.h>
State state; // <-- the actual instance
void setup()
{
  state = menu; 
}

void loop()
{
  state = val_edit;
}

当你在主INO文件中实例化时,将typdef保留为out并且关闭“state”的尾随实例,或者反之。上面的beacon.h文件需要位于用户目录。\ Arduino \ libraries \ beacon \目录,需要重启IDE以缓存其位置。

但你可以在INO

中定义它并立即实例化它
/* filename: .\Arduino\beacon\beacon.ino */

enum State{
  menu,
  output_on,
  val_edit
} state; // <-- the actual instance, so can't be a typedef

void setup()
{
  state = menu;
}

void loop()
{
  state = val_edit;
}

两者编译都很好。

您还可以使用以下内容:

/* filename: .\Arduino\beacon\beacon2.ino */

typedef enum State{ // <-- the use of typedef is optional.
  menu,
  output_on,
  val_edit
};

State state; // <-- the actual instance

void setup()
{
  state = menu;
}

void loop()
{
  state = val_edit;
}

此处实例与枚举分开,允许枚举仅为typedef。上面是一个实例,而不是typedef。