mills()替代delay()的實驗
mills()替代delay()的實驗
記得在網路上看到一些教學,提到delay()的狀態下會停止部件的
運作,這樣會暫停包含在整個及函式裡的程式碼。
mills()函式返回型別為
unsigned long
的無符號變數以下是呼叫mills()印出來的數值
unsigned long currenTime;
void setup(){
Serial.begin(115200);
}
void loop(){
currenTime=millis();
Serial.println(currenTime);
delay(1000);
}
-----------------------------------------------------------------------
--- More details at http://bit.ly/pio-monitor-filters
--- Miniterm on COM10 115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
7033
8033
9033
10033
11033
12033
13033
14033
15033
16033
17033
18033
19033
20033
可以看到它以1000毫秒一直往上增加,所以這可以紀錄經過的時間
和取得當下的經過的時間。
我自己理解的寫法公式
如果(新的時間 — 舊的時間 >= 暫停週期的時間)
舊的時間=新的時間
我以控制LED為練習
上傳之後,LED會一秒閃爍一次,和delay()有一樣的作用
const int led=18;
int ledSatus=LOW;
unsigned long oldTime=millis();
void setup(){
Serial.begin(115200);
pinMode(led, OUTPUT);
ledSatus=LOW;
}
void loop(){
unsigned long newTime=millis();
if (newTime-oldTime>=1000){
oldTime=newTime;
if (ledSatus==LOW){
ledSatus=HIGH;
}else{
ledSatus=LOW;
}
digitalWrite(led, ledSatus);
}
}
留言
張貼留言