6

私は次のものを持っています:

2つのArduinoと2つのXBees。あるデータから別のデータにデータを送信したい。私は提案テストを行っているので、XBeesは通信します(一方のXBeeをArduinoに接続し、もう一方をPCに接続し、一方から書き込み、もう一方をもう一方の端末で監視します)。

次に、あるデータから別のデータにデータを送信します。

これらは私の2つのスクリプトです:

送信の場合(すべての文字を送信する前のテストでテストされます):

#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3); // RX, TX
char c = 'A';
int  pingPong = 1;

void setup()
{
    Serial.begin(9600);

    Serial.println( "Arduino started sending bytes via XBee" );

    //Set the data rate for the SoftwareSerial port
    xbee.begin(9600);
}

void loop() {
    // Send character via XBee to other XBee connected to Mac
    // via USB cable.
    xbee.write( c );

    //--- Display the character just sent on console. ---
    Serial.println( c );

    //--- Get the next letter in the alphabet, and reset to ---
    //--- 'A' once we have reached 'Z'.
    c = c + 1;
    if ( c>'Z' )
         c = 'A';

    //--- Switch LED on Arduino board for every character sent---
    if ( pingPong == 0 )
        digitalWrite(13, LOW);
    else
        digitalWrite(13, HIGH);
    pingPong = 1 - pingPong;
    delay( 1000 );
}

問題は、他のXBeeからデータを受信するためにArduinoを接続したときです。

これが私のコードです:

#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3); // RX, TX

void setup()
{
    Serial.begin(9600);

    Serial.println( "Arduino started receiving bytes via XBee" );

    // Set the data rate for the SoftwareSerial port.
    xbee.begin(9600);
}

void loop()  {
    int temp = xbee.read();

    Serial.print("Character received:");
    Serial.println(temp);
    delay(1000);
}

出力は常に:

Character received: -1.

tempをからintに変更すると、が表示されbyteますCharacter received: (a non-[ASCII][3] symbol)

XBeeシリーズ1を使用しています。

これらは、ladyada.netにある1つのチュートリアルに基づいて、X-CTUを介して構成されます。

次に、XBeeをArduino(TXをピン3に、RXを2に、VccとGNDにそれぞれ)に接続し、もう1つのXBeeをFTDIケーブルを介してPCに接続しました。Arduinoからキャラクターを送って、X-CTUのシリアルモニターで見ることができました。これは、それらが正しく構成されていることを意味しますか?

次に、Arduinoを受信機に接続したいと思いました。上記のコードを見ることができます。私は常に利用可能なデータを取得していません。

-1が返されるということは、シリアルにデータがないことを意味します。

4

3 に答える 3

6

に変更intするbyteと、実際には int に変更されcharます。非ASCII記号は、文字 ( 0b11111111) をレンダリングしようとした結果です。はデフォルトで署名されているため、10 進数のマイナス 1 ( -1) は 2 進数ではすべて 1です。検証するには、 Bin/Dec/Hex コンバーターintをチェックしてください。

つまり、 /をxbee.read()返すということです。ドキュメントには何も見つかりませんでしたが、エラーが原因であると想定します (ハードウェアドキュメントに基づく)。読むものが無いからです。bytechar-1Serial

次のことを試すことができます。

  • RX/TX ラインが正しいことを確認します。私を信じてください、それは起こります。
  • 読み取る前に、XBee に利用可能なデータがあるかどうかを確認してください。(バイトの読み取り準備が整うまで待機するため、印刷される行数が大幅に少なくなります。)
if (xbee.available()) {
    byte temp= xbee.read();
    Serial.print(temp);
}
  • 組み込み(ハードウェア)を使用します。SoftwareSerial は動作するはずですが、私の経験では、ハードウェア シリアルの方がはるかに信頼性が高くなります。
    • Arduinoのモデルによっては、(シリアル接続で自動リセットを無効にする)必要がある場合があります。これは、IDE のシリアル モニタ以外の場所から FTDI チップを介してデータを送信しようとしている場合にのみ必要なようです(一般的に言えば)。
  • このスレッドArduino to Arduino XBee Serial Communicationには、機能しているように見える非常によく似たセットアップがあります。できる限り作業を簡素化し、ゆっくりと機能を追加してください。
  • XBee RX & TX ラインを、このケーブルやこのブレークアウト ボードなどの USB-to-FTDI コネクタに直接接続します。

機能する概念実証ができるまでは、できるだけ単純にする必要があります。機能したら、機能を 1 つずつ追加します。これはすでに行っているようですが、おそらくさらに単純化できます (FTDI のみを使用して Arduinos を方程式から切り離し、ハードウェアシリアルを使用するなど)。

かなりクールなプロジェクトのようですね。幸運を!

于 2013-01-07T17:58:28.757 に答える