在Arduino中选择一个随机的pwm引脚
Pick a random pwm pin in Arduino
我想每次循环重复时选择一个随机PWM引脚。在Arduino UNO中具有PWM功能的引脚是:3,5,6,11,10,9。我尝试了rnd(),但它给了我一个范围内的线性值,与truerrandom . random(1,9)相同。
至少有两种方法。
第一种(可能也是最好的)方法是将这些值加载到一个大小为6的数组中,生成一个范围从0到5的数字,并从数组中该位置获取值。换句话说,伪代码如:
values = [3, 5, 6, 9, 10, 11]
num = values[randomInclusive(0..5)]
在实际实现伪代码方面,我会像这样看:
int getRandomPwmPin() {
static const int candidate[] = {3, 5, 6, 9, 10, 11};
static const int count = sizeof(candidate) / sizeof(*candidate);
return candidate[TrueRandom.random(0, count)];
}
也有一种简单的方法,那就是在一个范围内生成数字,然后简单地扔掉那些不符合你的规范的数字(即,返回并获得另一个)。这实际上是一种较差的方法,因为在某些情况下可能需要更长的时间才能得到合适的数字。从技术上讲,如果没有合适的值,它甚至可能需要无限长的(a)时间。
类似于(pseudo -code):
num = -1 // force entry into loop
while num is not one of 3, 5, 6, 9, 10, 11:
num = randomInclusive(3..11)
变成了:
int getRandomPwmPin() {
int value;
do {
value = TrueRandom.random(3, 12);
} while ((value == 4) || (value == 7) || (value == 8));
return value;
}
如前所述,前一种解决方案可能是最好的解决方案。我包括后者只是为了提供信息。
(a)是的,我知道。在足够长的时间范围内,统计数据几乎可以保证您将获得有用的值。别再对我的夸张大惊小怪了:-)
技巧是制作一个引脚列表,然后从列表中随机选择一个条目
int pins[]={3,5,6,11,10,9}
int choice = rnd() //in range 0-5
pin = pins[choice]
参见从范围生成随机整数以获得范围内的数字
相关文章:
- 使用std::mt19937从字符串中返回一个随机单词
- 如何生成一个随机的 n 位数,其中 n 是任意的
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- C++14 : 2 个随机生成器 - 一个有效,另一个无效
- 我将如何在 cpp 中生成一个随机且独特的标题
- 从C++数组中选择一个随机元素
- 随机自动点击器C++使用一个键进行开/关
- 如何将矩阵的行随机复制到内存中的另一个矩阵的过程并行化?
- 如何更改此notify_one以便它选择一个随机线程
- 为什么我的函数名称中会随机出现一个额外的字母
- 如何编写一个递归函数,以随机的方式混淆从0到6的数字
- C++ 在运行时选择一个随机对象
- 如何将 50 行和 50 列的二维数组编码为一个为元素随机分配星号的函数?
- C++ 制作一个随机数字/字母生成器,代码中有问题
- 将一个随机的字符序列和int序列解析为单独的向量
- 如何在C 程序中随机做一个
- C 从向量的子集返回一个随机值
- 如何创建一个随机访问式的Rreference以访问.RC文件中定义的资源
- 随机生成一个没有重复元素的枚举数组 (C++)
- 堆缓冲区溢出随机发生。对于一个简单的代码?(我是C++新手)