讀取訊號控制兩顆馬達
本篇接續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