c++ - Arduino UNO 解决多个重叠的计时器循环
问题描述
我一直在写两个重叠的循环来切换泵继电器。如果定时器“delayPump”结束(LOW),定时器“runnningPump”(HIGH)应该启动。
我猜有些数学上的疯狂,老实说这个循环已经让我发疯了,因为它应该很容易!!!!
有什么线索吗??
#define pumpSwitch_1 8
int delayPump = 10000; //delay time
int runnningPump = 5000; // running Timer
bool pumpState = LOW;
unsigned long TimerPump = 0;
unsigned long TimerDelay = 0;
void setup() {
pinMode(pumpSwitch_1, OUTPUT);
digitalWrite(pumpSwitch_1, LOW);
TimerPump = millis();
TimerDelay = millis();
}
void loop() {
digitalWrite(pumpSwitch_1, pumpState);
if (pumpState == HIGH){
if((millis() - TimerPump) >= runnningPump){
pumpState = LOW;
TimerPump = millis() + delayPump;
}
}else {
if((millis() - TimerDelay) >= delayPump){
pumpState = HIGH;
TimerDelay = millis() + runnningPump;
}
}
}
解决方案
我认为这是你需要的:
您只需要一个Timer
变量,每次切换状态时,将其设置为当前时间,即millis()
.
#define pumpSwitch_1 8
int delayPump = 10000; //delay time
int runnningPump = 5000; // running Timer
bool pumpState = LOW;
unsigned long Timer = 0;
void setup() {
pinMode(pumpSwitch_1, OUTPUT);
digitalWrite(pumpSwitch_1, LOW);
Timer = millis();
}
void loop() {
digitalWrite(pumpSwitch_1, pumpState);
if (pumpState == HIGH) {
if ((millis() - Timer) >= runnningPump) {
pumpState = LOW;
Timer = millis();
}
} else {
if ((millis() - Timer) >= delayPump) {
pumpState = HIGH;
Timer = millis();
}
}
}
推荐阅读
- html - 如何在 pdf 的每一页上重复水印图片,该 pdf 是从包含几个 page-break-before/after 的 html doc 转换而来的?
- android - 由于 Firebase 尝试在只读数据库中写入崩溃报告,应用程序崩溃
- python - 最长的字母子串 - 从哪里开始
- android - 为什么 Android Studio 忽略 git repo 中的文件以及如何从 git 导入项目?
- php - Guzzle(cURL?) 在服务器和本地的行为不同
- syncfusion - 清除/重置 Syncfusion gridcontrol 剪贴板
- python - 如何从特定地理位置获取 twitter 用户屏幕名称或 UserId?
- kubernetes - Kubenates RunAsUser 被禁止
- python - Python IBM Watson NLU 情感分析 - TypeError: cannot convert dic
- c# - 依赖注入 IDbConnection SqlConnection