新手刚接触millis不久,请问使用millis函数可以实现以下blink...-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: Hitomi21

[已解决] 新手刚接触millis不久,请问使用millis函数可以实现以下blink...

[复制链接]
 楼主| 发表于 2020-9-3 03:27 | 显示全部楼层
Hitomi21 发表于 2020-9-3 03:24
是打错了pinMode,后面补回去就好了。

现在有个新问题,就是我照着代码加了几个led灯组,然后开始乱闪了 ...

还有就是,1和2,3和4,两组两组单独拿出来做是正常的,1234全放一起就不行了
发表于 2020-9-3 06:47 | 显示全部楼层
Hitomi21 发表于 2020-9-3 03:24
是打错了pinMode,后面补回去就好了。

现在有个新问题,就是我照着代码加了几个led灯组,然后开始乱闪了 ...

時間要從 0 走,那麼你就必須要在 setup()
中進行計時器的初始化,例如:

FLASH_START_TIME = millis();
FLASH_START_TIME2 = FLASH_START_TIME;
FLASH_START_TIME3 = FLASH_START_TIME+180;
FLASH_START_TIME4 = FLASH_START_TIME+300;

這樣所有計時器才有共同的 0 點(也就是初始化
當時的 millis() 值)以及你要設定的時間差
 楼主| 发表于 2020-9-3 19:55 | 显示全部楼层
shouzama 发表于 2020-9-3 06:47
時間要從 0 走,那麼你就必須要在 setup()
中進行計時器的初始化,例如:

还是不行额,无论我是放在setup()里,还是做unsigned long 声明,都是和之前结果一样,4个放一起就乱,新建草图去单独放两个led就没问题
发表于 2020-9-3 23:55 | 显示全部楼层
Hitomi21 发表于 2020-9-3 19:55
还是不行额,无论我是放在setup()里,还是做unsigned long 声明,都是和之前结果一样,4个放一起就乱,新 ...

我就覺得怪怪的,如果 4 段程式是各自獨立,
為何你的程式到後來是一堆 } } } ...??
然後再仔細看你的程式碼,你好像將應該
各自獨立的 4 段程式碼全混在一起了...

点评

此楼正解 if (A) { if (B) { if (C) { XXX; }}} 等价于 if (A && B && C) { XXX; }  发表于 2020-9-4 01:05
发表于 2020-9-4 01:08 | 显示全部楼层
改成这样就行
void loop {
if (A) { XXX ; }
if (B) { YYY ; }
if (C) { ZZZ ; }

}
 楼主| 发表于 2020-9-4 10:03 | 显示全部楼层
shouzama 发表于 2020-9-3 23:55
我就覺得怪怪的,如果 4 段程式是各自獨立,
為何你的程式到後來是一堆 } } } ...??
然後再仔細看你的程式 ...

对哦,现在改回来了,正常了,头都大了
 楼主| 发表于 2020-9-4 10:08 | 显示全部楼层
frankhan747 发表于 2020-9-4 01:08
改成这样就行
void loop {
if (A) { XXX ; }

谢谢,我现在还在初学阶段,理解不了这么复杂的数据,可能再积累些时日就看得明白了
发表于 2022-1-14 22:32 | 显示全部楼层
Hitomi21 发表于 2020-9-4 10:03
对哦,现在改回来了,正常了,头都大了

你好, 你這個燈效我也想放在飛機模型中.

我嘗試了你的程序, 改來改去都是像之前你所說亂閃.
請問可否分享是怎樣修改?
謝謝!
发表于 2022-1-15 17:30 | 显示全部楼层
本帖最后由 topdog 于 2022-1-15 17:37 编辑

向各位爱好者和先进报告:
[pre]volatile  unsigned long starttime;
const int LED = 13;

void setup() {
  Serial.begin(9600);
}

void loop() {
  lamplighter(100, HIGH);
  lamplighter(100, LOW);
  lamplighter(100, HIGH);
  lamplighter(500, LOW);
}

void lamplighter (unsigned long intervaltime, bool state) {
  pinMode(LED, OUTPUT);
  if (millis() - starttime == intervaltime ) {
    digitalWrite(LED, state);
    starttime = millis();
  }
}[/pre]
发表于 2022-1-15 23:27 | 显示全部楼层
topdog 发表于 2022-1-15 17:30
向各位爱好者和先进报告:
volatile  unsigned long starttime;
const int LED = 13;

單看這個程式...能正常 RUN?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:31 , Processed in 0.108628 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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