c++ - 你能确定 x 在 for() 循环中递增的时间吗?(初学者)
问题描述
我试图在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 是为除了微控制器之外的任何东西编写的......)
推荐阅读
- mongodb - 是否可以在 cosmos mongo db 上的多嵌套字段上创建索引?
- c++ - 有人可以解释为什么这段代码中的第二个输出是 a2a3 吗?
- api - 我想咨询一下 Google Drive 勒索软件相关的恢复
- vba - 在 MS Word 中使用公式识别/更改字段
- haskell - Haskell:将新类型视为字符串
- mysql - MySQL 说:#1064 - MySQL 触发器语法错误
- android - Parcelable 在将活动实例作为 putExtra 发送到另一个活动时遇到 IOException 写入可序列化对象错误
- google-analytics - 从 Google Analytics 切换到 Google Tagmanager
- javascript - 定义二维数组 Javascript
- c# - 将多个 byte[] 合并为一个多页 Base64