将int变量放入数组中

3
所以我收到了一份圣诞礼物——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。


1
std::map<char,int> - Sergey Kalinichenko
ledled2等是什么?根据这个基本问题的答案,发布的问题的答案可能是:std::map<std::string, std::int> x = {{"led", 9}, {"led2", 6}, {"led3", 5}};或者是dasblinkenlight建议的内容,也可能是类似的其他更改。 - JSF
你是在使用C++还是C#?它们是不同的编程语言。C#有垃圾回收机制,而且没有指针。C++语言没有垃圾回收机制,可以使用指针来访问硬件寄存器。 - Thomas Matthews
3个回答

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位端口。这样,该字节中的每个位都将表示相应LED的开/关状态。但更有趣的是能够一次写入整个字节到端口。为了进行动画处理,您可以使用位移。只需注意Arduino引脚号码与您的AVR芯片上的引脚号码不同即可。


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

或者使用枚举类型来表示LED,或者直接使用数字。

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]);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接