gpt4 book ai didi

c - Arduino C 随机 LED 代码未打开所有 LED

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:16 27 4
gpt4 key购买 nike

我正在使用 Arduino Uno 软件进行编码,但遇到了问题。我试图以随机顺序打开 8 个 LED,然后立即将它们全部关闭。我的问题是 LED 会多次点亮相同的 LED,但最终不会全部点亮。这使得电路无法提供我正在寻找的效果。我一直在努力解决这个问题大约两个小时,并尝试了许多没有用的修复方法。这是我正在使用的代码:

void randomLED()
{
int i;
int index;
int delayTime;
int tracker;
int ledPin1 = ledPins[0];
int ledPin2 = ledPins[1];
int ledPin3 = ledPins[2];
int ledPin4 = ledPins[3];
int ledPin5 = ledPins[4];
int ledPin6 = ledPins[5];
int ledPin7 = ledPins[6];
int ledPin8 = ledPins[7];

boolean ledPinOne = digitalRead(ledPin1);
boolean ledPinTwo = digitalRead(ledPin2);
boolean ledPinThree = digitalRead(ledPin3);
boolean ledPinFour = digitalRead(ledPin4);
boolean ledPinFive = digitalRead(ledPin5);
boolean ledPinSix = digitalRead(ledPin6);
boolean ledPinSeven = digitalRead(ledPin7);
boolean ledPinEight = digitalRead(ledPin8);

for (i = 0; i < 8; i++) {

bailout:

index = random(8); // pick a random number between 0 and 7

if (ledPinOne != HIGH && index == 0 || ledPinTwo != HIGH && index == 1 || ledPinThree != HIGH && index == 2 || ledPinFour != HIGH && index == 3 || ledPinFive != HIGH && index == 4 || ledPinSix != HIGH && index == 5 || ledPinSeven != HIGH && index == 6 || ledPinEight != HIGH && index == 7){
digitalWrite(ledPins[index], HIGH); // turn LED on
}

delay(100); // pause to slow down
}

delay(1000);

for (i = 0; i < 8; i++){
digitalWrite(ledPins[i], LOW);
}
}

我有一个很大的 if 语句,因为我需要为每个 LED 开启设置单独的条件。这些条件是必需的,因为随机数生成器会两次打开相同的 LED,这是我不想要的。我希望将所有这些条件放入 if 语句中会使 LED 按我想要的方式运行。我已经尝试将 if 语句中的 == 和 != 更改为每个组合,但它仍然不起作用。我希望我能在这里找到并回答我的问题,这将解决我的问题。

最佳答案

您的代码存在多个问题。您选择了 8 个随机数,因为您希望最后点亮所有 8 个 LED,但是如果您两次获得相同的数字怎么办?因此,您必须以某种方式确保您选择的数字与尚未点亮的 LED 相对应。您的代码的另一个问题是您只在循环外读取每个 LED 引脚一次。因此,当您检查大型 if 语句中的每个引脚时,值都不是最新的。

这是解决这两个问题的快速但糟糕的方法:

int numberOfLEDsLit = 0;
while (numberOfLEDsLit < 8) {
int index = random(8);
int ledLit = digitalRead(ledPins[index]);
if (ledLit == LOW) {
digitalWrite(ledPinds[index], HIGH);
numberOfLEDsLit++;
}
}

基本上,您随机选择一个 LED,如果它没有点亮,则点亮它,否则什么都不做。继续,直到所有 8 个 LED 都亮起。

关于c - Arduino C 随机 LED 代码未打开所有 LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47021714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com