讀取訊號控制兩顆馬達

本篇接續7/18的文章,使用輸入脈衝寬度控制的方法控制,並將序列埠輸入的程式寫進來,完成由序列埠輸入最終角度的脈衝寬度來控制馬達的程式。

MG996R馬達角度由0度到180度相對的脈衝寬度為500到2500,1個脈衝寬度相對的角度值為0.09度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <Servo.h>

Servo myservo;      //第一顆馬達
Servo myservo2;    //第二顆馬達

void setup() 
{ 
  Serial.begin(9600);             //通訊速率
  myservo.attach(9, 500, 2500); // 修正脈衝寬度範圍
  myservo2.attach(10, 500, 2500); // 修正脈衝寬度範圍
}

void loop() 
{ 
    myservo.write(0);      
    myservo2.write(0); 
    int d;
    if(Serial.available()){           
      d = Serial.parseInt();    //定義輸入訊號值為d
      Serial.println(d);            
      if(0 <= d && d <= 2500){   //限制訊號範圍
      delay(3000);
      for(int i = 500; i <= d; i+=10){  
        myservo.writeMicroseconds(i); // 直接以脈衝寬度控制
        myservo2.writeMicroseconds(i);
        delay(10);
      }
      delay(3000);
      for(int i = d; i >= 500; i-=10){
        myservo.writeMicroseconds(i);
        myservo2.writeMicroseconds(i);
        delay(10);
      }
      }
    }
}

結語:

以下方的程式可以將序列埠輸入的數值輸入程式中使用。

1
2
3
4
5
6
7
int d;
if(Serial.available()){           
d = Serial.parseInt();    //定義輸入訊號值為d
Serial.println(d);            
if(0 <= d && d <= 2500){   //限制訊號範圍
   }
}

且包在其中的for迴圈可以同使對兩個馬達輸入訊號,達成控制兩個馬達的目的。


Comments

comments powered by Disqus