☛ 功能說明

串列埠傳送鍵盤按鍵值控制伺服馬達轉動任意角度。 按下數字鍵 0~9 可以設定伺服馬達轉動角度;按下 a 鍵時,伺服馬達轉動所設定的角度。 例如輸入 90a 時,伺服馬達轉動至 90° 位置;輸入 20a 時,伺服馬達轉動至 20° 位置。

☛ 使用材料

Arduino UNO R3 開發板 × 1、SG-90 伺服馬達 × 1。

☛ 電路圖及麵包板接線圖

☛ 程式碼

#include<Servo.h>                   //使用 Servo.h 函式庫

Servo myServo;                      //建立 Servo 資料形態物件
int   angle=0;                      //伺服馬達轉動角度
char  ch;                           //按鍵值

void setup()
{
     Serial.begin(9600);            //初始化串列埠,設定鮑率為 9600bps
     myServo.attach(2);             //數位接腳 2 連接至伺服馬達信號線接腳
}

void loop()
{
     if(Serial.available())         //鍵盤按下任意鍵
     {
        ch=Serial.read();           //讀取按鍵值
        if(ch>='0' && ch<='9')      //按鍵為 0~9?
           angle=angle*10+ch-'0';   //若為數位鍵,計算加權並儲存
        else  if(ch=='a' || ch=='A')//按鍵值為 a 或 A
        {
              myServo.write(angle); //轉動至所設定的角度位置
              angle=0;              //重設角度值
        }
     }
}

 

☛ 練習

⑴ 設計 Arduino 程式,利用鍵盤控制兩個伺服馬達 a 及 b 轉動任意角度。 按下數字鍵 0~9 可以設定伺服馬達轉動角度;按鍵 a 或 b 控制伺服馬達 a 或 b 轉動至所設定的角度。 例如:輸入 90a 時,伺服馬達 a 轉動至 90° 的位置;輸入 180b 時,伺服馬達 b 轉動至 180° 的位置。

#include<Servo.h>                    //使用 Servo.h 函式庫

Servo myServo1;                      //建立 Servo 資料形態物件 myServo1
Servo myServo2;                      //建立 Servo 資料形態物件 myServo2
int   angle=0;                       //伺服馬達轉動角度
char  ch;                            //按鍵值

void setup()
{
     Serial.begin(9600);             //初始化串列埠,設定鮑率為 9600bps
     myServo1.attach(2);             //數位接腳 2 連接至伺服馬達 1 信號線接腳
     myServo2.attach(3);             //數位接腳 3 連接至伺服馬達 2 信號線接腳
}

void loop()
{
     if(Serial.available())          //鍵盤按下任意鍵
     {
        ch=Serial.read();            //讀取按鍵值
        if(ch>='0' && ch<='9')       //按鍵為 0~9?
           angle=angle*10+ch-'0';    //若為數位鍵,計算加權並儲存
        else  if(ch=='a' || ch=='A') //按鍵值為 a 或 A
        {
              myServo1.write(angle); //伺服馬達 1 轉動至所設定的角度位置
              angle=0;               //重設角度值
        } else if(ch=='b' || ch=='B')//按鍵值為 b 或 B
          {
              myServo2.write(angle); //伺服馬達 2 轉動至所設定的角度位置
              angle=0;               //重設角度值
          }
     }
}

 

⑵ 設計 Arduino 程式,利用鍵盤控制四個伺服馬達 a、b、c 及 d 轉動任意角度。 按下數字鍵 0~9 可以設定伺服馬達轉動角度;按鍵 a、 b、c、d 控制伺服馬達 a、b、c 或 d 轉動至所設定的角度。 例如:輸入 90a 時,伺服馬達 a 轉動至 90° 的位置;輸入 180b 時,伺服馬達 b 轉動至 180° 的位置;輸入 45c 時,伺服馬達 c 轉動至 45° 的位置;輸入 135d 時,伺服馬達 d 轉動至 135° 的位置。

#include<Servo.h>                    //使用 Servo.h 函式庫

Servo myServo1;                      //建立 Servo 資料形態物件 myServo1
Servo myServo2;                      //建立 Servo 資料形態物件 myServo2
Servo myServo3;                      //建立 Servo 資料形態物件 myServo3
Servo myServo4;                      //建立 Servo 資料形態物件 myServo4

int   angle=0;                       //伺服馬達轉動角度
char  ch;                            //按鍵值

void setup()
{
     Serial.begin(9600);             //初始化串列埠,設定鮑率為 9600bps
     myServo1.attach(2);             //數位接腳 2 連接至伺服馬達 1 信號線接腳
     myServo2.attach(3);             //數位接腳 3 連接至伺服馬達 2 信號線接腳
     myServo3.attach(5);             //數位接腳 5 連接至伺服馬達 3 信號線接腳
     myServo4.attach(9);             //數位接腳 9 連接至伺服馬達 4 信號線接腳
}

void loop()
{
     if(Serial.available())          //鍵盤按下任意鍵
     {
        ch=Serial.read();            //讀取按鍵值
        if(ch>='0' && ch<='9')       //按鍵為 0~9?
           angle=angle*10+ch-'0';    //若為數位鍵,計算加權並儲存
        switch(ch)
        {
               case 'a':             //按鍵值為 a 或 A
               case 'A':             //伺服馬達 1 轉動至所設定的角度位置
                        myServo1.write(angle);
                        angle=0;     //重設轉動角度
                        break;
               case 'b':             //按鍵值為 b 或 B
               case 'B':             //伺服馬達 2 轉動至所設定的角度位置
                        myServo2.write(angle);
                        angle=0;     //重設轉動角度
                        break;
               case 'c':             //按鍵值為 c 或 C
               case 'C':             //伺服馬達 3 轉動至所設定的角度位置
                        myServo3.write(angle);
                        angle=0;     //重設轉動角度
                        break;
               case 'd':             //按鍵值為 d 或 D
               case 'D':             //伺服馬達 4 轉動至所設定的角度位置
                        myServo4.write(angle);
                        angle=0;     //重設轉動角度
                        break;
        }
     }
}