你能计算出 x 在 for() 循环中递增的时间吗? (初学者)
Can you time when x increments within a for() loop? (Beginner)
我试过像下面这样实现 millis();
,但每个变体都失败了。
void ledMode(byte mode)
{
unsigned long currentTime = millis();
if (currentTime - previousTime >= Interval)
{
switch (mode)
{
case 1:
digitalWrite(RLED, HIGH); //Red
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
Serial.println("Red!");
previousTime = currentTime;
break;
case 2:
digitalWrite(RLED, LOW); //Green
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
Serial.println("GREEN!");
previousTime = currentTime;
break;
case 3:
digitalWrite(RLED, LOW); //blue
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
Serial.println("BLUE!");
previousTime = currentTime;
break;
case 4:
digitalWrite(RLED, HIGH); //orange
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
Serial.println("ORANGE!");
previousTime = currentTime;
mode = 5;
break;
case 5:
digitalWrite(RLED, LOW); //teal
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
Serial.println("TEAL!");
previousTime = currentTime;
break;
case 6:
digitalWrite(RLED, HIGH); //purple
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
Serial.println("PURPLE!");
previousTime = currentTime;
break;
case 7:
digitalWrite(RLED, HIGH); //white
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
Serial.println("WHITE!");
previousTime = currentTime;
break;
}
}
}
void RGBoff()
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
}
void loop()
{
button();
if (count % 2 == 1)
{
unsigned long currentTime = millis();
for (byte x = 1; x < 8;)
{
ledMode(x);
if (currentTime - previousTime >= Interval)
{
Serial.println(x);
previousTime = currentTime;
x++;
}
}
}
}
我希望 x 每 1000 毫秒增加一次...
如有任何帮助或建议,我们将不胜感激!
你可以做这样的事情,但你的代码不能。它不会等待直到你想要的时间过去,它只是检查——如果没有发生,它就继续:这就是你实现的!
这看起来很像 arduino 代码(这不仅仅是 C++,它使用 Arduino 功能;确保你可以从框架中分辨出语言!),所以你应该使用 arduino 的工具来延迟,或者,更多更好的是,使用你的微控制器的定时器硬件在正确的时间执行事情(不知道 Arduino 是否允许这样做——我经常认为 arduino 是为任何 但 微控制器编写的......)
我试过像下面这样实现 millis();
,但每个变体都失败了。
void ledMode(byte mode)
{
unsigned long currentTime = millis();
if (currentTime - previousTime >= Interval)
{
switch (mode)
{
case 1:
digitalWrite(RLED, HIGH); //Red
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
Serial.println("Red!");
previousTime = currentTime;
break;
case 2:
digitalWrite(RLED, LOW); //Green
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
Serial.println("GREEN!");
previousTime = currentTime;
break;
case 3:
digitalWrite(RLED, LOW); //blue
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
Serial.println("BLUE!");
previousTime = currentTime;
break;
case 4:
digitalWrite(RLED, HIGH); //orange
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
Serial.println("ORANGE!");
previousTime = currentTime;
mode = 5;
break;
case 5:
digitalWrite(RLED, LOW); //teal
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
Serial.println("TEAL!");
previousTime = currentTime;
break;
case 6:
digitalWrite(RLED, HIGH); //purple
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
Serial.println("PURPLE!");
previousTime = currentTime;
break;
case 7:
digitalWrite(RLED, HIGH); //white
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
Serial.println("WHITE!");
previousTime = currentTime;
break;
}
}
}
void RGBoff()
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
}
void loop()
{
button();
if (count % 2 == 1)
{
unsigned long currentTime = millis();
for (byte x = 1; x < 8;)
{
ledMode(x);
if (currentTime - previousTime >= Interval)
{
Serial.println(x);
previousTime = currentTime;
x++;
}
}
}
}
我希望 x 每 1000 毫秒增加一次...
如有任何帮助或建议,我们将不胜感激!
你可以做这样的事情,但你的代码不能。它不会等待直到你想要的时间过去,它只是检查——如果没有发生,它就继续:这就是你实现的!
这看起来很像 arduino 代码(这不仅仅是 C++,它使用 Arduino 功能;确保你可以从框架中分辨出语言!),所以你应该使用 arduino 的工具来延迟,或者,更多更好的是,使用你的微控制器的定时器硬件在正确的时间执行事情(不知道 Arduino 是否允许这样做——我经常认为 arduino 是为任何 但 微控制器编写的......)