所以我得到了一个圣诞节的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。
答案 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]);
}