#arduino #arduino-c
#arduino #arduino-c
Вопрос:
У меня есть функция, которая включает 1 случайный светодиод из 8 на основе случайно сгенерированного числа в диапазоне 256.
Мне нужно подсчитать, сколько раз включался каждый светодиод, и использовать это число, чтобы включить каждый светодиод столько раз, сколько он был включен случайным образом.
Я использую for
цикл, чтобы запустить его 100 раз:
for (int i = 0; i < 100; i) {
randomLED();
}
и это моя функция:
void randomLED() {
int index = random(256);
int del3 = 100;
if (index <= 31) {
digitalWrite(ledPins[0], HIGH);
delay(del3);
digitalWrite(ledPins[0], LOW);
}
else if (index >= 32 amp;amp; index <= 63) {
digitalWrite(ledPins[1], HIGH);
delay(del3);
digitalWrite(ledPins[1], LOW);
}
else if (index >= 64 amp;amp; index <= 95) {
digitalWrite(ledPins[2], HIGH);
delay(del3);
digitalWrite(ledPins[2], LOW);
}
else if (index >= 96 amp;amp; index <= 127) {
digitalWrite(ledPins[3], HIGH);
delay(del3);
digitalWrite(ledPins[3], LOW);
}
else if (index >= 128 amp;amp; index <= 159) {
digitalWrite(ledPins[4], HIGH);
delay(del3);
digitalWrite(ledPins[4], LOW);
}
else if (index >= 160 amp;amp; index <= 191) {
digitalWrite(ledPins[5], HIGH);
delay(del3);
digitalWrite(ledPins[5], LOW);
}
else if (index >= 192 amp;amp; index <= 223) {
digitalWrite(ledPins[6], HIGH);
delay(del3);
digitalWrite(ledPins[6], LOW);
}
else if (index >= 224 amp;amp; index <= 256) {
digitalWrite(ledPins[7], HIGH);
delay(del3);
digitalWrite(ledPins[7], LOW);
}
delay(del3);
randomSeed(analogRead(1));
}
Ответ №1:
Примерно так (непроверенный):
Создайте глобальный массив для подсчета частоты включения каждого светодиода, например:
int count[8] = {0};
В вашей randomLED()
функции, в каждом if (index
etc, увеличьте счетчик для каждого ledPins[x]
, где x
номер светодиода, вот так:
count[x] = 1;
Когда цикл будет завершен, вы посчитаете, как часто включался каждый светодиод.
Теперь вы можете использовать это число для мигания каждого светодиода:
for (int i = 0; i < 8; i ) {
for (int j = 0; j < count[i]; j ) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
delay(100);
}
}
Кроме того, не объявляйте индекс дважды:
int index;
index = random(256);
int index; // <====== Remove this line
Возможно, вы захотите рассмотреть возможность использования random(8)
вместо random(256)
, чтобы упростить свой код.