我在这方面颇有新意,并且在相对简单的事情上打了一堵砖墙。我附上了以下代码。我想输入引脚8来随机选择输入引脚1-7并且不知道要写它
Worksheets("MySheetName").Range("A2:A16").NumberFormat = "hh:mm;@"
答案 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,...