将int变量放入Array中

时间:2015-12-26 15:14:26

标签: c++ arrays arduino associative-array

所以我得到了一个圣诞节的Arduino并制作了一个简单的3 LED电路并为它制作了2个动画。

我希望使代码更清晰,并为动画增加使用任何LED的可能性,而无需向动画功能添加更多代码。

我想到这样做的方式(我从未使用过C ++ / C#)是使用存储LED变量的数组/字典,并通过循环遍历数组/字典使LED亮起。我该怎么做?它甚至可能吗?

我目前得到了这个:

std::map<std::char, std::int> x = {{led, 9}, {led2, 6}, {led3, 5}};

int是插入LED的跨接电缆的地方。

很抱歉,如果这一切都是愚蠢和丑陋的,就像我说的那样,我从未使用过C#/ C ++,我只使用过RBX,Lua和Python。

3 个答案:

答案 0 :(得分:2)

首先,祝贺Arduino - 它非常适合学习。

  

我现在有这个:

     

std::map<std::char, std::int> x = {{led, 9}, {led2, 6}, {led3, 5}};

您不需要所有这些来为Arduino上的某些LED设置动画。您可以使用字节数组或向量来存储LED连接的引脚号,并根据这些值启动动画。或者,如果您想使用例如Green_led1,Blue_led1,...来引用它们,您可以使用枚举,其中值将表示向量/数组中的位置。但最好不要使用字符串(或字符串)。

由于空间在Arduino 上受限,因此最好习惯使用尽可能小的数据结构(在这种情况下,每个LED 1个字节,枚举不会占用空间)。

但你甚至可以做得更好,为了更多的乐趣:

根据您拥有的Arduino类型,您可以直接使用8-bit PORT。这样,该字节中的每个位都代表相应LED的开/关状态。但更有趣的是能够将整个字节一次写入PORT。要制作动画,您可以使用位移。请注意,Arduino引脚编号与AVR-chip上的引脚编号不同。

答案 1 :(得分:1)

std::map<std::string, std::int> x = {{"led", 9}, {"led2", 6}, {"led3", 5}};  

或使用enum来获取LED或只是数字

答案 2 :(得分:1)

您可以编码如下:

#include <stdio.h>
#include <map>

int main()
{
    enum LedType {
      LedInvalid = 0,
      LedOne = 9,
      LedTwo = 6,
      LedThree = 5,
    };

    std::map<LedType, int> x = { { LedOne, 9 }, { LedTwo, 6 }, { LedThree, 5 } };
    printf("%d %d %d\n", x[LedOne], x[LedTwo], x[LedThree]);
}