|
請按下圖配線。
Servo.h 下載 請鍵入下列程式:
#include <Servo.h> // 包含Servo.h標頭檔
#define RST 90 // 定義歸零位置
Servo ServoH; // 建構Servo物件
Servo ServoV; // 建構Servo物件
int val_H,val_V; // 宣告位置變數
char data[4];
int sw=0,i=0,j;
// 初始設定
void setup() {
Serial.begin(9600);
ServoH.attach(10); // 伺服機H連接10腳
ServoV.attach(11); // 伺服機V連接11腳
ServoH.write(RST); // 水平伺服機移至90度位置
ServoV.write(RST); // 垂直伺服機移至90度位置
}
void loop() {
char chr;
if (Serial.available()) {
while ((chr = Serial.read()) != '\n') {
// 確認輸入的字元介於'0'和'9',且索引i小於3(確保僅讀取前三個字)
if (chr >= '0' && chr <= '9' && i < 3) {
data[i] = chr;
i++;
}
}
if(chr == '\n'){
if(sw==0){
val_H=0;
for(j=0;j<i;j++){//將數字字串轉成數值
val_H*=10;
val_H+=data[j]-'0';
}
sw=1;//切換下一次輸入為 val_V
i=0;
}
else{
val_V=0;
for(j=0;j<i;j++){//將數字字串轉成數值
val_V*=10;
val_V+=data[j]-'0';
}
sw=0;//切換下一次輸入為 val_H
i=0;
}
Serial.print(val_H);Serial.print(" , ");Serial.println(val_V);
val_H = map(val_H, 0, 1023, 0, 179); // 調整水平位置值
val_V = map(val_V, 0, 1023, 0, 179); // 調整垂直位置值
ServoH.write(val_H); // 驅動水平伺服機
ServoV.write(val_V); // 驅動垂直伺服機
}
}
delay(20); // 暫停20ms
}
|