如果要7口和9口同时启动,但是开关的时间不一样怎么写啊
void setup()// put your setup code here, to run once:
{
pinMode(7,OUTPUT);//use out7
pinMode(9,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(9,HIGH);//pump start 30secondes for working
delay(240000);
digitalWrite(9,LOW);//pump wait 30mins for security
delay(1);
digitalWrite(7,HIGH);//pump start 30secondes for working
delay(120000);
digitalWrite(7,LOW);//pump wait 30mins for security
delay(1200000);
我这样写,9口控制的完了才是7口,怎么样可以同时启动呢??? 不是很清楚你的意思。
1.7口和9口硬件上合并用一个口,解决
2.频率很快,可认为是同时 百万分之机秒的差距。
digitalWrite(9,HIGH);//pump start 30secondes for working
digitalWrite(7,HIGH);//pump start 30secondes for working
delay(240000);
digitalWrite(9,LOW);//pump wait 30mins for security
digitalWrite(7,LOW);//pump wait 30mins for security
delay(1); 不是,
比方说7号口和8号口是同一时间启动的,但是周期不一样,
比方说7号口通电3分钟,8号口通电5分钟,
这个怎么做? 本帖最后由 i7456 于 2014-1-2 14:57 编辑
Xiangtao 发表于 2014-1-2 13:25 static/image/common/back.gif
不是,
比方说7号口和8号口是同一时间启动的,但是周期不一样,
比方说7号口通电3分钟,8号口通电5分钟, ...
int D7 =7;
int D8 =8;
long conterD7 = 0;
long conterD8 = 0;
long previousMillis = 0;
long interval = 1000;
void setup() {
// set the digital pin as output:
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
conterD7++;
conterD8++;
if(conterD7>3*60)
digitalWrite(D7, LOW);
else digitalWrite(D7, HIGH);
if(conterD8>5*60)
digitalWrite(D8, LOW);
else digitalWrite(D8, HIGH);
}
}
本帖最后由 Lance 于 2014-1-2 15:05 编辑
uint32_t count1 = 0;
uint32_t count2 = 0;
void loop()
{
if(count1 == 0)
digitalWrite(9,HIGH);
else if(count1 == 240000)
digitalWrite(9,LOW);
else if(count1 == (240000+1))
count1 = 0;
if(count2 == 0)
digitalWrite(7,HIGH);
else if(count2 == 120000)
digitalWrite(7,LOW);
else if(count2 == (120000+1200000))
count2 = 0;
delay(1);
count1++;
count2++;
}
啊哈, 和楼上想法差不多, 不过慢了一步.
如果有这样的情况,建议你维护一个数据结构来完成。比如:一个循环链表,每个节点表示一个时间点需要做的事情,然后根据自己算自己插入操作内容 真是学到了,谢谢大家!
页:
[1]