Как подсчитать, сколько раз включался каждый светодиод?

#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) , чтобы упростить свой код.