我有一系列继电器,我用一个连接到电磁阀的arduino控制,电磁阀反过来控制管道系统周围的水流。继电器将按照以下方式定期切换: 继电器1和3高 等13秒 继电器2和4高 等17秒 继电器1和3低 等13秒 继电器2和4低 等待300秒 重复
我从一系列简单的延迟命令开始:
#include <DmxMaster.h>
void setup() {
DmxMaster.maxChannel(8);
}
void loop() {
delay(300000);
DmxMaster.write(1,HIGH);
DmxMaster.write(7,HIGH);
delay(13000);
DmxMaster.write(2,HIGH);
DmxMaster.write(8,HIGH);
delay(17000);
DmxMaster.write(1,LOW);
DmxMaster.write(7,LOW);
delay(13000);
DmxMaster.write(2,LOW);
DmxMaster.write(8,LOW);
}
大部分时间都有效,但我会看到它跳过一个或多个延迟线并跳转到下一步的情况。我开始研究最长延迟(300s)的毫秒功能,并得出以下内容,但我想知道如何实现这一目标以缩短延迟时间,如果这有任何改进的话:
#include <DmxMaster.h>
unsigned long currentTime;
unsigned long loopTime;
void setup()
{
DmxMaster.maxChannel(8);
currentTime = millis();
loopTime = currentTime;
}
void loop()
{
currentTime=millis();
if(currentTime >= (loopTime + 300000)){
DmxMaster.write(1,HIGH);
DmxMaster.write(7,HIGH);
delay(13000);
DmxMaster.write(2,HIGH);
DmxMaster.write(8,HIGH);
delay(17000);
DmxMaster.write(1,LOW);
DmxMaster.write(7,LOW);
delay(13000);
DmxMaster.write(2,LOW);
DmxMaster.write(8,LOW);
loopTime = currentTime;
}
}
提前致谢, 卡梅伦
答案 0 :(得分:0)
在我自己的项目中,我有相同的约束条件:我需要检查传感器,获取数据,分析数据并选择不同时间间隔的操作。
我找到的最佳解决方案是ChibiOS/RT。它是由意法半导体的Giovanni Di Sirio开发的实时操作系统(RTOS)。
它已被Bill Greiman移植到Arduino上,可在Github上找到:ChibiOS-Arduino。
它非常易于使用,文档记录很少,内存和大小都很小。
我在机器人项目Moti中使用它,您可以查看是否需要,但Bill有很多great examples。
一开始可能看起来有点过头了,但是一旦你习惯了它,你就会想知道为什么你之前没有使用它,而你正在研究的每个Arduino项目都会有一个新的维度。
希望这会有所帮助:)