Random относительно ко времени.
- Войдите на сайт для отправки комментариев
Вс, 26/03/2017 - 00:13
Доброго всем времени суток.
Есть задача: у нас есть 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();
}
Подскажите, пожалуйста, как добиться такой цели?
Есть задача: у нас есть 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(); }Спасибо, добрый человек! То что надо.