子函数能不耽误主函数运行吗
问下看到这问题的大佬,有函数或者别的方法能够使arduino子函数不耽误其他函数运行吗?我有一个程序需要子函数执行相当长的时间,但是如果执行子函数,那么主函数就要等这段时间。执行速度变得巨慢! ARDUINO 的程式原本就是逐行執行,如果你要母程式&子程式同步兼顧的話,
就是要自已改寫程式執行的方式
比方說以 delay() 來講,子程式如果用了
delay() 造成佔用太多執行時間,就改寫成
先讀取 Millis() 毫秒值記錄為起始值,然後
讓程式繼續往下跑,並判斷時間是否已經
過了想要 delay 的值
如果是,切換工作狀態(當成已 delay 完成切
往下一個工作指令),然後一樣是記錄 millis()、
比對經過時間...
你的子程式為何佔用太多時間? :o
shouzama 发表于 2018-9-16 07:39
ARDUINO 的程式原本就是逐行執行,
如果你要母程式&子程式同步兼顧的話,
就是要自已改寫程式執行的方式
timer1=millis();
digitalWrite(a1,LOW);
digitalWrite(a2,HIGH);
digitalWrite(a3,HIGH);
digitalWrite(a4,HIGH);
digitalWrite(a5,HIGH);
delay(200);
timer2=millis();
digitalWrite(a1, HIGH);
digitalWrite(a2, HIGH);
digitalWrite(a3, HIGH);
digitalWrite(a4, HIGH);
digitalWrite(a5, HIGH);
while(timer2-timer1>2000)
{
digitalWrite(a1,LOW);
digitalWrite(a2,LOW);
digitalWrite(a3,LOW);
digitalWrite(a4,LOW);
digitalWrite(a5,LOW);
timer2=millis();
} 这样吗?
避免用 delay,然後同主程式一齊放 loop 入面, 改成 if (millis() - lastTime > 2000) 之類代替 delay(2000).
比如你想每 2 秒轉一次:
void loop() {
:
: 主程式
:
if (millis() - lastTime > 2000) {
mode = 1 - mode;
digitalWrite(a1, mode);
digitalWirte(a2, mode);
:
lastTime = millis();
}
}
主程式入面都唔好用 delay().
避免用Delay() 状态机 或者 protothreads
页:
[1]