将int变量放入数组中
Putting int variable into Array
所以我在圣诞节买了一个Arduino,做了一个简单的3 LED电路,并为它制作了2个动画。
我想让代码更干净,并增加动画与任何LED一起工作的可能性,而无需向动画功能添加更多代码。
我想到的一种方法(我从未使用过C++/C#)是使用一个存储LED变量的数组/字典,并通过循环遍历数组/字典来点亮LED。我该怎么做?这可能吗?
我现在有这个:
std::map<std::char, std::int> x = {{led, 9}, {led2, 6}, {led3, 5}};
CCD_ 1是用于LED的跳线插入的位置。
很抱歉,如果这一切都是愚蠢和丑陋的,就像我说的,我从未使用过C#/C++,我只使用过RBX、Lua和Python。
首先,祝贺Arduino-它非常适合学习。
我现在有这个:
std::map<std::char, std::int> x = {{led, 9}, {led2, 6}, {led3, 5}};
你不需要所有这些来为Arduino上的一些LED设置动画。您只需使用字节数组或矢量来存储连接LED的引脚号,并根据这些值启动动画。或者,如果您想引用它们,例如Green_led1、Blue_led1。。您可以使用枚举,其中的值表示向量/数组中的位置。但最好不要使用字符串(或char)。
由于空间在Arduino上是有限的,因此最好习惯使用尽可能小的数据结构(在这种情况下,每个LED有1个字节,枚举不会占用空间)。
但为了更多的乐趣,你甚至可以做得更好:
根据您拥有的Arduino类型,您可以直接使用8-bit PORT
。这样,该字节中的每个位将表示相应LED的开/关状态。但更有趣的是一次将整个字节写入PORT
的能力。要设置动画,可以使用位偏移。请注意,Arduino引脚编号与AVR芯片上的引脚编号不同。
std::map<std::string, std::int> x = {{"led", 9}, {"led2", 6}, {"led3", 5}};
或者使用LED的枚举或仅使用数字
您可以按照以下方式进行编码:
#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 %dn", x[LedOne], x[LedTwo], x[LedThree]);
}
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 按字符值访问int数组
- 将 int 数组转换为 std::vector<int*>
- 比较if语句中的数组值和int值
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 在c++中获取两个大int,并将它们存储在数组中
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 有没有办法用 2D 数组 (int) 重载构造函数?
- 当大小未知时,如何迭代指向数组 (int*) 的指针?
- 接受来自函数的二维数组(int 类型)并将其返回到主函数
- 数组 + int 作为一个参数做什么
- 如何制作'bit'数组而不是数组'int'?
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 为[z][y][x]int定义数组int[x][y][z]有什么好处?
- 用Visual c++编写二维数组int[n][m]到HDF5文件
- 数组int未正确返回
- 将元素推送到动态分配的指针数组int C++
- 如何在另一个数组中插入多维数组(int而非char)
- 将数组(int*)设置为NULL是否释放其占用的内存
- C++如何将数组 int[10] push_back std::vector<int[10]>?