伺服馬達自己旋轉
大家好,剛開始學Arduino想詢問一下各位大大們
想藉由COM PORT來輸入值控制兩個STEP一個SERVO馬達轉動來做出類似自動手寫筆的東西
輸入值的格式(__,__,__)
但不知道為什麼
我輸入完值後馬達動做完
靜置一段時間後馬達會送回500,0,0的值
SERVO馬達(SG90)會有滋滋作響的聲音(好似內部有再轉外面沒再轉)
STEP部分就沒問題
程式如下
麻煩各位大大給點TIPS:
#include <Servo.h>
#include<Stepper.h>
const int steps=2048;
//const int stepPerRevolution=2048;
Stepper stepper1(steps,8,10,9,11);
Stepper stepper2(steps,4,6,5,7);
Servo myservo;
void setup()
{
/*set the com port baud rate*/
Serial.begin(9600);
/*set the stepper motor speed*/
stepper1.setSpeed(5);
stepper2.setSpeed(5);
/*set the servo motor and the value from datasheet*/
myservo.attach(3,500,2400);//servo motor control pin13 dataline
myservo.write(90);//let the angle to 90 degree
delay(1000);
Serial.println("please enter the Servoangle:\n");
Serial.println("please enter the xdistance:\n");
Serial.println("please enter the ydistance:\n");
}
void loop()
{
while (Serial.available() > 0) {
int servomoterangle = Serial.parseInt();
int xdistance=Serial.parseInt();
int ydistance=Serial.parseInt();
stepper1.step(xdistance);
delay(500);
stepper2.step(ydistance);
delay(500);
myservo.writeMicroseconds(servomoterangle);
delay(2000);
Serial.print(servomoterangle);
Serial.println("\n");
Serial.print(xdistance);
Serial.println("\n");
Serial.print(ydistance);
Serial.println("\n");
delay(400);
}
}
你不會是要伺服馬達旋轉吧?
我不知道你買的是那一種
伺服馬達有分角度控制和速度控制型
如果下 500 不會動,而且有滋滋聲
它應該是只能控制轉動的角度
沒辦法 360度轉動
試看看下不同值,它是不是會轉到其他角度
例如 1000,1500,1800
如果還沒反應,先拆掉兩個 steper
看看是不是電力不夠
超新手 發表於 2018-5-8 06:30
你不會是要伺服馬達旋轉吧?
我不知道你買的是那一種
伺服馬達有分角度控制和速度控制型
B2您好
Servo馬達確實要讓他轉角度0-180度(範圍SG90他說的是500-2400)<<他有轉動
只是我輸入一個值比如說(1200,2400,2400)他會轉一個角度
但我沒再下第二個值他會出現(500,0,0)這個值(馬達開始滋滋作響)
Stepper馬達轉圈數控制X,Y走多遠 你有加左右括號嗎?
你是輸入 1200,2400,2400 還是 (1200,2400,2400)
不用加括號 超新手 發表於 2018-5-8 09:52
你有加左右括號嗎?
你是輸入 1200,2400,2400 還是 (1200,2400,2400)
不用加括號
您好,沒有喔,為了表示清楚XD,Serial.parseInt()會判斷字元當成資料的分水嶺 你是用Arduino IDE 的序列埠監控視窗輸入的嗎?
一次輸入 1200, 2400,2400 然後按傳送
是嗎?
超新手 發表於 2018-5-8 10:26
你是用Arduino IDE 的序列埠監控視窗輸入的嗎?
一次輸入 1200, 2400,2400 然後按傳送
是嗎?
YES 剛剛小改了一下程式
多加了一行incomingByte就過了
while (Serial.available() > 0) {
int servomoterangle = Serial.parseInt();
int xdistance=Serial.parseInt();
int ydistance=Serial.parseInt();
int incomingByte = Serial.read();
突然就OK了,parseInt函式,沒讀完整嗎?
我用過你的程式試過, 基本上沒問題
所以我懷疑你在1200, 2400,2400後面有多輸入一些東西
但從你的描述中, 又好像沒有
不過基本上, 如果加那行才能正常執行, 是不太合理的
超新手 發表於 2018-5-8 11:07
我用過你的程式試過, 基本上沒問題
所以我懷疑你在1200, 2400,2400後面有多輸入一些東西
但從你的描述中,...
謝謝你
確實沒再輸入其他的value,所以當時我也很困惑
頁:
[1]