Random относительно ко времени.

Newageman
Offline
Зарегистрирован: 25.03.2017

Доброго всем времени суток.

Есть задача: у нас есть 10 светодиодов. Надо каждому из них задать случайное время включения и выключения в пределах 1-1000. Т.е. если светодиод включился на 35 и выключился на 28, то в следущий раз он включится, например, на 90 и выключится на 5 и т.д. И так применительно к каждому. Пытался найти ответ поиском, но не смог.

Есть код в котором хочется это реализовать, но лыжи не едут.

class Flasher
{
  int ledPin;
  long OnTime;
  long OffTime;
  int ledState;
  unsigned long previousMillis;
  public:
  Flasher(int pin, long on, long off)
  {
   ledPin = pin;
   pinMode(ledPin, OUTPUT);
   OnTime = on;
   OffTime = off;
   ledState = LOW;
   previousMillis = 0;
  }
  void Update()
  {
unsigned long currentMillis = millis();
 if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime))
  {
     ledState = LOW; 
     previousMillis = currentMillis;
     digitalWrite(ledPin, ledState);
   }
   else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime))
   {
     ledState = HIGH;
     previousMillis = currentMillis ;
     digitalWrite(ledPin, ledState);
   }
  }
};
Flasher led1(2, 10, 1);
Flasher led2(3, 35, 7);
Flasher led3(4, 30, 5);
Flasher led4(5, 25, 3);
Flasher led5(6, 50, 10);
Flasher led6(7, 17, 7);
Flasher led7(8, 40, 3);
Flasher led8(9, 30, 5);
Flasher led9(10, 27, 4);
Flasher led10(11, 70, 7);
void setup()
{
}
void loop()
{
  led1.Update();
  led2.Update();
  led3.Update();
  led4.Update();
  led5.Update();
  led6.Update();
  led7.Update();
  led8.Update();
  led9.Update();
  led10.Update();
}

Подскажите, пожалуйста, как добиться такой цели?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Newageman пишет:

Есть задача: у нас есть 10 светодиодов. Надо каждому из них задать случайное время включения и выключения в пределах 1-1000. 

Подскажите, пожалуйста, как добиться такой цели?

= (micros()/4)%999+1.  http://arduino.ru/Reference/Micros

class Cl_Flash {
  private:
    byte Led_pin;
    int led;
    uint32_t past = 0;
    uint32_t time;
  public:
    Cl_Flash(byte pin) {
      Led_pin = pin;
    };
    void setup() {
      pinMode(Led_pin, OUTPUT);
      past = millis();
      digitalWrite(Led_pin, led = 1);
      time = (micros() / 4) % 999 + 1;
    };
    void loop() {
      if (led && millis() - past >= time) {
        past = millis();
        digitalWrite(Led_pin, led = 0);
        time = (micros() / 4) % 999 + 1;
      }
      if (!led && millis() - past >= time) {
        past = millis();
        digitalWrite(Led_pin, led = 1);
        time = (micros() / 4) % 999 + 1;
      }
    };
};
Cl_Flash Led[] = {
  Cl_Flash(2),
  Cl_Flash(3),
  Cl_Flash(4),
  Cl_Flash(5),
  Cl_Flash(6),
  Cl_Flash(7),
  Cl_Flash(8),
  Cl_Flash(9),
  Cl_Flash(10),
  Cl_Flash(11)
};
void setup() {
  for (int i = 0; i < 10; i++)
    Led[i].setup();
}
void loop() {
  for (int i = 0; i < 10; i++)
    Led[i].loop();
}

 

Newageman
Offline
Зарегистрирован: 25.03.2017

Спасибо, добрый человек! То что надо.