随机选择输入引脚

时间:2017-05-22 07:21:43

标签: c++ random pixels

我在这方面颇有新意,并且在相对简单的事情上打了一堵砖墙。我附上了以下代码。我想输入引脚8来随机选择输入引脚1-7并且不知道要写它

Worksheets("MySheetName").Range("A2:A16").NumberFormat = "hh:mm;@"

1 个答案:

答案 0 :(得分:0)

从代码中最容易的变化是创建一个接受pin-number的函数,如果在循环函数中检测到引脚为低电平,则调用该函数。在新功能内部,使用开关将引脚编号映射到所需的操作。如果是引脚8,请使用随机选择的引脚编号调用该功能。

要获取随机数,最简单的方法是从连续范围中进行选择。如果无法做到这一点,您可能希望通过数组std::array<4> mapping{ 2, 7, 12, 103 };将随机数映射到分散值,以便在这些数字之间进行选择。

void doAction(int pin)
{
    switch (pin)
    {
        case 2: skip(150, 0, 150, 250, sw2); return;
        ...
    }
}

void loop(std::uniform_int_distribution<>& dis, std::mt19937& gen) 
{
    if (digitalRead(sw2) == LOW) doAction(2);
    ...
    if (digitalRead(sw8) == LOW) doAction(dis(gen));
}                       

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 7);

    while (true)
    {
        loop(dis, gen);
    }
}                                                                                                              

有更好的方法可以将动作映射到引脚,但它们需要更多更改:将检测到的引脚映射到引脚号,std::map<int,std::function<void(int)>使用lambdas,...