极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10586|回复: 3

请问一个Millis问题,Mills取代Delay而当掉的问题。

[复制链接]
发表于 2014-4-21 13:15:58 | 显示全部楼层 |阅读模式
如果您愿意可以帮我测试一下
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

int currentMillis;
int i=0;
int interval = 3000;   

void setup() {

Serial.begin(9600);

}

void loop() {
  Serial.println("CCCC");
  int startMillis = millis();
  for(int currentMillis = 1;currentMillis - startMillis < interval;)
  {currentMillis=millis();}
  Serial.println(i);
   i++;
}


^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我写的这个式子很奇怪
若 int interval = 1000;  跳到30次之后 就...狂跳。  
若 int interval = 2000;  跳到15次之后 就...狂跳。  
若 int interval = 3000;  跳到10次之后 就...狂跳。
若 int interval = 15000;  跳到2次之后 就...狂跳。
若 int interval = 30000;  就不会狂跳了。


我该怎么解决?? 让interval 不会狂跳...

请各位给个指引~~谢谢~~
回复

使用道具 举报

发表于 2014-4-21 13:47:59 | 显示全部楼层
注意类型匹配
  1. unsigned long currentMillis;
  2. int i=0;
  3. int interval = 3000;   

  4. void setup() {

  5. Serial.begin(9600);

  6. }

  7. void loop() {
  8.   Serial.println("CCCC");
  9.   unsigned long startMillis = millis();
  10.   for(currentMillis = millis();startMillis + interval > currentMillis;)
  11.   {currentMillis=millis();}
  12.   Serial.println(i);
  13.    i++;
  14. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-4-21 13:57:01 | 显示全部楼层
簡單一點也可以:
  1. unsigned long end_time = millis() + interval ;
  2. while (millis() < end_time);
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-21 14:38:36 | 显示全部楼层
聪明~~十分感谢.....谢谢各位....太感激啦~~
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 01:27 , Processed in 0.034787 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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