1

私はArduinoをサーボ(ピン9、5.5vおよびグラウンド)に接続しています。Arduinoでの古いテストで実行されます。ただし、シリアルコマンドを送信して移動しても、何も起こりません。rxライトが点滅するので、Arduinoが情報を取得していることがわかります。問題は私のバイト変換にあると思います。

コード時間:

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);
     }
} 

でも、9より大きい値を送信できるようにしたいので、他のposホルダーが表示されますが、今のところ、応答させる必要があります:)

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);
}

何か案は?

4

3 に答える 3

1

このバイトを送信しています

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

これは基本的にキャラクター'9'です。受信コードは

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

これpos1は、値があることを意味します9(欠落している に注意してください')。この値は、インスタンスに直接書き込まれServoます。

myservo.write(pos1);

すべてのパーツをまとめる: 0 から 9 の値のみを効率的にサーボに送信できます。しかし、参照ページにはwrite、0 から 180 の範囲が必要であると書かれています。0 から 9 だけをサーボに送信すると、サーボが少し揺れるだけかもしれません。

于 2012-05-01T20:48:15.880 に答える
1

他のソフトウェアを使用して動作することを確認しましたか? ハイパーターミナルを使用する必要がある場合でも、通常はこれが最初のステップです。これにより、ケーブルの問題が解消され、正しいパラメーターが得られます。

また、SysInternals のPortMonもお勧めします。アプリケーションの実行中にシリアル ポートのアクティビティを監視できます。

すべてのシリアル ポート パラメータを設定していることを確認してください。ボー レート、データ ビット、ストップ ビット、パリティ、ハンドシェイク、および読み取りと書き込みのタイムアウト。NewLine 文字に使用する値を設定することもできます。

また、データ受信イベントに頼るのではなく、自分で読み取ってみるのもよいでしょう。

于 2012-05-01T12:21:58.677 に答える
0

多分それはあなたの論理レベルのせいです。

lptおよびシリアルポートの出力は2.5vであり、一部のドライバーは設定とリセットに5vが必要です。

したがって、ロジックレベルを2.5vから5voltに変換するには、max232のようなICが必要です。

于 2012-07-07T16:55:13.300 に答える