☛ 功能說明
利用 Arduino UNO 開發板及 FreeRTOS 函式庫控制兩個伺服馬達同時擺動,伺服馬達 1 擺動角度為 0~180°,伺服馬達 2 擺動角度為 90~180°。
☛ 使用材料
Arduino UNO R3 開發板 × 1、伺服馬達 MG-90S × 2。
☛ 電路圖及麵包板接線圖
☛ 程式碼
#include<Arduino_FreeRTOS.h> //引用 FreeRTOS 函式庫 #include<Servo.h> //使用 Servo.h 函式庫 Servo myServo1; //建立 myServo1 資料形態的物件 Servo myServo2; //建立 myServo2 資料形態的物件 void Task1( void *pvParameters ); //宣告 Task1 void Task2( void *pvParameters ); //宣告 Task2 void setup() { myServo1.attach(3); //數位接腳 3 連接至伺服馬達 1 信號線 myServo2.attach(5); //數位接腳 5 連接至伺服馬達 2 信號線 xTaskCreate(myMoto1,"Task1",128,NULL,1,NULL); //建立 myMoto1 任務 xTaskCreate(myMoto2,"Task2",128,NULL,1,NULL); //建立 myMoto2 任務 vTaskStartScheduler(); //對所有任務 Task 進行任務排程 } void loop() { } void myMoto1(void *pvParameters) //伺服馬達 1, 0-180° 來回擺動 { int angle1; while(1) { for(angle1=0;angle1<=180;angle1++) //順時針擺動 { myServo1.write(angle1); vTaskDelay( 20 / portTICK_PERIOD_MS ); //延遲 20ms,降低伺服馬達擺動速度 } for(angle1=180;angle1>=0;angle1--) //逆時針擺動 { myServo1.write(angle1); vTaskDelay( 20 / portTICK_PERIOD_MS ); //延遲 20ms,降低伺服馬達擺動速度 } } } void myMoto2(void *pvParameters) //伺服馬達 2, 90-180° 來回擺動 { int angle2; while(1) { for(angle2=90;angle2<=180;angle2++) //順時針擺動 { myServo2.write(angle2); vTaskDelay( 20 / portTICK_PERIOD_MS ); //延遲 20ms,降低伺服馬達擺動速度 } for(angle2=180;angle2>=90;angle2--) //逆時針擺動 { myServo2.write(angle2); vTaskDelay( 20 / portTICK_PERIOD_MS ); //延遲 20ms,降低伺服馬達擺動速度 } } }