Xiangtao 发表于 2013-12-26 11:26:49

如果要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口,怎么样可以同时启动呢???

yyy_zc 发表于 2013-12-26 12:24:51

不是很清楚你的意思。
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);

Xiangtao 发表于 2014-1-2 13:25:04

不是,
比方说7号口和8号口是同一时间启动的,但是周期不一样,
比方说7号口通电3分钟,8号口通电5分钟,
这个怎么做?

i7456 发表于 2014-1-2 14:56:48

本帖最后由 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 14:59:51

本帖最后由 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++;
}
啊哈, 和楼上想法差不多, 不过慢了一步.

zoologist 发表于 2014-1-2 15:00:53

如果有这样的情况,建议你维护一个数据结构来完成。比如:一个循环链表,每个节点表示一个时间点需要做的事情,然后根据自己算自己插入操作内容

Xiangtao 发表于 2014-1-3 12:05:29

真是学到了,谢谢大家!
页: [1]
查看完整版本: 如果要7口和9口同时启动,但是开关的时间不一样怎么写啊