【发布时间】:2016-01-29 01:08:39
【问题描述】:
我需要一些帮助,试图让计时器变得有点模糊。我想使用这样的固定时间间隔:
____|_______|____|_____|_________|_____|___|_______|
其中管道是事件发生,下划线是数组中的延迟,如下所示:
int myIntervals = { 1000, 2000, 750, 850, 1200, 850, 500, 1000};
但值是任意的。
我想为事件创建一个轻微的随机性,但不允许随机性影响整体时间:
___*|*_____*|*__*|*___*|*_______*|*___*|*_*|*_____*|
其中随机性被描述为星号所包含的时间。
所以事件总是在间隔 +- 随机延迟发生:
intfuzzyPeriod = random(-75, 75);
我已经对此进行了试验,但无济于事......当模糊周期为负时,我发现自己处于递归中,或者像这样我显然遇到了 millis() 溢出问题。
int sequence[] = {1000, 750, 950, 1150, 1200, 1500, 1000, 1900, 2000};
unsigned int index;
unsigned long startMillis = 0;
unsigned int fuzzy = sequence[0];
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (startMillis < millis()) // will have rollover issues <<<<<<<
{
if (millis() - startMillis >= fuzzy)
{
digitalWrite(13, !digitalRead(13));
startMillis += sequence[index]; // advance startMillis by the last interval used
index++;
if (index >= sizeof(sequence) / sizeof(sequence[0]))
{
index = 0;
Serial.println("Restarted Sequence");
}
fuzzy = sequence[index] + random(-75, 76); // arbitrary offset needs to be positive or negative
Serial.print("fuzzy = ");
Serial.println(fuzzy);
}
}
}
我希望我在解释方面做得很好......我这辈子都做不到,我知道我已经到了需要一点帮助的地步!
【问题讨论】:
-
我对arduino一无所知,但它可能有助于存储绝对计时值。例如。而不是您的 {1000,750,950,...} 存储 {1000,1750,2700,...}。然后将它们随机化(可能除了最后一个)并将差异计算为序列[index]-sequence[index-1]。
-
我考虑过,但是数据量要大一些,MCU的存储能力很小。