【问题标题】:Access Struct Array Data in Arduino在 Arduino 中访问结构数组数据
【发布时间】:2017-08-03 06:49:08
【问题描述】:

我正在努力创建和访问存储在 Arduino Uno 上的结构数组中的数据。

我对 C++/Arduino 不太熟悉,但在我看来,下面的内容应该可以工作。 灯光和其他东西都可以与其他代码一起使用,但在尝试使用 light[i] 更改灯光时不起作用。

可能与指针有关,但我仍然不确定何时/何地使用它们。

struct light
{
  byte k;
  byte r;
  byte g;
  byte b;
};

typedef struct light Light;

Light l1;
Light l2;
Light l3;

Light lights[3] = {l1, l2, l3};

void setup() {
    l1 = {0, 0, 0, 0};
    l2 = {0, 0, 0, 0};
    l3 = {0, 0, 0, 0};
}

void loop()
{
    l1 = {0, 0, 0, 0};
    l2 = {0, 0, 0, 0};
    l3 = {0, 0, 0, 0};


    //turn on different light every 3 seconds
    int i;

    if (millis() % 9000 < 3000) {
      i = 0;
    } else if ((millis() % 9000 >= 3000) && (millis() % 9000 < 6000)) {
      i = 1;
    } else {
      i = 2;
    }

    lights[i] = {255, 255,0, 0};

    // if this is uncommented l1 turns red
    //l1 = {255,255,0,0}

    //passes light data to DMX controller (works fine)
    ~turnOnlight(l1)
    ~turnOnLight(l2)
    ~turnOnLight(l3)
}

提前致谢。

【问题讨论】:

  • Arduino 实际上使用的是 C++,而不是 C。
  • 关于你的问题,能不能详细点?你的代码有什么问题?你有错误吗?崩溃?出乎意料的结果?还有什么?如果您还没有这样做,请read about how to ask good questions。
  • @Someprogrammerdude 哎呀,抱歉将编辑。 arduino/c/c++ 新手
  • 如果问题出在指针上,可能是因为没有。我在这个根本中看不到l1..l3的理由。执行lights[i] = ... 不会改变l1..l3 的内容,lights[] 是用它初始化的;它只是改变了lights[]。您可以随心所欲地更改lights[],但是在调用~turnOnlight(l1) 时,传递的l1 与以前相同。所以...改为通过lights[i]?即~turnOnlight(lights[i])
  • @Someprogrammerdude 我正在尝试更新每个灯中的数据,以便每 3 秒打开不同的灯。基本上,每三秒,我将更改为 0、1 或 2,我想用它来访问索引 i 灯数组中的结构。代码可以编译,但 l1、l2、l3 中的值没有更新

标签: c++ arrays struct arduino


【解决方案1】:

您可能希望您的数组指向各自的灯,那么您需要 Light* lights[3] = {&l1,&l2, &l3} 并且在访问数组成员时,您必须像这样取消引用 *lights[i ] = {255, 255,0, 0};

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 2021-11-30
    • 1970-01-01
    • 2018-06-08
    • 2017-01-28
    • 2021-09-20
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    相关资源
    最近更新 更多