☛ 功能說明
串列埠傳送鍵盤按鍵值控制伺服馬達轉動任意角度。 按下數字鍵 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; } } }