Arduino - 多線程庫SCoop應用 之 任務

使用該庫的【任務】功能,首先要做三件事:

第一:引用庫
#include “SCoop.h”
【庫文件下載地址】
http://www.dfrobot.com.cn/community/forum.php?mod=attachment&aid=MTI4MzZ8MWFmMjk1MGF8MTQ1MDcwNTA2M3wwfD

https://share.weiyun.com/45420032c079bbf55a42f32d6a023ca2

第二:setup函數裏,調用mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函數裏,調用yield()命令
void loop() {
yield();
}

接下來就可以使用【任務】了。有兩種定義方式,請繼續往下看:
1、完整定義:定義【任務】的setup和loop兩個函數。
定義一個名字爲“TaskTest”的任務:
defineTask(TaskTest); //用defineTask定義一個任務,名爲TaskTest
void TaskTest::setup() //定義該任務的setup()函數,用於初始化設置。
{
//這裏是任務的setup函數的內容
}
void TaskTest::loop() //定義該任務的loop()函數,用於循環執行代碼。
{
//這裏是任務的loop函數的內容
}

2、快速定義:僅定義任務的loop函數
如果這個線程中執行的動作不需要初始化setup,只需要循環loop的話,可以直接使用defineTaskLoop()快速定義該線程任務,如下:
defineTaskLoop(TaskTest1)
{
//這裏是任務的loop函數的內容
}

注意一點,使用此庫之後,請使用sleep(ms)作爲延時,不要用delay()了。
因爲sleep(ms)只針對當前線程。而delay(ms)是針對全局的。

最後來一個完成的演示吧,2個LED分別以100毫秒和1秒的速度閃爍。12和13引腳分別接LED,然後運行代碼看看效果吧。


#include "SCoop.h"
//完整定義
defineTask(TaskTest);
void TaskTest::setup()
{
  pinMode(13, OUTPUT);
}
void TaskTest::loop()
{
  digitalWrite(13, HIGH);
  sleep(1000);
  digitalWrite(13, LOW);
  sleep(1000);
}

//快速定義
defineTaskLoop(TaskTest1)
{
  digitalWrite(12, HIGH);
  sleep(100);
  digitalWrite(12, LOW);
  sleep(100);
}

void setup() {
  pinMode(12, OUTPUT);
  mySCoop.start();
}

void loop()
{
  yield();
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章