极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10591|回复: 6

如果要7口和9口同时启动,但是开关的时间不一样怎么写啊

[复制链接]
发表于 2013-12-26 11:26:49 | 显示全部楼层 |阅读模式
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口,怎么样可以同时启动呢???
回复

使用道具 举报

发表于 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);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-2 13:25:04 | 显示全部楼层
不是,
比方说7号口和8号口是同一时间启动的,但是周期不一样,
比方说7号口通电3分钟,8号口通电5分钟,
这个怎么做?
回复 支持 反对

使用道具 举报

发表于 2014-1-2 14:56:48 | 显示全部楼层
本帖最后由 i7456 于 2014-1-2 14:57 编辑
Xiangtao 发表于 2014-1-2 13:25
不是,
比方说7号口和8号口是同一时间启动的,但是周期不一样,
比方说7号口通电3分钟,8号口通电5分钟, ...


  1. int D7 =  7;      
  2. int D8 =  8;      
  3. long conterD7 = 0;
  4. long conterD8 = 0;
  5.          
  6. long previousMillis = 0;        
  7. long interval = 1000;           

  8. void setup() {
  9.   // set the digital pin as output:
  10.   pinMode(D7, OUTPUT);   
  11.   pinMode(D8, OUTPUT);   
  12. }

  13. void loop()
  14. {

  15.   unsigned long currentMillis = millis();

  16.   if(currentMillis - previousMillis > interval)
  17.   {
  18.     previousMillis = currentMillis;   

  19.     conterD7++;
  20.     conterD8++;

  21.     if(conterD7>3*60)
  22.       digitalWrite(D7, LOW);
  23.     else digitalWrite(D7, HIGH);

  24.     if(conterD8>5*60)
  25.       digitalWrite(D8, LOW);
  26.     else digitalWrite(D8, HIGH);
  27.          
  28.   }
  29. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-1-2 14:59:51 | 显示全部楼层
本帖最后由 Lance 于 2014-1-2 15:05 编辑

  1. uint32_t count1 = 0;
  2. uint32_t count2 = 0;

  3. void loop()
  4. {
  5.   if(count1 == 0)
  6.     digitalWrite(9,HIGH);
  7.   else if(count1 == 240000)
  8.     digitalWrite(9,LOW);
  9.   else if(count1 == (240000+1))
  10.     count1 = 0;

  11.   if(count2 == 0)
  12.     digitalWrite(7,HIGH);
  13.   else if(count2 == 120000)
  14.     digitalWrite(7,LOW);
  15.   else if(count2 == (120000+1200000))
  16.     count2 = 0;

  17.   delay(1);
  18.   count1++;
  19.   count2++;
  20. }
复制代码
啊哈, 和楼上想法差不多, 不过慢了一步.
回复 支持 反对

使用道具 举报

发表于 2014-1-2 15:00:53 | 显示全部楼层
如果有这样的情况,建议你维护一个数据结构来完成。比如:一个循环链表,每个节点表示一个时间点需要做的事情,然后根据自己算自己插入操作内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-3 12:05:29 | 显示全部楼层
真是学到了,谢谢大家!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 19:25 , Processed in 0.036955 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表