☛ 功能說明

利用 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,降低伺服馬達擺動速度
           }
     }
}