Robofun 機器人論壇

標題: 伺服馬達自己旋轉 [打印本頁]

作者: farmer30175    時間: 2018-5-7 21:28
標題: 伺服馬達自己旋轉
大家好,剛開始學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);
   
   
  }  

   
  }

作者: 超新手    時間: 2018-5-8 06:30
你不會是要伺服馬達旋轉吧?
我不知道你買的是那一種
伺服馬達有分角度控制和速度控制型
如果下 500 不會動,而且有滋滋聲
它應該是只能控制轉動的角度
沒辦法 360度轉動
試看看下不同值,它是不是會轉到其他角度
例如 1000,1500,1800
如果還沒反應,先拆掉兩個 steper
看看是不是電力不夠

作者: farmer30175    時間: 2018-5-8 08:54
超新手 發表於 2018-5-8 06:30
你不會是要伺服馬達旋轉吧?
我不知道你買的是那一種
伺服馬達有分角度控制和速度控制型

B2您好
Servo馬達確實要讓他轉角度0-180度(範圍SG90他說的是500-2400)<<他有轉動
只是我輸入一個值比如說(1200,2400,2400)他會轉一個角度
但我沒再下第二個值他會出現(500,0,0)這個值(馬達開始滋滋作響)
Stepper馬達轉圈數控制X,Y走多遠
作者: 超新手    時間: 2018-5-8 09:52
你有加左右括號嗎?
你是輸入 1200,2400,2400 還是 (1200,2400,2400)
不用加括號
作者: farmer30175    時間: 2018-5-8 09:55
超新手 發表於 2018-5-8 09:52
你有加左右括號嗎?
你是輸入 1200,2400,2400 還是 (1200,2400,2400)
不用加括號

您好,沒有喔,為了表示清楚XD,Serial.parseInt()會判斷字元當成資料的分水嶺
作者: 超新手    時間: 2018-5-8 10:26
你是用Arduino IDE 的序列埠監控視窗輸入的嗎?
一次輸入 1200, 2400,2400 然後按傳送
是嗎?

作者: farmer30175    時間: 2018-5-8 10:40
超新手 發表於 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函式,沒讀完整嗎?

作者: 超新手    時間: 2018-5-8 11:07
我用過你的程式試過, 基本上沒問題
所以我懷疑你在1200, 2400,2400後面有多輸入一些東西
但從你的描述中, 又好像沒有
不過基本上, 如果加那行才能正常執行, 是不太合理的



作者: farmer30175    時間: 2018-5-8 11:19
超新手 發表於 2018-5-8 11:07
我用過你的程式試過, 基本上沒問題
所以我懷疑你在1200, 2400,2400後面有多輸入一些東西
但從你的描述中,  ...

謝謝你

確實沒再輸入其他的value,所以當時我也很困惑




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2