2012-05-01 55 views
1

我有一個Arduino與伺服器(Pin 9,5.5v和Ground)連接起來,它將在Arduino上運行任何ol測試;但是,當我發送一個串行命令來移動它時,沒有任何反應。 rx燈閃爍,所以我知道Arduino正在獲取信息。我認爲這個問題是在我的字節轉換。C#串行命令移動Arduino伺服X度?

碼時間:

的Arduino代碼:

#include <Servo.h> 

Servo myservo; // create servo object to control a servo 
       // a maximum of eight servo objects can be created 
void setup() 
{ 
    myservo.attach(9); 
    // attaches the servo on pin 9 to the servo object and sets the rotation to 0 
    myservo.write(0); 
} 

int pos1= 0; 
int pos2= 0; 
int pos3= 0; 
int totalMove = 0; 

void loop() 
{ 
    if (Serial.available() > 0 && totalMove > 0) 
    { 
     pos1 = Serial.read() - '0'; 
     // pos2 = Serial.read() - '0'; 
     // pos3 = Serial.read() - '0'; 
     // totalMove = ((pos3) + (pos2*10) + pos1*100); 

     myservo.write(pos1); 
    } 
} 

你看其他POS持有人,因爲evenutally我想能夠發送大於9的值,但是現在我只需要獲得它迴應:)

C#代碼:

public void moveServo() 
{ 
    if (!serialPort1.IsOpen) 
    { 
     Console.WriteLine("Oops"); 
     serialPort1.Open(); 
     return; 
    } 

    serialPort1.DtrEnable = true; 

    serialPort1.DataReceived += 
     new System.IO.Ports.SerialDataReceivedEventHandler(
      serialPort1_DataReceived); 

    serialPort1.Write(new byte[] {57}, 0, 1); 
} 

任何想法?

+2

http://arduino.cc/playground/Learning/SingleServoExample –

+0

你如何實例化和初始化C#代碼中的'serialPort1'對象? –

+0

serialPort1 = new System.IO.Ports.SerialPort(components); serialPort1.PortName =「COM4」; serialPort1.BaudRate = 9600; serialPort1。打開(); 像那樣 –

回答

1

你確定它可以使用其他軟件嗎?這通常是第一步,即使你必須使用超級終端。這將擺脫任何電纜問題,並給你正確的參數。

另外,我建議來自SysInternals的PortMon。它允許您在應用程序運行時監視串行端口活動。

確保您設置了所有串口參數;波特率,數據位,停止位,奇偶校驗,握手和讀寫超時。您還可以設置用於NewLine角色的值。

此外,不要依賴數據收集事件,您可以嘗試自己閱讀。

+0

謝謝;但是,連接正常,並且主板正在接收數據(RX燈以C#應用程序設置的1秒間隔閃爍),所以這不是問題。林相當肯定的問題在於int ---> Byte ---> int的字節轉換,我只是不知道事情進展到哪裏...... –

1

您發送該字節

serialPort1.Write(new byte[] {57}, 0, 1); 

這基本上是字符'9'。接收器代碼是

pos1 = Serial.read() - '0'; 

這意味着pos1具有值9(注意丟失')。然後將該值直接寫入Servo實例。

myservo.write(pos1); 

總結了所有的部件:您可以只有效發送值0-9伺服。但reference page告訴你write要求範圍0到180.只發送0到9到伺服可能只是擺動它一點點。

0

也許是因爲你的邏輯水平。

lpt和串口輸出爲2.5v,有的驅動需要5v設置和復位。

因此您需要像max232這樣的ic將邏輯電平從2.5v轉換爲5volt。