【发布时间】: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 中的值没有更新