【arduino多線程編程】arduino竟然還能多線程編程?確定不進來誇一下嘛......

目錄


1.SCoop庫下載
2.多線程簡介
3.多線程實現LED閃爍+計時
4.總結

1.SCoop庫下載

  【點擊這裏】提取碼:u7r5。下載SCoop庫,解壓後放在arduino安裝目錄下的libraries文件夾下即可。

2.多線程簡介

  看了上一篇《arduino面向對象編程》是不是感覺arduino已經到極限了?NO,NO,NO,arduino遠遠不止如此,不信你往下看:

  理解了單線程就很容易理解多線程了吧,舉個例子,假設有語文作文和數學試卷兩個任務等你完成,那你肯定只能先完成一個,再完成另一個,這樣雖不準確但很明確的理解單線程;往往單線程是很不實用的,太佔用時間;而複雜系統例如操作系統肯定不可能一件事一件事來執行,而往往是併發同時執行多個任務。

3.多線程實現LED閃爍+計時

  arduino多線程是依託於SCoop庫來實現的(當然還有其他庫可以實現,這裏使用更爲簡便的SCoop庫);大致過程分爲以下:

1.包含SCoop庫頭文件;
2.創建任務;
3.執行

  包含頭文件一句#include的事不必多講,執行是在主setup()函數中聲明以下代碼:

void setup()
{
 	 mySCoop.start();
}

  有點類似於python的多線程;然後在loop()裏這樣寫:

void loop()
{
 	 yield();
}

  可以參照python的生成器,你就理解成:你寫了多少個任務就給我生成多少個線程;
  

  重點是如何寫任務,這裏有兩種方法,學名叫什麼完整寫法,快速寫法,我是覺得沒多發必要去記這個,會用就行:

怎麼區分呢:如果你這個任務裏需要用到setup()函數就用style1(完整寫法);否則用style2:

在這裏插入圖片描述


完整代碼:

#include<SCoop.h>

int count=0;

//style1
defineTask(led)//創建一個名爲led的任務
void led::setup(){pinMode(13,OUTPUT);}
void led::loop(){digitalWrite(13,!digitalRead(13));sleep(1000);}

//style2
defineTaskLoop(cnt){Serial.println(count++);sleep(1000);}


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

void loop()
{
 	 yield();
}

  

實驗現象:

  實驗現象爲LED間隔1s(SCoop庫中的sleep()函數實現,以後細講)閃爍同時串口間隔1s輸出數字;LED閃爍就請自行動手試驗了,串口輸出計數如下圖:

在這裏插入圖片描述
  

4.總結

  雖然說是多線程併發,但實際上任務多了還可能會出現問題(arduino板子的性能決定),但是看到這裏就不應該再小看arduino了吧,這裏只用到了SCoop庫,但實際上arduino的庫是真滴多,有興趣可以自己去了解了解。

  

歡迎關注【菜小濤的CSDN】,這是一個有料、有趣的地方。

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